李宏毅机器学习1 | 梯度下降算法(Gradient Descent)

大家好,鸽子王时隔一年又回来了,最近开始跟着导师系统的学习机器学习,自学阶段用的是李宏毅老师的机器学习网课。李老师!人幽默!讲的又好!(此处省略1000字旋转无敌夸夸夸)
因为怕自己边学边忘什么都没有留下,准备开一个专题记录学习的内容。(希望我能坚持下来)

前面是一些我相信我肯定不会忘记的东西(正则化,bias等等也有可能会补坑),于是我们从梯度下降开始(gradient descent)
1、三种梯度下降

  • 经典的梯度下降
    普通的梯度下降没有什么话好说,主要就是依照下面的公式进行状态转移,比较有讲究的地方在于learning rate的调整,调整lr的大小可以使损失函数(这个概念非常重要)的求解的快慢或者准确度有着非常明显的变化。李宏毅机器学习1 | 梯度下降算法(Gradient Descent) 一个课上提到的比较好的方法是,将损失函数的变化进行可视化,或者关注不同步长的learning rate 的变化对损失函数的变化造成的影响。

  • Adagrad
    adagrad是利用在学习的过程中自动调整学习率learning rate。对于相对较小的参数使用较大的学习率,相对较大的参数(变化率大,分母大,分数小)使用较小的学习率。
    李宏毅机器学习1 | 梯度下降算法(Gradient Descent)
    但我们可以清晰的看到,随着数值数量的增大adagrad下的学习率越来越小,也就意味着步长越来越小,总耗时也会变长。

  • Stochastic Gradient Descent (SGD) 随机梯度下降
    经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据。当参数很多的时候,就需要耗费巨大的计算资源和计算时间,这在实际过程中基本不可行。
    这个比较巧秒的地方在于,它采用单个训练样本的损失来近似平均损失。比如我们有一个n维的参数空间,在常规的梯度下降算法中,我们需要计算这n个参数的偏导,利用梯度下降进行状态转移。而SGD不同的是,他会利用n维参数里的任意一个参数进行梯度下降,也就是说在我们普通的梯度下降还在算偏导的时候,SGD已经开始进行状态转移了,很好的节省了计算时间。

下一篇会写Feature Scaling,拜拜~