本文介绍一些常用的优化方法、处理过拟合的一些手段、批归一化的方法和超参数的选取。
回忆:随机梯度下降(SGD)及动量(momentum)
训练中需要调整学习率
随机梯度下降算法对每批数据
进行优化,其中J 为损失函数:


基于动量的更新过程:


我们前面学习地更新
的方法,都是对所有的变量进行调整的,是全局且同等地调整各个参数的学习率,这并不一定是最优的学习方式(如不同层的权值的更新率不一定非要相同),
那么我们能不能让它自适应地对不同参数进行不同学习率地调整呢?
一种典型的自适应学习率算法
梯度记为
更新过程:
通常在
和
之间
变为了 
注:如上
表示g这个向量每个元素的平方,依旧是向量;同理下方开根号操作也是,都是逐元素操作。
例子:
假设某次迭代中,
那么


显然
的有效学习率
比
的有效学习率
大,这说明虽然在前面的历史过程中,第九个参数的梯度的绝对值比较小,但在本次就多更新一些;相反的第三次参数的梯度的绝对值比较大,在更新时就少更新一些。这样就达成了实际学习率的一些平衡,避免了梯度小更新就小的问题。
引入 c 对不同参数的更新过程进行归一化(平衡)
本方法有什么缺点吗?
由于
这会使c递增,导致有效学习率
一直变小。这可能会导致早停(early stopping)。过早停止了优化。
那我们怎么解决这个问题呢?
RMSProp算法在Adagrad的基础上提出改进,以解决学习率单调下降的问题;
引入一个遗忘因子
通常为 0.9,0.99,0.999
RMSProp依然根据梯度的大小来调整学习率,但不同于Adagrad,学习率不会一直单调下降。
平等贡献于c(t)
对于k<
对c(t)的贡献指数级衰减,即比较看重近期的g的平方,这样c可能增加也可能减少。
缺点:如何引入动量 ?
由 kingma and Ba (2015)提出。 默认算法。
- 简单形式
- 完整形式(“warm up”)
其中 m 表示积攒历史梯度,c 表示积攒历史平方梯度,t 表示迭代次数。
建议值:
![]()

关于优化器的更多细节:CS231n Convolutional Neural Networks for Visual Recognition
回忆:多项式回归问题

什么是过拟合?
神经网络通常含有大量参数 (数百万甚至数十亿),容易过拟合;
其它技巧
当发现训练损失逐渐下降,但验证集损失逐渐上升时,停止优化。

注意:跟Adagrad优化引起的“早停”是两回事。
在训练迭代过程中,以 p (通常为0.5)的概率随即舍弃掉每个隐含层神经元(输出置零)。

这些被置零的输出将用于在反向传播中计算梯度。
优点:
测试过程:
使用“平均网络”,包含所有隐含层神经元

需要调整神经元输出的权重,用来弥补训练中只有一部分被激活的现象。
这样得到的结果与在大量网络上做平均得到的结果类似。
MNIST上的结果:

本例中还用了其他技巧,比如 每个神经元的输入权重有个L2 正则化约束。
补充:


而测试中就不用了
表示原本的训练集
保持标签
不变
来训练模型不同数据类型(文本,图像,音频)有不同的变换。
常用的图像变换:
随机翻转

随即缩放和裁剪

测试中可以
随机擦除 

当使用SGD时, 不同迭代次数时输入到神经网络的数据不同,可能导致某些层输出的分布在不同迭代次数时不同。
某个或一群神经元针对 一批数据的输出分布:

由于神经网络比较深,一些层的分布可能就不那么相似了。
我们把:训练中,深度神经网络中间节点分布的变化叫做:内部协变量偏移(ICS)。
对每个标量形式的特征单独进行归一化,使其均值为0,方差为1

对于d维激活
, 做如下归一化:
![\widehat{x}_{i}=\frac{x_{i}-E[x_{i}]}{\sqrt{Var[x_{i}]}}](https://1000bd.com/contentImg/2022/08/14/140615017.gif)
保持该层的表达能力

若
且
,恢复到原来的激活值。
构建一个新的层

向前计算(下式都是逐元素操作)





如果想追踪训练准确率,可以使用滑动平均。
通常应用在非线性层之前(根据实践经验)
前一层通常是线性转换层(全连接层或卷积层)

偏置项可以忽略,因为BN的便宜项有相同的效果,因此

和 


其它归一化技巧:

超参数: 控制算法行为,且不会被算法本身所更新。
对于一个深度学习模型,超参数包括:
对于给定的数据集和任务, 需要选择合适的超参数。
一个实践指南:
第1步:观察初始损失
第2步:在一组小样本上过拟合
第3步: 找到使损失下降的学习率
第4步: 粗粒度改变学习率, 训练1-5轮
第5步: 细粒度改变学习率, 训练更长时间
使用上一步找到的最好的学习率,并训练更长时间 (10-20 轮),期间不改变学习率。
第6步: 观察损失曲线
训练损失通常用滑动平均绘制 ,否则会有很多点聚集在一起。



