Adam优化算法简介

2019-04-07  本文已影响0人  Jaydu

背景介绍

在机器学习中,对每一个数据点(\mathbf{x}_k,y_k),我们通过最小化经验风险\mathcal{l}(\theta;\mathbf{x}_k,y_k)来从数据中学习,其中\theta\in \mathbb{R}^d是模型的参数。对整个训练集\{(\mathbf{x}_k, y_k),\ k=1,2,\cdots,K\},目标函数即为
\mathcal{L}(\theta)=\dfrac{1}{K} \sum\limits_{k=1}^K \mathcal{l}(\theta;\mathbf{x}_k,y_k)
对应的梯度为
\nabla \mathcal{L}(\theta)=\dfrac{1}{K} \sum\limits_{k=1}^K \nabla \mathcal{l}(\theta;\mathbf{x}_k,y_k)
然而,当K很大的时候,计算K个经验风险函数的梯度将会变得特别低效。因此,一般的我们会采用批次训练方法,每次独立均匀采样\mathcal{B}\subset\{1,\cdots,K\}|\mathcal{B}|\ll M),并且计算近似随机梯度
g(\theta)=\dfrac{1}{|\mathcal{B}|}\sum\limits_{k\in\mathcal{B}}\nabla \mathcal{l}(\theta,\mathbf{x}_k,y_k)
我们有\mathbb{E}[g(\theta)]=\nabla\mathcal{L}(\theta)

Adam(Adaptive Moment Estimation)算法

Adam算法

初始化m_0=v_0=\mathbf{0}_{|\mathcal{B}|\times 1}。对t\geq1,梯度、梯度平方的指数移动平均\tilde{m}_t\tilde{v}_t\in \mathbb{R}^{|\mathcal{B}|},以及它们的偏差修正m_tv_t\in \mathbb{R}^{|\mathcal{B}|}由以下递推式给出:
\begin{align*} \tilde{m}_t&=\beta_1 \tilde{m}_{t-1}+(1-\beta)g_t\\ m_t&=\dfrac{\tilde{m}_t}{1-\beta_1^{t+1}}\\ \tilde{v}_t&=\beta_1 \tilde{v}_{t-1}+(1-\beta)g_t\odot g_t\\ v_t&=\dfrac{\tilde{v}_t}{1-\beta_2^{t+1}}\\ \end{align*}
其中\odot代表逐元素乘积,下标t代表第t轮迭代,\beta_1,\beta\in[0,1)(如无特殊说明,本文涉及的向量运算均为逐元素运算)。模型参数\theta_t按以下公式进行更新:
\theta_t=\theta_{t-1}-\alpha \dfrac{m_t}{\sqrt{v_t}+\epsilon}
其中\alpha为步长,\epsilon>0是用来保证分母大于0。

Adam算法的优势:

Adam更新规则

我们先忽略\epsilon,假设\epsilon=0。在时间t,有效步长是\triangle_t = \alpha \dfrac{m_t}{\sqrt{v_t}},其有两个上界:当1-\beta_1>\sqrt{1-\beta_2}时,|\triangle_t|\leq \alpha\dfrac{1-\beta_1}{\sqrt{1-\beta_2}};否则|\triangle_t|\leq\alpha。前者对应梯度稀疏的情况。\triangle_t是不受梯度量级影响的。当更新方向\dfrac{m_t}{\sqrt{v_t}}的模长变小时,有效步长\triangle_t也变小。

假设m_t的每一个元素|m_{t,i}|>0i=1,2,\cdots,|\mathcal{B}|),我们可以重写更新方向:
\dfrac{m_t}{\sqrt{v_t}}= \dfrac{\text{sign}(m_t)}{\sqrt{\frac{v_t}{m_t^2}}}=\sqrt{\dfrac{1}{1+\frac{v_t-m_t^2}{m_t^2}}}\odot \text{sign}(m_t)
其中\dfrac{v_t-m_t^2}{m_t^2}\approx \dfrac{\sigma_t^2}{\nabla\mathcal{L}_t^2}是相对方差的估计。

上一篇下一篇

猜你喜欢

热点阅读