梯度下降法

在寻找代价函数最小值时,我们通常使用梯度下降法(Gradient)来进行寻找

如:对于代价函数 J(θ0, θ1)

我们通过梯度下降的算法为:


j = 0 或 1

其中 := 在数学上是赋值的意思,与计算机中的 = 等价

梯度下降的主要思想就是对于不同的 θj 都进行尝试,一小步一小步地下降,直到找到最小值

通过不断地对 θj 进行赋值,直至算法收敛,我们可以找到 θ0 和 θ1 的局部最优解(极小值)

α代表了学习速率,控制了对于 θj 的更新幅度


对于梯度下降法来说,α (值为正)与偏导数相乘,相当于一个人在下山的过程

如下图:

这里的代价函数只包含一个参数 θ

因为这是对于单个参数的代价函数的算法,所以偏导数变成了导数,不过不会有实质性的差别。当 θ1 处于右边时,此时的导数值为正,此时 θ1 是减去一个正值,θ1 会左移,而当 θ1 处于左侧时,此时导数值为负,此时 θ1 是减去一个负值,会向右移。因此无论 θ1 是处于何处,它都会逼近于极小值(若非单调递减)。若是为了求代价函数的最大值,仅需将式子中的 “ - ” 改成 “ + ” 即可。


在 θ1 不断逼近与最小值的过程中,如果α的值设置没有过大或者过小,那么θ的变化应该如下图(不断逼近极小值但不跨过极小值),因为约接近极小值,偏导数(此处为导数)的值就越接近0,那么每次减去的值就越少,那么变化过程应该如下图:

合理的 α

最终 θ1 的值会达到极小值并不再改变,因为此时(偏)导数为0,不会有新的值产生


如果 α 的值设置得过小,那么逼近的过程将会非常慢,尤其是离得越近,逼近越慢(原因如上)


过小的 α

如果设置的过大,那么有可能不仅无法逼近最小值,甚至会不断地远离最小值,因为过大时,可能下一次的点的偏导数比这次还大,会导致下一步的步长更长,恶性循环,如下图

过大的 α

注意:在对 θj (j=1,2……n)迭代赋值的过程中,在迭代赋值的过程中,参数的值不应该改变,而是应该在遍历完之后,统一改变(先存在一个临时变量中),如图:

右边的错在θ0被更新后立即参与了本轮的赋值
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容