1. 程式人生 > >google機器學習框架tensorflow學習筆記(三)

google機器學習框架tensorflow學習筆記(三)

降低損失:迭代法

迭代學習其實就是一種反饋的結果,有點類似於猜數遊戲,首先你隨便猜一個數,對方告訴你大了還是小了,接著你根據對方提供的資訊進行調整,繼續往正確的方向猜測,如此往復,你通常會越來越接近要猜的數。 這個遊戲真正棘手的地方在於儘可能高效地找到最佳模型。 下圖顯示了機器學習演算法用於訓練模型的迭代試錯過程: 迭代策略在機器學習中的應用非常普遍,這主要是因為它們可以很好地擴充套件到大型資料集。 “模型”部分將一個或多個特徵作為輸入,然後返回一個預測 (y') 作為輸出。

圖中的“計算損失”部分是模型將要使用的損失函式。

最後,我們來看圖的“計算引數更新”部分。機器學習系統就是在此部分檢查損失函式的值。現在,假設這個神祕的綠色框會產生新值,然後機器學習系統將根據所有標籤重新評估所有特徵,為損失函式生成一個新值,而該值又產生新的引數值。這種學習過程會持續迭代,直到該演算法發現損失可能最低的模型引數。通常,您可以不斷迭代,直到總體損失不再變化或至少變化極其緩慢為止。這時候,我們可以說該模型已
收斂
要點:在訓練機器學習模型時,首先對權重和偏差進行初始猜測,然後反覆調整這些猜測,直到獲得損失可能最低的權重和偏差為止。

降低損失:梯度下降法

假設我們有時間和計算資源來計算w1 的所有可能值的損失。對於我們一直在研究的迴歸問題,所產生的損失與w1 的圖形始終是凸形。如下所示: 凸形問題只有一個最低點;即只存在一個斜率正好為 0 的位置。這個最小值就是損失函式收斂之處。 通過計算整個資料集中w1每個可能值的損失函式來找到收斂點這種方法效率太低。我們來研究一種更好的機制,這種機制在機器學習領域非常熱門,稱為
梯度下降法
梯度下降法的第一個階段是為w1選擇一個起始值(起點)。起點並不重要;因此很多演算法就直接將w1設為 0 或隨機選擇一個值。 然後,梯度下降法演算法會計算損失曲線在起點處的梯度。簡而言之,梯度是偏導數的向量;它可以讓您瞭解哪個方向距離目標“更近”或“更遠”。請注意,損失相對於單個權重的梯度(如圖)就等於導數。 為了確定損失函式曲線上的下一個點,梯度下降法演算法會將梯度大小的一部分與起點相加,如下圖所示: 然後,梯度下降法會重複此過程,逐漸接近最低點。

降低損失:學習速率

正如之前所述,梯度向量具有方向和大小。梯度下降法演算法用梯度乘以一個稱為
學習速率 (有時也稱為 步長 )的標量,以確定下一個點的位置。例如,如果梯度大小為 2.5,學習速率為 0.01,則梯度下降法演算法會選擇距離前一個點 0.025 的位置作為下一個點。 超引數 是程式設計人員在機器學習演算法中用於調整的旋鈕。大多數機器學習程式設計人員會花費相當多的時間來調整學習速率。如果您選擇的學習速率過小,就會花費太長的學習時間,相反,如果您指定的學習速率過大,下一個點將永遠在 U 形曲線的底部隨意彈跳,就好像量子力學實驗出現了嚴重錯誤一樣。


降低損失:隨機梯度下降法


在梯度下降法中, 批量 指的是用於在單次迭代中計算梯度的樣本總數。到目前為止,我們一直假定批量是指整個資料集。 因此,一個批量可能相當巨大。如果是超大批量,則單次迭代就可能要花費很長時間進行計算。

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

通過從我們的資料集中隨機選擇樣本,我們可以通過小得多的資料集估算(儘管過程非常雜亂)出較大的平均值。  隨機梯度下降法  ( SGD ) 將這種想法運用到極致,它每次迭代只使用一個樣本(批量大小為 1)。如果進行足夠的迭代,SGD 也可以發揮作用,但過程會非常雜亂。“隨機”這一術語表示構成各個批量的一個樣本都是隨機選擇的。

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