优化算法(梯度下降,Adam)

        在深度学习中,优化目标(object function)就是损失函数,希望找到损失最小时对应的参数。

        上面提到要让损失最小,这个“最小”有2种,一种是全局最小,一种是局部最小。一般我们使用迭代算法求解,所以一般只能保证找到局部最小。但有特例,比如:凸函数(和一个碗一样),凸优化问题中,局部最小一定是全局最小。但是凸优化问题很少,凸:线性回归,softmax回归,凸函数模型的拟合能力有限;非凸:MLP,CNN,RNN,attention。

        下面讲一下各种优化算法。

        梯度下降(最简单的迭代求解算法),下图中的x是学习的参数,f是损失,梯度下降的不足:更新参数的时候需要计算损失,计算损失需要样本,梯度下降用到的是所有样本,这样求导很贵!因此有了SGD随机梯度下降。学习率后面乘的是所有样本梯度的均值。

随机梯度下降
梯度下降

        随机梯度下降,每次计算损失只用到一个样本,求梯度只需要用到一个样本。学习率后面乘的是单个样本的梯度。

        真正用到的是小批量随机梯度下降,因为随机梯度下降每次只用到一个样本,对硬件资源利用不充分(硬件是可以并行的)。每次更新参数的时候,随机采样一个样本子集,假设这个批量大小为b,学习率后面乘的是b个样本的梯度均值。

        权重参数更新的时候,经常见到冲量法:冲量法使用平滑过的梯度对权重更新。维护一个冲量(维护一个惯性,看v_t表达式)。冲量法好处:梯度下降不会抖动的很厉害。

冲量法更新梯度

        还有一类经常使用的算法:Adam。小批量梯度下降+冲量法效果很好,可以不用Adam。为什么使用Adam?对学习率不敏感,很平滑,不想调参可以用。

        Adam算法的v_t:对梯度g_t平滑。见下图,看v_t的展开式,相当于给过去的梯度做了一个加权和,所有权的总和为1。t比较大的时候,1-\beta_{1}^{t}趋近于1,但t比较小的时候,1-\beta_{1}^{t}趋于0,所以t小的时候有一个修正。

         Adam算法的s_t:对g_{t}^{2}平滑。见下图,g_t是向量,g_{t}^{2}是对每个元素平方。

        利用\hat{s_t}, \hat{v_t}更新参数:g_t'的分子让梯度平滑,分母类似于归一化,让g_t'的值处于一定范围。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值