机器学习(4)
機器學習之梯度下降法
1.什么是梯度下降
- 解決的問題:找到一組參數 θ,讓損失函數L(θ)L(\theta)L(θ)越小越好
- θ?=arg?min?θL(θ)(1)\theta^?= \underset{ \theta }{\operatorname{arg\ min}} L(\theta) \tag1θ?=θarg?min?L(θ)(1)
- 解決方法:隨機選取參數初始值θ0\theta^0θ0,計算初始值處各參數對LLL的偏微分,然后θ0\theta^0θ0減去η 乘上偏微分的值,得到一組新的參數,同理反復進行這樣的計算。▽L(θ)\triangledown L(\theta)▽L(θ) 即為梯度。
2.梯度下降的理論基礎
梯度下降需要解決的問題可以轉變為,例如在初始值θ0\theta^0θ0處的一個小范圍圓圈內找到讓損失函數更小的θ1\theta^1θ1,再在θ1\theta^1θ1處尋找更小的,如此循環往復直到找到最小的。這樣問題就可以再簡化為:如何在小圓圈內快速的找到最小值?
基于泰勒展開式,在 (a,b)點的紅色圓圈范圍內,可以將損失函數用泰勒展開式進行簡化:
不考慮s的話,可以看出剩下的部分就是兩個向量(△θ1,△θ2)(\triangle \theta1,\triangle \theta2)(△θ1,△θ2) 和 (u,v)(u,v)(u,v) 的內積,當向量(△θ1,△θ2)(\triangle \theta1,\triangle \theta2)(△θ1,△θ2) 和向量 (u,v)(u,v)(u,v) 方向相反時,內積最小。
將u、v代入:
最后得到的式子即梯度下降的式子,當紅色圓圈足夠小(學習率足夠小)才能使用。實際應用中,如果學習率沒有設好,會導致做梯度下降的時候,損失函數沒有越來越小。
3.梯度下降的限制
- 極易陷入局部極值
- 可能卡在不是極值,但微分值是0的地方(鞍點)
- 可能實際中只是當微分值小于某一個數值就停下來了,但這里只是比較平緩,并不是極值點
4.梯度下降的關鍵問題
4.1 調整學習率
- 若學習率調整得太小,會導致走的太慢,雖然這種情況給足夠多的時間也可以找到最低點,實際情況可能會等不及出結果。
- 若學習率調整得太大,會出現震蕩,永遠無法達到最低點,當學習率非常非常大時,甚至可能出現直接就飛出去了,更新參數的時候只會發現損失函數越更新越大。
- 解決方案:將參數改變對損失函數的影響進行可視化。
4.2 自適應學習率
基本思想:隨著次數的增加,通過一些因子來減少學習率
注意點:
- 通常剛開始,初始點會距離最低點比較遠,所以使用大一點的學習率
- update好幾次參數之后呢,比較靠近最低點了,此時減少學習率
- 比如 ηt=ηtt+1\eta^t =\frac{\eta^t}{\sqrt{t+1}}ηt=t+1?ηt?,ttt 是次數。隨著次數的增加,ηt\eta^tηt 減小
- 學習率不能是一個值通用所有特征,不同的參數需要不同的學習率
4.3 Adagrad 算法
基本思想:每個參數的學習率都把它除上之前微分的均方根
-
對比
普通的梯度下降:
wt+1←wt?ηtgt(3)w^{t+1} \leftarrow w^t -η^tg^t \tag3wt+1←wt?ηtgt(3) ηt=ηtt+1(4)\eta^t =\frac{\eta^t}{\sqrt{t+1}} \tag4ηt=t+1?ηt?(4)
www 是一個參數Adagrad:
wt+1←wt?ηtσtgt(5)w^{t+1} \leftarrow w^t -\frac{η^t}{\sigma^t}g^t \tag5wt+1←wt?σtηt?gt(5) gt=?L(θt)?w(6)g^t =\frac{\partial L(\theta^t)}{\partial w} \tag6gt=?w?L(θt)?(6)
σt\sigma^tσt :之前 參數的所有微分的均方根,對于每個參數都是不一樣的Adagrad舉例:
進行簡化:
∑i=0t(gi)2\sqrt{\sum_{i=0}^t(g^i)^2}∑i=0t?(gi)2? 就是在盡可能不增加過多運算的情況下模擬二次微分(如果計算二次微分,在實際情況中可能會增加很多的時間消耗)
-
為什么要引入二次微分呢?
可以看出 ∣2ax0+b∣|2ax_0+b|∣2ax0?+b∣ 就是方程絕對值在 x0x_0x0? 這一點的微分,所以可以得出:如果算出來的微分越大,則距離最低點越遠。但是!!!以上結論在多參數下并不成立
上圖左邊是兩個參數的損失函數,顏色代表損失函數的值。如果只考慮參數 w1w1w1,就像圖中藍色的線,得到右邊上圖結果;如果只考慮參數 w2w2w2, 就像圖中綠色的線,得到右邊下圖的結果。確實對于 aaa 和 bbb,上述結論是成立的,同理 ccc 和 bbb 也成立。但是如果對比aaa 和 ccc,就不成立 了,ccc 比 aaa 大,但 ccc 距離最低點是比較近的。
之前說到的最佳距離 ∣2ax0+b2a∣\left | \frac{2ax_0+b}{2a} \right |∣∣?2a2ax0?+b?∣∣?,還有個分母 2a2a2a 。對function進行二次微分剛好可以得到: ?2y?x2=2a(7)\frac{\partial ^2y}{\partial x^2} = 2a \tag7?x2?2y?=2a(7) 所以最好的步伐應該是:一次微分二次微分\frac{一次微分}{二次微分}二次微分一次微分? 即不止和一次微分成正比,還和二次微分成反比。最好的step應該考慮到 二次微分,而Adagrad簡化后得到的∑i=0t(gi)2\sqrt{\sum_{i=0}^t(g^i)^2}∑i=0t?(gi)2?恰好近似等于二次微分的結果。
4.4 隨機梯度下降法
- 普通梯度下降:
L=∑n(y^n?(b+∑wixin))2(8)L=\sum^n(\hat y^n-(b+\sum w_ix_i^n))^2 \tag8L=∑n?(y^?n?(b+∑wi?xin?))2(8) θi=θi?1?η▽L(θi?1)(9)\theta^i =\theta^{i-1}- \eta\triangledown L(\theta^{i-1}) \tag9θi=θi?1?η▽L(θi?1)(9) - 隨機梯度下降:
L=(y^n?(b+∑wixin))2(10)L=(\hat y^n-(b+\sum wixi^n))^2 \tag{10}L=(y^?n?(b+∑wixin))2(10) θi=θi?1?η▽Ln(θi?1)(11)\theta^i =\theta^{i-1}- \eta\triangledown L^n(\theta^{i-1}) \tag{11}θi=θi?1?η▽Ln(θi?1)(11)
隨機梯度下降相較于普通梯度下降法更快,普通梯度下降法走一步需要處理所有例子,而隨機梯度下降法沒處理一個例子就更新,所以更快。
4.5 特征縮放
- 目的:解決多參數且尺度相差較大時,各個參數對損失函數影響不一致的問題
- 解決方案:歸一化
上圖每一列都是一個例子,里面都有一組特征。對每一個維度 iii(綠色框)都計算平均數,記做 mim_imi?;還要計算標準差,記做 σi\sigma _iσi?。然后用第 rrr 個例子中的第 iii 個輸入,減掉平均數 mim_imi?,然后除以標準差 σi\sigma _iσi?,得到的結果是所有的維數都是 000,所有的方差都是 111
總結
- 上一篇: 【学习的心得】——“快餐”的效率与“挖掘
- 下一篇: “RuntimeWarning: ove