News

新闻中心

Adam优化器简单理解和实现

2024-04-29 03:53:52
浏览次数:
返回列表

前言:因为要实现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(	heta):参数	heta的随机目标函数值;	heta_0:初始参数向量;

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

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

while?	heta_t?未收敛:? {

t\leftarrow t+1

g_t\leftarrow 
abla_{	heta}f_t(	heta_{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)? ?计算偏差校正的第二矩向量

	heta_t\leftarrow 	heta_{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

?

搜索

平台注册入口