四、性能优化
4.1 动量法
4.1.1 病态曲率
在SGD问题中,通常会出现病态曲率问题。下图为损失函数轮廓。在进入以蓝色标记的山沟状区域之前随机开始。颜色实际上表示损失函数在特定点处的值有多大,红色表示最大值,蓝色表示最小值。我们想要达到最小值点,为此但需要我们穿过山沟。这个区域就是所谓的病态曲率。
梯度下降沿着山沟的山脊反弹,向极小的方向移动较慢。这是因为脊的表面在W1方向上弯曲得更陡峭。
如果把原始的SGD问题想象成一个纸团在重力作用向下滚动,由于质量小受到山壁弹力的干扰大,导致来回震荡;或者在鞍点处因为质量小速度很快减为 0,导致无法离开这块平地。动量方法相当于把纸团换成了铁球;不容易受到外力的干扰,轨迹更加稳定;同时因为在鞍点处因为惯性的作用,更有可能离开平地。
4.1.2 动量法
动量法更新公式以及算法流程伪代码图如下所示:
4.2 自适应梯度算法
4.2.1 AdaGrad
Adaptive Gradient:自适应梯度
参数自适应变化:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率。具体来说,每个参数的学习率会缩放各参数反比于其历史梯度。
算法存在的问题:
(1)学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束。
(2)需要设置一个全局的初始学习率。
4.2.2 RMSProp
RMSProp: Root Mean Square Prop
RMSProp 解决 AdaGrad 方法中学习率过度衰减的问题。RMSProp 使用指数衰减平均以丢弃遥远的历史,使其能够快速收敛;此外,RMSProp 还加入了超参数 𝜌 控制衰减速率。具体来说(对比 AdaGrad 的算法描述),即修改 𝑟 为
记
则可以得到
算法伪代码如下所示:
4.2.3 Adam
Adam 在 RMSProp 方法的基础上更进一步:除了加入历史梯度平方的指数衰减平均(𝑟)外, 还保留了历史梯度的指数衰减平均(𝑠),相当于动量。
Adam 行为就像一个带有摩擦力的小球,在误差面上倾向于平坦的极小值。该算法的伪代码如下图所示:
4.3 性能优化问题描述
4.3.1 待解决的问题
权值𝐰取何值,指标函数𝐽(𝐰)最小?
恰恰是最优化方法中的基本问题:函数最小化。进一步,我们希望建立迭代形式,并且形式尽量简单,类似基本BP算法(最速梯度法):
所以,如何选取、构成优化核心内容。
4.3.2 基本思想
考虑函数𝑓(𝑥), 在某点𝑥∗上进行Taylor展开,
考虑函数𝑓(𝐱),在某点𝑥∗展开,类似的,有
或形象化记法:
全局极小点和局部极小点的一阶条件为必要条件:𝛻𝑓 (𝐱∗)= 0 (驻点),二阶条件为充分条件:H半正定。鞍点:沿某方向是极大值点,沿另一方向是极小值。
五、卷积神经网络基础
5.1 深度学习平台介绍
目前神经网络的研究均是基于Pytorch、Tensorflow、Keras、caffe等框架进行模型的搭建以及训练。深度学习平台集成了很多神经网络中的常用操作的API,将神经网络的搭建和训练变得更加简单。除了上述的框架之外,近些年还推出了基于特定任务的框架如dectection2等。
Pytorch是由Facebook人工智能研究院根据torch开发的主要以Python优先的深度学习框架。PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。该框架入门简单、灵活性高、性能好、论坛环境优秀、用户文档丰富,因此pytorch受到了广泛的好评并积累了一定数量的用户。
5.2 基础
5.2.1 进化史
5.2.2 基本概念
全连接网络:链接权过多,难算难收敛,同时可能进入局部极小值,也容易产生过拟合问题
局部连接网络:顾名思义,只有一部分权值连接。部分输入和权值卷积。
填充(Padding):在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。
步长(Stride):每一步的时长
多通道卷积:如RGB
池化:使用局部统计特征,如均值或最大值。解决特征过多问题
构成:由多个卷积层和下采样层构成,后面可连接全连接网络
卷积层:k个滤波器
下采样层:采用mean或max
后面:连着全连接网络
5.3 Lenet-5网络
5.3.1 网络介绍
网络提出:
网络结构大概如下:
5.3.2 网络结构详解
1、卷积层C1
手写数字数据集是灰度图像,输入为32 × 32 × 1 的图像,卷积核大小为5 × 5 ,卷积核数量为6,步长为1,零填充。最终得到的feature maps大小为(32 − 5 + 1 = 28 )。每个神经元对应5*5+1个参数,共6个feature map,28*28个神经元,因此共有(5*5+1)*6*(28*28)=122,304连接
2、下采样层S2
卷积层C1之后接着就是池化运算,池化核大小为2 × 22,LeNet-5池化运算的采样方式为4个输入相加,乘以一个可训练参数,再加上一个可训练偏置,结果通过sigmoid。
3、卷积层C3
C3中可训练参数并未直接连接S2所有的特征图,而是如图所示稀疏连接。在原论文中解释了使用这种采样方式原因包含两点:限制了连接数不至于过大(当年的计算能力比较弱);强制限定不同特征图的组合可以使映射得到的特征图学习到不同的特征模式。
4、下采样层S4
与下采样层S2 类似,采用大小为2 × 2,步距为2的池化核对输入feature maps下采样,输出feature maps大小为5 × 5 。
5、卷积层C5
与卷积层C3不同,卷积层C5的输入为S4 的全部feature maps,由于S4 层的16个图的大小为5 × 5 ,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。
6、全连接层F6 和output
F6有84个神经元,与C5全连接,总连接数(120+1)*84=10164。
output由欧式径向基函数单元构成,每类一个单元, 输出RBF单元计算输入向量和参数向量之间的欧式距离。
5.3.3网络说明:
(1)与现在网络的区别:
a.卷积时不进行填充(padding)
b.池化层选用平均池化而非最大池化
c.选用Sigmoid或tanh而非ReLU作为非线性环节激活函数
d.层数较浅,参数数量小(约为6万)
(2)普遍规律
随网络深入,宽、高衰减,通道数增加。