在寻找代价函数最小值时,我们通常使用梯度下降法(Gradient)来进行寻找
如:对于代价函数 J(θ0, θ1)
我们通过梯度下降的算法为:
其中 := 在数学上是赋值的意思,与计算机中的 = 等价
梯度下降的主要思想就是对于不同的 θj 都进行尝试,一小步一小步地下降,直到找到最小值
通过不断地对 θj 进行赋值,直至算法收敛,我们可以找到 θ0 和 θ1 的局部最优解(极小值)
α代表了学习速率,控制了对于 θj 的更新幅度
对于梯度下降法来说,α (值为正)与偏导数相乘,相当于一个人在下山的过程
如下图:
因为这是对于单个参数的代价函数的算法,所以偏导数变成了导数,不过不会有实质性的差别。当 θ1 处于右边时,此时的导数值为正,此时 θ1 是减去一个正值,θ1 会左移,而当 θ1 处于左侧时,此时导数值为负,此时 θ1 是减去一个负值,会向右移。因此无论 θ1 是处于何处,它都会逼近于极小值(若非单调递减)。若是为了求代价函数的最大值,仅需将式子中的 “ - ” 改成 “ + ” 即可。
在 θ1 不断逼近与最小值的过程中,如果α的值设置没有过大或者过小,那么θ的变化应该如下图(不断逼近极小值但不跨过极小值),因为约接近极小值,偏导数(此处为导数)的值就越接近0,那么每次减去的值就越少,那么变化过程应该如下图:
最终 θ1 的值会达到极小值并不再改变,因为此时(偏)导数为0,不会有新的值产生
如果 α 的值设置得过小,那么逼近的过程将会非常慢,尤其是离得越近,逼近越慢(原因如上)
如果设置的过大,那么有可能不仅无法逼近最小值,甚至会不断地远离最小值,因为过大时,可能下一次的点的偏导数比这次还大,会导致下一步的步长更长,恶性循环,如下图
注意:在对 θj (j=1,2……n)迭代赋值的过程中,在迭代赋值的过程中,参数的值不应该改变,而是应该在遍历完之后,统一改变(先存在一个临时变量中),如图: