1、为什么引入非线性激活函数
如果不用激励函数,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。当引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。
2、为什么使用 ReLU 激活函数
第一,采用 sigmoid 等函数,算激活函数时(指数运算),计算量大,反向传播求梯度时,求导涉及除法,计算量相对大,而采用 Relu 激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid 函数反向传播时,很容易就会出现梯度消失的情况,会造成信息丢失,无法完成深层网络的训练。
第三,Relu 会使一部分神经元的输出为 0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
3、权重初始化
假定网络结构为10个隐层,1个输出层,每个隐层包含500个神经元,使用双曲正切tanh激活函数
错误1:全零初始化:因为如果网络中的每个神经元都计算出同样的输出,然后它们就会在反向传播中计算出同样的梯度,从而进行同样的参数更新。不同的结点无法学到不同的特征,很可能直接导致模型失效
错误2:权值来自N(0,0.01)的高斯分布=正态分布,只有第一层输出满足正态分布,后面层的输出接近0,输入信息传递不到输出层,网络得不到训练
xavier初始化:(当权重的方差为1/N时,N为输入数据维度,输入数据和输出数据的方差一致)权重来自N(0,1/N),当激活函数为relu时,权重来自N(0,2/N)
4、解释 logistic 回归
它是一种用于解决二分类(0 or 1)问题的机器学习方法,针对的是线性可分问题,
实现方法:在每个特征上都乘以一个回归系数,然后所有的相乘结果进行累加,将这个总结作为输入,输入到 sigmoid 函数中,从而得到一个大小为 0~1 之间的值,该值作为标签为1的概率,当该值大于 0.5 归类为 1,否则归类为 0。
如果我们采集到了一组数据一共N个,
,这个合成在一起的合事件发生的总概率就是将每一个样本发生的概率相乘就可以了:
![[公式]]()
由于连乘很复杂,我们通过两边取对数来把连乘变成连加的形式,即:
![[公式]]()
其中, ![[公式]]()
这个函数
又叫做它的损失函数。这里的损失函数的值等于事件发生的总概率,我们希望它越大越好。但是跟损失的含义有点儿违背,因此也可以在前面取个负号。因为该损失函数L是一个连续的凸函数,它只会有一个全局最优的点,不存在局部最优。然后就可以采用梯度下降不断优化参数了。当收敛以后,我们得到的极值点一定就是全局最优的点。
5、简述 CNN 和 FCN 的区别
CNN 卷积神经网络的目的在于分类。CNN由输入层、卷积层、池化层、全连接层、Softmax层组成,最后输出一个特定长度的向量,表示输入图像属于每一类的概率,以此作为分类的标签,不过丢失了空间信息。比如以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务
FCN 全卷积网络的目的在于语义分割(对图像的每个像素归类和分组)。由于输出需要是一个二维的分割图,所以FCN 在结构上将 CNN 网络最后的全连接层变成反卷积操作。FCN 可以接受任意尺寸的输入图像。通过反卷积层对最后一个卷积层的 feature map 进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在与输入图等大小的特征图上对每个像素进行分类,逐像素地用 softmax 计算损失。
6、什么是多态
多态就是同一个接口,使用不同的实例而执行不同操作
多态存在的三个必要条件:继承、重写、基类引用指向派生类对象
比如Parent p = new Child();当使用多态方式调用方法时,首先检查基类中是否有该方法,如果没有,则编译错误;如果有,再去调用派生类的同名方法。
7、Unet 网络和 Vnet 网络的区别
Unet 网络:可以分为两个部分,第一个部分对图像进行下采样,第二个部分对图像进行上采样。共做了四次下采样和四次上采样,下采样采用 maxpool 的方法(最大值池化),上采样采用反卷积的方法,在每次采样之前对图像做两次卷积,没有 padding,因此图像在卷积过程中大小在缩小。在下采样过程中,通道数是不断翻倍,上采样过程,通道数是不断减半。同时将相对应的下采样过程中的特征图裁剪添加至上采样的特征图中,来弥补分割的细节度。Unet 网络在卷积的过程中采样激活函数为 ReLU
Vnet 网络:也可以分为两部分,第一个部分对图像进行下采样,第二个部分对图像进行上采样。共做了四次下采样和四次上采样,下采样采用卷积的方法,步长为 2,因此图像大小减半(相比于池化的方法,使用卷积下采样,内存占用更小,因为在反向传播的时候最大值池化需要存储最大值所在的位置)上采样采用反卷积的方法。在下采样过程中,通道数是不断翻倍,上采样过程,通道数是不断减半。同时将相对应的下采样过程中的特征图添加至上采样的特征图中,来弥补分割的细节度。Vnet 网络在卷积的过程中采样激活函数为 PReLU
8、解释随机梯度下降 SGD
随机抽取一批样本,利用现有参数对该样本的每一个输入生成一个估计输出 y,然后跟实
际输出比较,统计该批样本的误差,求平均以后得到平均误差,以此来作为更新参数的依据。
由于是抽取,因此不可避免的,得到的梯度肯定有误差.因此学习速率需要逐渐减小.否则模
型无法收敛 。因为误差,所以每一次迭代的梯度受抽样的影响比较大,也就是说梯度含有比较
大的噪声,不能很好的反映真实梯度.
在实践中,一般采用 SGD+momentum 的配置,相比普通的 SGD 方法,这种配置通常能极
大地加快收敛速度。虽然名字为动量,其物理意义更接近于摩擦,其可以降低速度值,降低
了系统的动能,防止石头在山谷的最底部不能停止情况的发生。动量的取值范围通常为[0.5,
0.9, 0.95, 0.99],一种常见的做法是在迭代开始时将其设为 0.5,在一定的迭代次数(epoch)
后,将其值更新为 0.99。
在算法迭代过程中逐步降低学习率(step_size)通常可以加快算法的收敛速度。常用的用
来更新学习率的方法有三种:逐步降低(Step decay),即经过一定迭代次数后将学习率乘
以一个小的衰减因子;指数衰减(Exponential decay);倒数衰减(1/t decay)。实践中发现
逐步衰减的效果优于另外两种方法,一方面在于其需要设置的超参数数量少,另一方面其可
解释性也强于另两种方法。