1、梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1) 的最小值。
2、梯度下降的
思想是:开始时我们随机选择一个参数的组合( θ
0,θ
1,...,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值( local minimum) , 因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值( global minimum),选择不同的初始参数组合,可能会找到不同的
局部最小值。
3、在这里,我们只考虑θ
0,θ
1。一般把它们初始化为0。
4、想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转 360 度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。
5、梯度下降法的公式:根据这个公式不断
同步更新θ
0,θ
1的值
更新步骤模拟:
其中
α 是学习率( learning rate) , 它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,即控制我们以多大的幅度更新参数θj.在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
6、梯度下降法的直观理解:
求导的目的,基本上可以说取这个红点的切线,就是这样一条红色的直线,刚好与函数相切于这一点,让我们看看这条红色直线的斜率,就是这条刚好与函数曲线相切的这条直线,这条直线的斜率正好是这个三角形的高度除以这个水平长度,现在,这条线有一个
正斜率,也就是说它有正导数, 因此, 我得到的新的 θ1, θ1 更新后等于 θ1 减去一个正数乘以 α。更新完成之后,θ1减去一个正数,相当于θ1向左移动到红色标注的部分。
7、α太大或者太小会出现什么问题:
(1)、如果 α 太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点,所以如果 α 太小的话,可能会很慢因为它会一点点挪动,它会需要很多步才能到达全局最低点。
(2)、如果 α 太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛, 下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来
8、这就是梯度下降算法, 你可以用它来最小化任何代价函数J, 不只是线性回归中的代价函数J。