引用马同学高等数学中的:《如何直观形象的理解梯度?》
文章链接:http://www.matongxue.com/madocs/222.html#/madoc
我们先来玩一个游戏,假如你在一座山上,蒙着眼睛,但是你必须到达山谷中最低点的湖泊,你该怎么办?
梯度:是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数。
所有的切线都在一个平面上,就好像光滑的笔直玻璃上,某一点一定有且只有一个(梯度为0的情况除外,可以自己想想为什么?)最陡峭的地方(因为方向导数是切线的斜率,方向导数最大也就意味着最陡峭)。
为什么要选最大的方向导数呢?
因为从引用文里的动态图可以看出,不是最大方向导数的正(反)方向上对应的曲线是不过最低点的(绕了弯路),如果沿着非最大方向导数的方向下降的话就会增添时间的损耗并且可能出现错误结果。
对于最开头的游戏,我们只需要通过手感受附近梯度最大的方向,一直沿着梯度相反的方向相就可以到达谷底(原理和弹珠从高处滚落最后会滚进最低处一样):
为什么反方向呢?看图
可以看到红色箭头表示的是最大的方向导数(梯度即最大的方向导数的值),沿着方向导数的方向对x,y增加的话可以明显看出会达到最大值,沿着反方向对x,y进行减少的话就会达到最小值。
正如下图的公式:
通过减少梯度的值,某点每个维度对应的值往梯度相反的方向进发,从而得到最小值。(这个使用梯度来降低x,y的值从而逼近函数J的极小值的方法叫做梯度下降法),如果学习率太大的话,就有可能跨过最小值跳到反方向上某一个点,这个点对应的值可能大于梯度下降前的值,也可能小于梯度下降前的值。
批量梯度下降BGD(Batch Gradient Descent):每次迭代使用所有样本,实例:Andrew Ng在coursera上的Machine Learning课讲述的Linear Regression,使用的就是批量梯度下降。当数据较大时使用BGD会使训练速度过慢。
随机梯度下降SGD(Stochastic Gradient Descent):每次迭代使用一个样本或样本组,实例:李航博士的《统计学习方法》中的感知机使用的就是随机梯度下降。由于单个样本的训练可能会带来很多噪声,使得SGD并不是每次迭代都向着整体最优化方向,因此在刚开始训练时可能收敛得很快,但是训练一段时间后就会变得很慢。
小批量梯度下降MBGD(Mini-Batch Gradient Descent):每次迭代使用m组样本。是BGD与SGD的折中方法。
梯度下降总结:个人理解梯度下降法其实就是使用最大的方向导数的值然后沿着方向导数的反方向对某点的各个维度的值进行增加/减少使函数值逼近函数的极小/极大值。重点在与得到方向导数的方向而不是方向导数的值,以及学习率不能过高也不能过低。
正规方程:
下面是以线性回归方程为例子的正规方程推导:
(X*X的转置)的逆矩阵不一定存在,这种情况是极少存在的。如果不可逆,一般要考虑一下两者情况:
(1) 移除冗余特征,一些特征存在线性依赖。
(2) 特征太多时,要删除一些特征。例如(m < n),对于小样本数据使用正则化。
正规方程总结:如果矩阵很大计算一个矩阵的逆是相当耗费时间的, 而且求逆也会存在数值不稳定的情况 (比如对希尔伯特矩阵求逆就几乎是不可能的). 因而这样的计算方法有时不值得提倡。
梯度下降法与正规方程对比: