1)简介
梯度下降算法 - 一种能自动找到代价函数J最小值的算法。
梯度下降法不仅用于线性回归,还用于机器学习的众多领域。在后面将学习到用梯度下降法去优化除线性回归的代价函数J和最小化任意函数J。
这一节讲的是针对任意代价函数J来讨论梯度下降。
2)问题描述
下面我们使用梯度下降算法来最小化一个任意函数J:对于这个任意函数J,我们需要找到一组参数值来最小化它。
先初始化参数值,通常是把参数初始化为0,再一点一点改变参数的值,来最小化该函数J:
对于下图的代价函数,每次执行一次梯度下降算法时,先将参数初始化一个值,就对应于代价函数J的一个点,再一步步收敛到该局部的最优解,得到一个局部最优解。下面两张图是执行了两次算法,得到了两个局部最优解。
初始点有差异就可能得到不同的局部最优解。
3)梯度算法的定义
- 对梯度下降定义的分析:
赋值符号 :=
判断符号 =
阿尔法表示学习率,用来控制梯度下降时,我们迈出多大的步子。阿尔法大,那么步子就大。
重复同步更新代价函数的参数,直到收敛。
同步更新能更自然的实现算法,说道梯度下降基本上也说的是同步更新。
3)深入了解梯度下降
- 阿尔法及导数项的意义
阿尔法是学习效率,决定了更新参数的速度。
要理解怎么使用梯度下降,及他的意义,我们先将参数简化成一个参数,考虑这时的代价函数及优化的目标函数,研究梯度下降在该代价函数J上起了什么作用。
下面考虑导数项为正或者负的情况:
该倒数项指的是代价函数J在该点的斜率,可正可负。阿尔法是一个正数。该梯度下降法可以使得参数一直在向最小值点靠近。
- 梯度下降的同步更新规则
下面考虑阿尔法过大或者过小的情况:
当阿尔法过小的时候,下降速度很慢;
当阿尔法过大的时候,可能导致越过最低点,而一直无法收敛或者发散。
如果将参数初始化在局部最优解处,那么下一步梯度下降会发生什么?
可以看到,这种情况,梯度下降不会改变参数的值,会维持局部最优解,这也是我们想要的。所以这也解释了即使阿尔法不变,梯度下降也能收敛到局部最优解处。
初始化参数得到对应的代价函数的一个点,运行梯度下降算法,不断同步更新所有的参数,随着越来越靠近局部最优解处,斜率即导数的越来越小,下降的幅度也越来越小(阿尔法维持不变),也就是说,可以不改变阿尔法的值,也会自动的在越靠近局部最优解处减小下降的幅度,慢慢的接近局部最优解。
由此,我们可以使用梯度下降算法来最小化任意代价函数J,不只是线性回归中的代价函数J。