| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【论文】Adam -> 正文阅读 |
|
[人工智能]【论文】Adam |
【论文】Kingma D , Ba J . Adam: A Method for Stochastic Optimization[J]. Computer ence, 2014.(pdf) 论文首次提出了 Adam 算法——基于一阶导数的随机梯度下降算法 Adam 是对 SGD、AdaGrad 和 RMSProp 算法的优化 Adam 结合 AdaGrad 和 RMSProp 两种算法的优点,对梯度的一阶矩估计和二阶矩估计都进行综合考虑,具体算法如下
注意上述算法可以通过改变计算顺序而提高效率,将循环的最后三行替代为下面两条句 α t = α ? 1 ? β 2 t / ( 1 ? β 1 t ) θ t ← θ t ? 1 ? α t ? m t / ( v t + ? ^ ) \alpha_t=\alpha\cdot\sqrt{1-\beta_2^t}/(1-\beta_1^t) \\ \theta_t\leftarrow\theta_{t-1}-\alpha_t\cdot m_t / (\sqrt{v_t}+\hat\epsilon) αt?=α?1?β2t??/(1?β1t?)θt?←θt?1??αt??mt?/(vt??+?^) 代码实现
m t m_t mt? 和 v t v_t vt? 的偏差修正可以将 v t = β 2 ? v t ? 1 + ( 1 ? β 2 ) ? g t 2 v_t=\beta_2\cdot v_{t-1}+(1-\beta_2)\cdot g_t^2 vt?=β2??vt?1?+(1?β2?)?gt2? 改写为所有时间步上只包含梯度和衰减率的函数,即 v t = ( 1 ? β 2 ) ∑ i = 1 t β 2 t ? i ? g i 2 v_t=(1-\beta_2)\sum^t_{i=1}\beta_2^{t-i}\cdot g_i^2 vt?=(1?β2?)i=1∑t?β2t?i??gi2? 下面我们用数学归纳法简单证明一下
我们可以简单通过下面代码模拟看一下初始值的影响
一阶矩、二阶矩由前面可知,一阶矩 E ( g t ) E(g_t) E(gt?) 即当前梯度 g t g_t gt? 的期望(估计一阶矩 m t m_t mt?),由于当前梯度 g t g_t gt? 是随机采样得到的估计结果,因此更关注它在统计意义上的期望 二阶矩 E ( g t 2 ) E(g_t^2) E(gt2?) 即当前梯度的平方 g t 2 g_t^2 gt2? 的期望(估计二阶矩),考虑它的意义要分四种情况:
梯度更新Adam 更新规则的一个重要特性时其步长的谨慎选择。假设 ? = 0 \epsilon=0 ?=0,时间步 t t t 下参数空间中的有效步长是 Δ t = α ? m ^ t / v ^ t \Delta_t=\alpha\cdot\hat m_t/\sqrt{\hat v_t} Δt?=α?m^t?/v^t?? 这个有效步长有两个明确的上界:
第一种情况只有在极稀疏的情况下才会发生:即梯度除了当前时间步不为 0,其余时间步上梯度都为 0;而在不那么稀疏的情况下,有效步长会变得更小 当 ( 1 ? β 1 ) = 1 ? β 2 (1-\beta_1)=\sqrt{1-\beta_2} (1?β1?)=1?β2?? 时,我们有 ∣ m ^ t / v ^ t ∣ < 1 |\hat m_t/\hat v_t|<1 ∣m^t?/v^t?∣<1,此时我们可以确定出上确界 ∣ Δ ∣ < α |\Delta|<\alpha ∣Δ∣<α 在更通用的场景中,因为 ∣ E ( g ) / g 2 ∣ ? 1 |E(g)/\sqrt{g^2}|\leqslant1 ∣E(g)/g2?∣?1,我们有 m ^ t / v ^ t ≈ ± 1 \hat m_t/\sqrt{\hat v_t}\approx \pm1 m^t?/v^t??≈±1,于是每一个时间步的有效步长在参数空间中的量级近似受限于步长因子 α \alpha α, 即 ∣ Δ t ∣ < α ? o r ? ∣ Δ t ∣ ≈ α |\Delta_t|<\alpha\ or\ |\Delta_t| \approx\alpha ∣Δt?∣<α?or?∣Δt?∣≈α。这可以理解为在当前参数值下确定了一个置信域区间,这个置信域区间提供了一些当前梯度估计没有提供的信息。于是,通过其通常便可以提前知道正确的 α \alpha α 取值的右边界 对于多数机器学习模型来说,我们知道好的最优状态是在参数空间内的集合域上有着极高的概率,例如,我们可以在参数上有一个先验分布。 α \alpha α 确定了参数空间内有效步长的上确界,通常也就可以推断出 α \alpha α 的正确量级,而最优解也可以从 θ 0 \theta_0 θ0? 开始通过一定数量的跌倒到达这个正确的量级 我们将 m ^ t / v ^ t \hat m_t/\hat v_t m^t?/v^t? 称作信噪比(SNR),如果 SNR 值较小,那么有效步长 Δ t \Delta_t Δt? 将接近于 0,目标函数也将收敛到极值。这是十分令人满意的,因为越小的 SNR 意味着就判断 m ^ t \hat m_t m^t? 的方向是否符合真实梯度方向这点上有着越大的不确定性。例如,SNR 值在最优解附近通常会趋近于 0,这同时也导致了在参数空间中使用更小的有效步长,这类似于一种自动退火的机制 对于不同的梯度范围来说,有效步长 Δ t \Delta_t Δt? 是不变的,如果将梯度 g g g 乘以一个系数 c c c 进行缩放,那么 m ^ t \hat m_t m^t? 也要乘以一个一样的系数因子 c c c,而 v ^ t \hat v_t v^t? 则乘以系数 c 2 c^2 c2,而最终的结果并不产生变化 ( c ? m ^ t ) / ( c 2 ? v ^ t ) = m ^ t / v ^ t (c\cdot\hat m_t)/(\sqrt{c^2\cdot\hat v_t})=\hat m_t/\sqrt{\hat v_t} (c?m^t?)/(c2?v^t??)=m^t?/v^t?? Adam 算法的优点
AdaMax前面我们有 v t = ( 1 ? β 2 ) ∑ i = 1 t β 2 t ? i ? g i 2 v_t=(1-\beta_2)\sum^t_{i=1}\beta_2^{t-i}\cdot g_i^2 vt?=(1?β2?)i=1∑t?β2t?i??gi2?,这可以看成一个关于 g i g_i gi? 的 L 2 L^2 L2 范数,换句话说,权重 θ t \theta_t θt? 的各维度上的增量是根据该维度上当前和过往梯度的 L 2 L^2 L2 范数。我们可以从 L 2 L^2 L2 范式的更新规则推广到 L p L^p Lp 范数的更新规则,但是 p p p 值越大,推广算法在数值上将变得不稳定。在特例中,作者让 p → ∞ p\rightarrow\infty p→∞ 可以的得到一个极其稳定且简单的算法 在 L p L^p Lp 范数的情况下, v t = ( 1 ? β 2 p ) ∑ i = 1 t β 2 p ( t ? i ) ? ∣ g i ∣ p v_t=(1-\beta_2^p)\sum^t_{i=1}\beta_2^{p(t-i)}\cdot| g_i|^p vt?=(1?β2p?)i=1∑t?β2p(t?i)??∣gi?∣p
在算法 2 里面我们不需要对初始化偏差作出修正。同时,参数更新的范围也有一个更加简洁的界限: ∣ Δ t ∣ ? α |\Delta_t|\leqslant\alpha ∣Δt?∣?α |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 16:23:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |