書名: 企業級AI技術內幕:深度學習框架開發+機器學習案例實戰+Alluxio解密作者名: 王家林 段智華編著本章字數: 1023字更新時間: 2021-03-26 23:54:01
9.1 梯度下降陷阱
接下來我們來看梯度下降過程中有可能導致的各種問題:
第一種問題,如圖9-5所示,變化率可能一開始太陡峭了,導致調整的時候從左側一下跳到了右側,又從右側一下跳到了左側,然后又從左側跳到了右側,始終不能趨近底部,這是很可能發生的情況。即使有更多的訓練數據,也無法達到變化率為0的點,這是比較糟糕的狀況。尤其變化率非常陡峭時,一下從最左側跳到最右側,又一下從最右側跳到最左側……,結果是離底部越來越遠,這是個悲劇,花了很大的精力且用了很多的數據,訓練出來的偏差實質上越來越大,這不是我們希望看見的。對于這種情況,我們要怎么處理?這是神經元網絡必須解決的最基本的問題。按照我們最原始的算法,要調整的時候可以想到很多辦法,如果梯度步伐太大,容易出一些問題,將步伐調小一點就行了。例如,在每次調整權重的時候要減去變化率,那么將變化率乘以一個系數α,系數α為0~1,就可以有效解決面臨的問題。
圖9-6是優化以后的狀態。我們將變化率乘以一個系數α,α一般設置為0.1、0.01等,就能有效避免步伐過大的問題。首先計算當前狀態的變化率,然后使用當前的權重減去變化率與系數α的乘積,x=x–(α*slope),一直訓練到變化率等于0。
在梯度下降過程中,第一種問題是步伐過大,步伐不合適會導致圓點永遠不能到達底部。第二種問題是局部最小值,圖9-6所示的梯度下降過程非常單純,只有一個最低點,但生產環境中數據的維度可能很多,在進行收斂的時候可能會到達一個局部的最小值,如圖9-7所示,這種情況處理起來較麻煩。

圖9-5 變化率陡峭

圖9-6 用變化率乘以系數來優化
如圖9-8所示,我們要克服將局部的最低點誤認為是全局的最低點問題。將收斂的空間劃分成5個部分,找出每個部分的局部最低點,也就是變化率為0的狀態。找到5個部分中每一個變化率為0的狀態以后,進行比較,找到全局最低點,這是比較樸素的思路。

圖9-7 局部最小值

圖9-8 多個局部最低點
第三個問題,在梯度下降過程中,步伐可能太小,步伐如果太小,就像人走路,每步本來可以移動50cm,但是如果擔心下一步掉到懸崖,就小心翼翼,每步只移動1mm,這就太夸張了。圖9-9描述了這種情況,這也是很不好的一種情況,因為資源是很昂貴的,計算時間特別長,訓練結果又不太好,步伐太大時在更新權重的時候,是每次乘以一個系數α(α為0~1),這里做優化時也要乘以一個α,不過這里的α值不是0~1,而是要大于1。

圖9-9 步伐過小的問題
以上是梯度下降可能出現問題的三種情況,我們提出相應的解決方案,一般是由算法來支撐解決。