<p>RMSúPROP和ADAM都有自适应学习率。</p>
<p><strong>基本RMS属性</strong></p>
<pre><code>cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
</code></pre>
<p>您可以看到,它最初有两个参数<strong>衰减率和每股收益</strong></p>
<p>然后我们可以增加一个动量,使梯度更稳定,然后我们可以写</p>
<pre><code>cache = decay_rate * cache + (1 - decay_rate) * dx**2
**m = beta1*m + (1-beta1)*dx** [beta1 =momentum parameter in the doc ]
x += - learning_rate * dx / (np.sqrt(cache) + eps)
</code></pre>
<p>现在你可以看到,如果我们保持beta1=o,那么它是没有动量的rms_prop。</p>
<p><strong>然后是ADAM的基础知识</strong></p>
<p>在<a href="http://cs231n.github.io/neural-networks-3/" rel="nofollow noreferrer">cs-231 Andrej Karpathy</a>中,亚当最初是这样描述的</p>
<blockquote>
<p>Adam is a recently proposed update that looks a bit like RMSProp with
momentum</p>
</blockquote>
<p><strong>是的!那么,这与带有动量的rms_道具有什么区别呢?</strong></p>
<pre><code>m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
**x += - learning_rate * m / (np.sqrt(v) + eps)**
</code></pre>
<p>他在更新方程中再次提到,m,v更光滑。</p>
<p>因此,与rms_prop的不同之处在于更新的噪音更小。</p>
<p>什么声音?</p>
<p>在初始化过程中,我们将m和v初始化为零。</p>
<p><strong>m=v=0</strong></p>
<p>为了减少这种初始化效果,总是要进行一些预热。所以等式是</p>
<pre><code>m = beta1*m + (1-beta1)*dx beta1 -o.9 beta2-0.999
**mt = m / (1-beta1**t)**
v = beta2*v + (1-beta2)*(dx**2)
**vt = v / (1-beta2**t)**
x += - learning_rate * mt / (np.sqrt(vt) + eps)
</code></pre>
<p>现在我们运行这个程序几次迭代。很明显注意粗体的线条,你可以看到当t增加(迭代次数)时,mt发生的事情</p>
<p><strong>mt=m</strong></p>