梯度下降法 Gradient Descent
梯度说白了就是一个函数的导数(斜率)。梯度表示的是一个函数的走向,如果梯度是正数,说明函数是上升趋势,反之,函数成下降趋势。这也是我们利用梯度来求得局部最小值(最大值)的依据。
- 局部最小值
以某一个初始点开始,获得一个局部最小值其实有无数条路线,但是沿着梯度相反的方向是最快的路线。因为梯度的方向是因变量变化最快的方向。 - 局部最小值
以某一个初始点开始,沿着梯度相同的方向是最快的路线。
举一个🌰,在下图中:
Screen Shot 2019-03-03 at 12.57.22 PM.png
在图中,目标曲线是f(x) = 0.01x ^ 2 + 50
,一个一元二次函数,开口向上,具有最小值。以便我们求解它的最小值就是求它的倒数f'(x) = 0.02x
,x等于零的时候取最小值。但是,如果我们要让计算机利用梯度下降的原理来求解呢。步骤应该是: - 选取一个初始点,例如
(100, 150)
. - 计算
(100, 150)
处的梯度,为2。梯度为整数,说明函数在上升。为了获得最小值应该往梯度相反的方向寻找。所以我们令新的x值为:
x_new = x - step_width * d(x) // d(x)为x在该点处的梯度。
注意:这里的减号就是梯度下降法的标志。表明了x的变化是沿着梯度相反的方向进行的。如果是找寻局部最大值(梯度上升),则应该是加号,沿着梯度的方向变化。此处的step
可以根据需要选取。
- 根据第2步,x沿着梯度相反方向变化(趋近于x=0的方向)。因为
step
是一个定值,这也意味着通常情况下,我们都没有办法精准地停留在最优解上面(要么跨过去,要么没到达)。我们需要设置一个可容忍的误差值loss
。当误差值是可接受的时候,我们就认为我们找到了局部最小值。这里的答案很大程度上取决于step
的选取·
-
step
太大:可能永远都到不了可接受的误差范围内。因为你永远走不进[x_target - offset, x_target + offset]。 -
step
太小:很大概率能找得到局部最优解。但是代价就是你需要很多次的迭代。就像你走路去车站肯定比跑步去车站来得慢。
线性回归 Linear Regression
在Wikipedia上面,线性回归是利用称为线性回归方程的最小平方函數对一个或多个自变量和因变量之间关系进行建模的一种回归分析。
我们想做的是利用线性回归方程去拟合已经获取的观察值。其中一种方法就是梯度下降法。只是梯度下降利用的函数并不是原函数,而是新定义的损失函数Loss function
。最常见的损失函数就是Square Loss Function
:
Loss(x) = (prediction_x - observed_x)^2
目标是使得损失函数的值最小,也就是想求得局部最小值。所以我们可以先随意地设定一个参数w1, w2,...
。然后问题就是:如何去调节参数,使得参数能最大程度上模拟出观察值?
我们使用小批量随机梯度下降(mini-batch stochastic gradient descent)。在深度学习中被广泛使用。它的算法很简单:先选取一组模型参数的初始值,如随机选取;接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch) ,然后求小批量中数据样本的平均损失有关模型参数的导数(梯度),最后用此结果与预先设定的一个正数的乘积作为模型参数在本次迭代的减小量
在训练的过程中,模型的每个参数将作如下迭代:

在上式中,
网友评论