zoukankan      html  css  js  c++  java
  • # ML学习小笔记—Gradien Descent

    关于本课程的相关资料http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html


    根据前面所为,当我们得到Loss方程的时候,我们希望求得最优的Loss方程。为此,我们可以采用了一种方法----Gradien Descent
    为什么可以使用这种方法呢,我们先保留这个疑问,先看一下什么是Gradien Descent。

    如下图,我们假定某个Loss方程有两个参数,同时我们假定了一个learning rate。每次update 参数与其偏微分learning rate的差

    那么这样做会有什么问题呢?如何优化这种做法呢?


    Tuning your learning rates

    如下图,当我们取的learning rate太大或者太小都会出现:梯度下降的效果达不到我们预期的目标。所以我们必须仔细考虑好learning rate

    所以我们希望可以做到以下两点:

    • At the beginning, we are far from the destination, so we use larger learning rate
    • After several epochs, we are close to the destination, so we reduce the learning rate

    Learning rate cannot be one-size-fits-all
    所以我们是否能够给不同的参数以不同的learning rate以达到我们的目的?

    为此:我们可以使用一种叫 Adagrad 的方法。
    我们最开始参数更新的方法如下图:

    其中:

    为了使得learning rate的变化达到我们理想的效果,Adagrad在每次参数update的时候将变换后的learning rate除以所有前面参数偏微分的均方根,如下图所示:

    其中:

    这样化简可以得到Adagrad后的式子:

    那么是如何想到用Adagrad这样一个方法的呢?

    • 看看课程就了解了……

    Stochastic Gradient Descent

    我们每次从样本中随机选出一个,求得其Loss方程,然后再不断进行迭代。

    这样因为部分样本跨度较大,使得迭代过程中,我们更快接近最优的Loss方程,如下图所示:


    Feature Scaling

    Feature Scaling的做法是让特征值的分布都比较接近,如下图所示:

    这样就会加速我们接近最优解:

    而我们的做法就是,求得某个特征值在所有样本下的平均值和标准差,然后update特征值:


    回到最初:

    Gradien Descent从哪里来?

    我们在Loss方程中位于某个点,为了达到最优的Loss方程,我们可以每次往前跨出一步。所以我们可以在该点附近画一个圈圈,然后选择圈圈内最优的点,然后再迭代。

    利用泰勒公式,将当前的Loss方程化简:

    此时我们为了是Loss方程最优(即最小),我们就要选取适当的值。

    由于S为常量,我们不用考虑,则只需要考虑:

    根据数学知识,我们知道两个向量相乘,值要最小,那么这两个向量应该为相反向量,即为(u,v)向量的相反向量

    同时,在满足:的条件下,我们很容易得到:

    而这个式子就是gradient descent,其中的系数n就决定了这个相反向量的长度,也就是learning rate,也就是和步长;负号则是表示(u,v)向量的相反。

    现在让我们回到泰勒公式成立的条件,当我们的半径d足够小的时候,泰勒公式的一阶展开式:

    才会足够准确。

    所以如果我们只是一阶展开,我们的步子就不能太大。如果我们的模型足够复杂,我们的步子就可以往前多迈一些。

    因此,learning rate便决定着整个推导的条件是否足够准确,当我们的learning rate太离谱的时候,我们很难得到所期望的结果

    END

    找个女孩子跨年有没有啊???

  • 相关阅读:
    cookie和session学习笔记
    Listener和Filter学习笔记
    [转载]mysql root密码忘了怎么办
    [转载]oracle连不上的各种现象
    Oauth入门学习
    XML学习笔录
    共享内存
    守护进程
    Linux系统调用与文件I/O(一)
    我的第一篇博客
  • 原文地址:https://www.cnblogs.com/Huzr/p/10067896.html
Copyright © 2011-2022 走看看