深度学习课程笔记(四)Gradient Descent 梯度下降算法

论坛 期权论坛     
选择匿名的用户   2021-5-23 01:20   44   0
<div class="blogpost-body" id="cnblogs_post_body">
<p style="text-align:center;"><strong><span style="font-size:14pt;">深度学习课程笔记(四)Gradient Descent 梯度下降算法</span></strong></p>
<p style="text-align:center;"><strong><span style="font-size:14pt;">2017.10.06</span></strong></p>
<p style="text-align:left;"><span style="font-size:14pt;"><span style="font-size:16px;">材料来自:<strong>http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html   </strong></span></span></p>
<p style="text-align:left;"><span style="font-size:14pt;"><span style="font-size:16px;">我们知道在神经网络中,我们需要求解的是一个最小化的问题,即:最小化 loss function。</span></span></p>
<p style="text-align:left;"><span style="font-size:14pt;"><span style="font-size:16px;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-d459cc19ceb333e09b5c90640a415281.png"></span></span></p>
<p style="text-align:left;">假设我们给定一组初始的参数 $\theta$,那么我们可以算出在当前参数下,这个loss是多少,即表示了这个参数到底有多不好。</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9df504544a8316e0ff962242fcb37149.png"></p>
<p style="text-align:left;">然后我们利用上述式子来调整参数,其中梯度可以用▽的形式来表示。我们可以将这个过程可视化出来看看:</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-bd990a1026a03ef08f78ced71ab1c82f.png"></p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-d085f21525dc22c109331358919f0b99.png"></p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-218bfb4f5c88312737ef417f63a76ed2.png"></p>
<p style="text-align:left;">这样子,就算出了每一步当前参数的梯度方向(红色),以及蓝色的调整的方向。这就是梯度下降方法了。</p>
<p style="text-align:left;">紧接着,李老师讲解了一些梯度下降方法的tips: </p>
<p style="text-align:left;">1. 调整你的 学习率(learning rate):</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-5dd51054dfc5a2d915f72d9358027997.png"></p>
<p style="text-align:left;">2. 自适应调整的学习率:</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-08da1cab36c74dbfd8c864fbd7fd5e2a.png"></p>
<p style="text-align:left;">我们可以看到,学习率调整的大原则就是:初始的LR 可以调的很大,因为这个时候我们离局部最小值比较远,当时随着学习的进行,我们需要降低学习率,走的步伐要稍微低一点,因为这个时候我们离目的地已经很近了,我们要微调就行了。否则,就可能错过了最好的点。</p>
<p style="text-align:left;">我们可以将学习率设置为随着迭代次数变化的变量,这样子就可以自适应的调整 LR了。但是,更好的方式,应该是对于不同的参数,都用不同的学习率来进行优化。其中,这类方法中,最直观最简单的,可能就是 Adagrad了。</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3bcbfbcf1a90ffcc65e2653bfd8b8c79.png"></p>
<p style="text-align:left;">这里,李老师给了例子来说明,随着学习的进行,权重的更新是如何自适应变化的。</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-2a2c92cb8baed6c059343f75505b48c4.png"></p>
<p style="text-align:left;">所以,我们将上述式子进一步的化简,可以得到 Adagrad 的参数更新的方程:</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-af3cfd3cb5e65dac3b49e0c1a89a3e27.png"></p>
<p style="text-align:left;">上面就是 Adagrad 方法的全部了,后面李老师对这个更新的方法进行了分析,发现了有如下的看似“不妥当”的东西:当梯度较大的时候,学习的幅度较大,这个没有关系,算是正常;但是,在Adagrad 中,较大的梯度,会导致较大的学习步长,这也没有问题,但是他前面分母当中,较大的梯度,反而使得步长变小了。。。。这又该怎么解释呢?</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-2937db5d4f55e6682e2ba9a295df6779.png"></p>
<p style="text-align:left;">有一种直观的解释是,这里的 Adagrad 描绘了梯度变化中,反差的情况:</p>
<p style="text-align:left;"><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-38bd3b2039ab8a94bb3819fa82c4c8ee.png"></p>
<p style="text-align:lef
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP