梯度下降详解


2.Gradient Descent

2.1 Review

Θ ∗ = a r g m a x L ( Θ ) L : 损 失 函 数 Θ : 参 数 \Theta^*=argmax\quad L(\Theta)\quad \quad L:损失函数\quad \Theta:参数 Θ=argmaxL(Θ)L:Θ:

梯度下降的整个过程可以表示为:

  1. 随机选取一个初始的参数值 Θ 0 \Theta_0 Θ0
  2. 计算损失函数在参数为 Θ 0 \Theta_0 Θ0时的值的梯度;
  3. 计算 Θ 1 = Θ 0 − η ∇ C ( Θ 0 ) \Theta_1=\Theta_0-\eta\nabla C(\Theta_0) Θ1=Θ0ηC(Θ0);(其中 η \eta η为learning rates)
  4. 循环2-3步,直至求到最佳解;

2.2 设置学习速率learning rates

选择合适的learning rates,当 η \eta η的值较大时,损失函数的值可能会变化地特别大,使得无法找到正确解。而当 η \eta η选择较小时,可能模型需要较长的时间才可得到最终的最小损失函数的值。所以 η \eta η的选择计算较为困难,期望有一种方法可以自调整计算Learning rates的值

  • 最流行和简单的方法:根据每一次的某些参数的变化来减少 η \eta η的值,在一开始进行计算时,往往离计算的结果的位置较远,所以一开始选择较大的 η \eta η值。但在几次迭代计算后,离最优结果的位置越来越近,所以需减小单次的learning rates;例如,learning rates的decay可能设置为:
    η t = η / t + 1 \eta^t=\eta/\sqrt{t+1} ηt=η/t+1

2.2.1 自适应的梯度下降(Adaptive Gradient Descent)

​ 但上面的策略,并不是最好的结果。一般来说,应该对于不同的参数都给出不同的learning rates。所以这里 常常使用的是自适应的梯度下降,例如w为某个参数,定义:
g t = δ C ( Θ t ) δ w g^t=\frac{\delta C(\Theta^t)}{\delta w} gt=δwδC(Θt)
​ 对于每一个参数,单次迭代可以得到:
w t + 1 ← w t − η t g t w^{t+1}←w^t-\eta^tg^t wt+1wtηtgt
​ 在自适应梯度下降中,迭代式子变为:
w t + 1 ← w t − η t σ t g t w^{t+1}←w^t-\frac{\eta^t}{\sigma^t}g^t wt+1wtσtηtgt
​ 这里的 σ t \sigma^t σt是参数w的过去所有算过的微分值(所有的 g t g^t gt)的均平方根,这就使得不同参数的 σ t \sigma^t σt值不一样,从而 不同的参数就具有了不同的learning rates,形式化定义为:
σ t = 1 t + 1 ∑ i = 0 t ( g i ) 2 \sigma^t=\sqrt {\frac{1}{t+1}\sum_{i=0}^{t}{(g^i)^2}} σt=t+11i=0t(gi)2
​ 这里因为 η \eta η σ t \sigma^t σt的定义,可将整个式子进行化简,得到:
w t + 1 ← w t − η ∑ i = 0 t ( g i ) 2 g t w^{t+1}←w^t-\frac{\eta}{\sqrt{\sum_{i=0}^{t}{(g^i)}^2}}g^t wt+1wti=0t(gi)2 ηgt
其中根号内的内容,是对当前 g t g^t gt再次微分的表现,这样能更好反应梯度下降的方向。例如在二次项的例中, 计算出一次微分的值后在跨参数(多参数情况下)进行比较时,需要进一步考虑二次微分的值,才能找到最 好的梯度下降方向,了解当前点离best step的位置。那为什么需要将再次微分考虑进去时,也可以直接计算 再次微分的结果,但是这样会产生额外的计算开销,而且在某些情况下会导致计算的成本较高。所以根号内 的内容就很好地根据已经计算的值去估计再次微分的结果(但并不是等于再次微分的近似值)。

2.2.2 随机梯度下降(Stochastic Gradient Descent)

随机梯度下降仅挑选一个样本,仅仅考虑该样本下的梯度值:
L n = ( y ‾ n − ( b + ∑ w i x i n ) ) 2 L^n=(\overline y^n-(b+\sum w_ix_i^n))^2 Ln=(yn(b+wixin))2

并且参数的调整之前的梯度下降方法中的损失函数是要考虑所有样本的情况,再对参数值进行调整。但此时仅考虑这一个样本:
Θ i = Θ i − 1 − η ∇ L n ( Θ i − 1 ) \Theta^i=\Theta^{i-1}-\eta\nabla L^n(\Theta^{i-1}) Θi=Θi1ηLn(Θi1)
每一次都根据一个样本进行更新,每次的一个样本产生一个梯度,调整一次,最终完成整体的梯度下降。而前面的一次性考虑所有的样本,一次完成梯度下降。例如,一共有20个样本,使用自适应的梯度下降一次考虑所有样本,完成梯度下降。而在随机梯度下降中,每次挑选一个样本进行梯度下降,共20次完成梯度下降,整体来说随机梯度下降到达最优解的速度快于自适应的梯度下降。当每次梯度下降过程后,由于设置的learning rates过大的问题可能错过局部最优解,从而导致损失函数值不降反升。

2.2.3 特征缩放(feature scaling)

根据实际处理使得不同的特征的规模相同,例如年龄(0,100),身高(0,230),通过特征缩放让整体的特征的规模相同(0,1)。这时为了解决当多个特征同时影响结果输出时,特征之间规模相差较大,这会使得整体的损失函数L受这个规模大的特征的影响。常用的特征缩放方法

例如,对于一个样本,含有特征 x 1 x_1 x1 x 2 x_2 x2 x i x_i xi,其中每个特征有多个取值 x i r x_i^r xir。于是计算中,对于每一个维度i,计算对应维度的特征的均值 m i m_i mi,标准差 σ i \sigma_i σi,于是对于每一个参数都进行操作:
x i r ← x i r − m i σ i x_i^r← \frac{x_i^r-m_i}{\sigma_i} xirσixirmi
通过这样计算下来的每个维度的平均值都为0,方差都为1;## 标题

你可能感兴趣的:(数据挖掘,机器学习,深度学习)