Adam优化器简单理解和实现

前言:因为要实现GAN,简单理解一下训练过程需要用到的Adam优化器。

零、何为优化器

机器学习的任务就是优化参数使之达到最合适的值,同时也就是时损失函数达到最小。损失函数即目标函数的值与真实值的差值函数,实际上就是欲优化参数的函数。而优化器的任务就是在每一个epoch中计算损失函数的梯度,进而更新参数。

一般过程:给定一组训练样本(x, y),对于若干个x运用此时的参数求出预测值y',而y'与这些x对应的真实值y的差值(即损失函数)作为优化器的目标函数(使得函数值越小越好)。将该目标函数求梯度(有的优化器还要求动量),而后使用梯度值(动量)更新参数。直到停止条件达到为止。

 

一、简单认识Adam

Adam(自适应矩估计 Adaptive moment estimation

翻译:

参数设定:{g_t}^2=g_t\odot g_t (元素乘操作),\alpha=0.001; \beta_1=0.9; \beta_2=0.999; \epsilon=10^{-8}

\alpha:步长或称学习率(stepsize);\beta_1, \beta_2 \in [0,1):矩估计的指数衰减率;f(\theta):参数\theta的随机目标函数值;\theta_0:初始参数向量;

m_0\leftarrow 0:初始第一矩向量;v_0\leftarrow 0:第二矩向量;t\leftarrow 0:时间步长;

优化过程(更新参数向量过程):

while \theta_t 未收敛:  {

t\leftarrow t+1

g_t\leftarrow \nabla_{\theta}f_t(\theta_{t-1})  获得新一轮的梯度值(参数是上轮刚更新的)

m_t\leftarrow \beta_1\cdot m_{t-1}+(1-\beta_1)\cdot g_t  更新第一矩向量

v_t\leftarrow \beta_2\cdot v_{t-1}+(1-\beta_2) \cdot g_t^2   更新第二矩向量

\widehat{m_t}\leftarrow m_t/(1-\beta_1^t)   计算偏差校正的第一矩向量

\widehat{v_t}\leftarrow v_t/(1-\beta_2^t)   计算偏差校正的第二矩向量

\theta_t\leftarrow \theta_{t-1}-\alpha\cdot \widehat{m_t}/(\sqrt{\widehat{v_t}}+\epsilon)   更新参数

}

优化参数过程结束

 

二、代码实现

https://github.com/dream-catcher/learning_blogs/blob/master/Adam_Optimizer/adam_optimizer.py  #不知为何,我这边运行会报错,所以我先不用这个

https://github.com/yzy1996/Python-Code/blob/master/Algorithm/Optimization-Algorithm/Adam.py  

https://github.com/sagarvegad/Adam-optimizer/blob/master/Adam.py

 

参考链接:https://www.jianshu.com/p/aebcaf8af76e

https://www.cnblogs.com/xiaoniu-666/p/10596089.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值