不同参数选取对网络影响比较大,在网络结构已经固定的情况下。
神经网络优化的过程,就好比 培养一个孩子。
它们都有学习的潜力,但是不同的引导方法,会让孩子向不同方向发展,达到不同的高度。
优化器 就是 引导神经网络更新参数的工具。
五种常用的神经网络优化器
相关概念
待优化参数 w
损失函数loss
学习率 lr
batch 将多少个数据打包
当前batch的迭代次数
更新过程分为4步:
第一步:
计算t时刻,损失函数关于当前参数的梯度
就是loss函数,对每一个参数进行求偏导数。
第二步:
计算t时刻,一阶动量mt
和二阶动量 Vt
一阶动量: 与梯度相关的函数。
二阶动量:与梯度平方相关的函数。
不同的优化器,实质上,就是 不同的 一阶动量 和 二阶动量的组合。
第三步:
计算 一塔
即 学习率 x 一阶动量/ 根号下的二阶动量
第四步:
计算t+1时刻的参数
当前参数— 一塔
最常用的优化器
SGD 随机梯度下降
一阶动量 定义为梯度
二阶动量 恒等于1
单层网络就两行
SGDM
在SGD的基础上增加了一阶动量
一阶动量: 多了一个Mt-1的参数
代表上一个时刻的一阶动量
这里的贝塔尔是超参数,往往设置为0.9
上一阶段的一阶动量占大头。
二阶动量:仍然恒等于一。
一阶动量 很大程度上 由 上一时刻的一阶动量所决定。
Adagrad
在SGD基础上 增加二阶动量
一阶动量: 当前时刻的梯度
二阶动量:梯度平方的累计和
零时刻的 w 和 b的二阶动量 初始值都为0.
当前的二阶动量 v_w,v_b 等于 当前梯度评分的累计和
RMSProp
二阶动量:使用指数滑动平均数来进行计算。
表示 过去一段时间的平均值。
代码更新部分:
Adam
同时引入 SGDM的一阶动量 和 RMSProp的二阶动量
并且 增加了 两个 修正项
把修正后的一阶动量 和 二阶动量 带入 参数更新公式,实现参数自更新。
代码部分: