機器學習入門四------下降損失

下降損失 (Reducing Loss)

爲了訓練模型,咱們須要一種可下降模型損失的好方法。迭代方法是一種普遍用於下降損失的方法,並且使用起來簡單有效算法

瞭解如何使用迭代方法來訓練模型。編程

全面瞭解梯度降低法和一些變體,包括:數組

  • 小批量梯度降低法
  • 隨機梯度降低法

嘗試不一樣的學習速率。機器學習

下降損失:迭代方法

介紹了損失的概念。在本單元中,您將瞭解機器學習模型如何以迭代方式下降損失。ide

迭代學習可能會讓您想到「Hot and Cold」這種尋找隱藏物品(如頂針)的兒童遊戲。在咱們的遊戲中,「隱藏的物品」就是最佳模型。剛開始,您會胡亂猜想(「w1 的值爲 0。」),等待系統告訴您損失是多少。而後,您再嘗試另外一種猜想(「w1 的值爲 0.5。」),看看損失是多少。哎呀,此次更接近目標了。實際上,若是您以正確方式玩這個遊戲,一般會愈來愈接近目標。這個遊戲真正棘手的地方在於儘量高效地找到最佳模型。函數

下圖顯示了機器學習算法用於訓練模型的迭代試錯過程:學習

圖 1. 用於訓練模型的迭代方法。google

咱們將在整個機器學習速成課程中使用相同的迭代方法詳細說明各類複雜狀況,尤爲是處於暴風雨中的藍雲區域。迭代策略在機器學習中的應用很是廣泛,這主要是由於它們能夠很好地擴展到大型數據集。code

「模型」部分將一個或多個特徵做爲輸入,而後返回一個預測 (y’) 做爲輸出。爲了進行簡化,不妨考慮一種採用一個特徵並返回一個預測的模型:blog

y′=b+w1x1

咱們應該爲 b 和 w1 設置哪些初始值?對於線性迴歸問題,事實證實初始值並不重要。咱們能夠隨機選擇值,不過咱們仍是選擇採用如下這些可有可無的值:

  • b = 0
  • w1 = 0

假設第一個特徵值是 10。將該特徵值代入預測函數會獲得如下結果:

y' = 0 + 0(10)
  y' = 0

圖中的「計算損失」部分是模型將要使用的損失函數。假設咱們使用平方損失函數。損失函數將採用兩個輸入值:

  • y’:模型對特徵 x 的預測
  • y:特徵 x 對應的正確標籤。

最後,咱們來看圖的「計算參數更新」部分。機器學習系統就是在此部分檢查損失函數的值,併爲 b 和 w1 生成新值。如今,假設這個神祕的綠色框會產生新值,而後機器學習系統將根據全部標籤從新評估全部特徵,爲損失函數生成一個新值,而該值又產生新的參數值。這種學習過程會持續迭代,直到該算法發現損失可能最低的模型參數。一般,您能夠不斷迭代,直到整體損失再也不變化或至少變化極其緩慢爲止。這時候,咱們能夠說該模型已收斂。

下降損失 (Reducing Loss):梯度降低法

迭代方法圖([圖 1]包含一個標題爲「計算參數更新」的華而不實的綠框。如今,咱們將用更實質的方法代替這種華而不實的算法。

假設咱們有時間和計算資源來計算 w1 的全部可能值的損失。對於咱們一直在研究的迴歸問題,所產生的損失與 w1 的圖形始終是凸形。換言之,圖形始終是碗狀圖,以下所示:

權重值 (wi)損失

圖 2. 迴歸問題產生的損失與權重圖爲凸形。

凸形問題只有一個最低點;即只存在一個斜率正好爲 0 的位置。這個最小值就是損失函數收斂之處。

經過計算整個數據集中 w1 每一個可能值的損失函數來找到收斂點這種方法效率過低。咱們來研究一種更好的機制,這種機制在機器學習領域很是熱門,稱爲梯度降低法。

梯度降低法的第一個階段是爲 w1 選擇一個起始值(起點)。起點並不重要;所以不少算法就直接將 w1 設爲 0 或隨機選擇一個值。下圖顯示的是咱們選擇了一個稍大於 0 的起點:

圖 3. 梯度降低法的起點。

而後,梯度降低法算法會計算損失曲線在起點處的梯度。簡而言之,梯度是偏導數的矢量;它可讓您瞭解哪一個方向距離目標「更近」或「更遠」。請注意,損失相對於單個權重的梯度(如圖 3 所示)就等於導數。

詳細瞭解偏導數和梯度。

請注意,梯度是一個矢量,所以具備如下兩個特徵:

  • 方向
  • 大小

梯度始終指向損失函數中增加最爲迅猛的方向。梯度降低法算法會沿着負梯度的方向走一步,以便儘快下降損失。

圖 4. 梯度降低法依賴於負梯度。

爲了肯定損失函數曲線上的下一個點,梯度降低法算法會將梯度大小的一部分與起點相加,以下圖所示:

圖 5. 一個梯度步長將咱們移動到損失曲線上的下一個點。

而後,梯度降低法會重複此過程,逐漸接近最低點。

##

下降損失 (Reducing Loss):學習速率

正如以前所述,梯度矢量具備方向和大小。梯度降低法算法用梯度乘以一個稱爲學習速率(有時也稱爲步長)的標量,以肯定下一個點的位置。例如,若是梯度大小爲 2.5,學習速率爲 0.01,則梯度降低法算法會選擇距離前一個點 0.025 的位置做爲下一個點。

超參數是編程人員在機器學習算法中用於調整的旋鈕。大多數機器學習編程人員會花費至關多的時間來調整學習速率。若是您選擇的學習速率太小,就會花費太長的學習時間:

圖 6. 學習速率太小。

相反,若是您指定的學習速率過大,下一個點將永遠在 U 形曲線的底部隨意彈跳,就好像量子力學實驗出現了嚴重錯誤同樣:

圖 7. 學習速率過大。

每一個迴歸問題都存在一個金髮姑娘學習速率。「金髮姑娘」值與損失函數的平坦程度相關。若是您知道損失函數的梯度較小,則能夠放心地試着採用更大的學習速率,以補償較小的梯度並得到更大的步長。

圖 8. 學習速率偏偏好。

一維空間中的理想學習速率是 1f(x)″(f(x) 對 x 的二階導數的倒數)。

二維或多維空間中的理想學習速率是海森矩陣(由二階偏導數組成的矩陣)的倒數。

廣義凸函數的狀況則更爲複雜。

下降損失 (Reducing Loss):隨機梯度降低法

在梯度降低法中,批量指的是用於在單次迭代中計算梯度的樣本總數。到目前爲止,咱們一直假定批量是指整個數據集。就 Google 的規模而言,數據集一般包含數十億甚至數千億個樣本。此外,Google 數據集一般包含海量特徵。所以,一個批量可能至關巨大。若是是超大批量,則單次迭代就可能要花費很長時間進行計算。

包含隨機抽樣樣本的大型數據集可能包含冗餘數據。實際上,批量大小越大,出現冗餘的可能性就越高。一些冗餘可能有助於消除雜亂的梯度,但超大批量所具有的預測價值每每並不比大型批量高。

若是咱們能夠經過更少的計算量得出正確的平均梯度,會怎麼樣?經過從咱們的數據集中隨機選擇樣本,咱們能夠經過小得多的數據集估算(儘管過程很是雜亂)出較大的平均值。 隨機梯度降低法(SGD) 將這種想法運用到極致,它每次迭代只使用一個樣本(批量大小爲 1)。若是進行足夠的迭代,SGD 也能夠發揮做用,但過程會很是雜亂。「隨機」這一術語表示構成各個批量的一個樣本都是隨機選擇的。

小批量隨機梯度降低法(小批量 SGD)是介於全批量迭代與 SGD 之間的折衷方案。小批量一般包含 10-1000 個隨機選擇的樣本。小批量 SGD 能夠減小 SGD 中的雜亂樣本數量,但仍然比全批量更高效。

爲了簡化說明,咱們只針對單個特徵重點介紹了梯度降低法。請放心,梯度降低法也適用於包含多個特徵的特徵集。

相關文章
相關標籤/搜索