7.1更好的优化-笔记

归一化重要性

在这里插入图片描述
上图左图是没有中心化的,右图是中心化的。我们也可以用一条直线进行分类,但如果这条直线稍微旋转一点,我们分类器会被完全破坏,我们的损失函数对权重矩阵中的线性分类器小扰动十分敏感。右图将数据中心化,还可以减少他们的方差,在这种情况下,损失函数会不那么敏感,可以节省优化时间。

batch normalization

这就是在神经网络中多加一层,以使中间的**值的均值为0方差为1
在这里插入图片描述

SGD优化过程中的问题

在这里插入图片描述
中间梯度为0,会被卡住。在一维的问题上,局部最小值看起来是个大问题,鞍点不是大问题,但是设计到高维度恰恰相反,设想一个一亿个参数的空间,鞍点某些方向损失会增加,某些方向损失会减少。如果一亿个维度基本到处都会发生,然而在局部最小值任一方向前进损失都会变大。
接近鞍点处,梯度较小,变化较小也会卡住

解决方法

在这里插入图片描述
在右侧加入了非常非常小的方差,称为带动量的SGD,它的思想就是保持一个不随时间变化的速度,并且我们将梯度估计添加到这个速度上,在这个速度上步进,而不是在梯度上步进。我们也有和摩擦有关的,叫做参数 ρ \rho ,在这里我们用每一步的速度,然后用摩擦系数对其取值,有时候摩擦系数比较大,然后衰减之后加到梯度,我们在速度方向上步进,而不是在原始梯度上步进
在这里插入图片描述
解决所有问题
在这里插入图片描述
在这里插入图片描述在这种优化方式中,需要保持在一个训练过程中,每一步的梯度的平方和,与速度向不同我们现在有一个梯度平方项,在训练时我们会一直累加,当前梯度的平方到这个梯度平方项
在这里插入图片描述

学习率选择

我们可以在整个过程中不使用一个学习率
在这里插入图片描述
有时人们会把学习率沿时间衰减。像是结合了上图不同曲线的效果
在这里插入图片描述
在这里插入图片描述
尝试设置学习率的方法是,先不衰减看看会发生什么,然后看看损失率,看看你希望从那个地方开始衰减
在这里插入图片描述
在这里插入图片描述