從零開始機(jī)器學(xué)習(xí)-6 如何降低損失

本文由 沈慶陽 所有,轉(zhuǎn)載請與作者取得聯(lián)系!

前言

在上一節(jié)中,我們介紹了和機(jī)器學(xué)習(xí)有關(guān)的一些概念。其中,通過損失來評價模型預(yù)測的準(zhǔn)確程度。那么對于訓(xùn)練過程中,我們應(yīng)該采取什么樣的方法來減少損失呢?
我們都玩過猜價格的游戲:給定一個商品的價格,出題人明確商品的價格是多少,開始你也許會胡亂猜一個數(shù)字,出題人會告訴你相差多少(高很多,高一點(diǎn),低一點(diǎn)...),那么你會根據(jù)出題人的反饋再次猜一個數(shù)字。上述的價格,可以是機(jī)器學(xué)習(xí)中的w1,當(dāng)猜w1為0時,給出損失loss,根據(jù)損失再次猜w1的另一個值,比如0.2。如果一直這樣猜下去的話,總有猜中的時候。但是,如何以最快的方法確定w1的值是值得商榷的。

降低損失的方法

迭代的方法

訓(xùn)練模型的迭代過程

上圖展示了訓(xùn)練模型的迭代過程,首先迭代將模型的單個或多個特征來作為輸入,然后通過模型來輸出一個預(yù)測值y'作為輸出,再通過輸入標(biāo)簽與預(yù)測的值得出損失,再根據(jù)損失來更新模型中的參數(shù)。
假設(shè),只有一個特征作為輸入,則上述模型以機(jī)器學(xué)習(xí)形式表示如下:
y' = b + w1x1
通常,b和w1的初始值的取值是無所謂的,所以假設(shè)b和w1為0,若輸入值(特征)為1的話,則y'=0。此時,我們需要通過y(特征x對應(yīng)的正確的標(biāo)簽)和y'(預(yù)測值)進(jìn)行對比,得出損失。我們的機(jī)器學(xué)習(xí)程序,通過得到的損失相應(yīng)的更新參數(shù),產(chǎn)生新的b和w1的值,從而通過模型得到新的預(yù)測y',并為損失函數(shù)提供新的輸入。如此往復(fù),直到整體損失不再改變,或是改變地很慢的時候,此時該模型已收斂。

梯度下降法

在高等數(shù)學(xué)中,我們學(xué)習(xí)過梯度。
梯度:本意是一個向量(矢量),表示某一函數(shù)在該點(diǎn)處的方向?qū)?shù)沿著該方向取得最大值,即函數(shù)在該點(diǎn)處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。
在一元函數(shù)中,梯度即導(dǎo)數(shù),而在二元以上函數(shù)中,梯度即偏導(dǎo)數(shù)。此處不深究計算方法。
在上一小節(jié)中講到的迭代的方法并沒有詳細(xì)說明計算參數(shù)是如何更新的。那么該小節(jié)講到的梯度下降法則是更為具體的方法。


損失曲線圖

假設(shè),實(shí)際損失與權(quán)重的圖如上圖所示(實(shí)際上我們是不知道該圖是什么樣子的)。對于損失與權(quán)重的圖,其始終是凹的,即存在最低點(diǎn)使損失最小(也就是該點(diǎn)的斜率為0)。
暴力一點(diǎn)的方法,就是計算整個數(shù)據(jù)集中的w1的每個可能的值來得到最低的損失。對于回歸問題來說,這種方法往往太過暴力而導(dǎo)致效率低下。在機(jī)器學(xué)習(xí)領(lǐng)域中有著一種更為聰明的方法——梯度下降法。
在梯度下降法中,首先需要找到一個起點(diǎn)w1的值。對于起點(diǎn)值得選取并不重要,在一些機(jī)器學(xué)習(xí)的訓(xùn)練程序中,起點(diǎn)值通常選擇為0,或是任意一個值。這個起點(diǎn)值就是梯度下降法的起點(diǎn)。
梯度是偏導(dǎo)數(shù)相對于所有自變量的矢量,梯度下降法在起點(diǎn)選擇好之后,會計算損失曲線在起點(diǎn)處的梯度。由于梯度的定義為:某一函數(shù)在該點(diǎn)處的方向?qū)?shù)沿著該方向取得最大值。即沿著梯度的方向,損失是增長的。因此我們需要取負(fù)梯度的方向。所以我們的下一步會沿著負(fù)梯度的方向,將梯度大小的一部分與起點(diǎn)相加取得下一個點(diǎn)。并重復(fù)該過程,直到取得最低點(diǎn)或模型趨于收斂。


通過負(fù)梯度確定下一步的方向
學(xué)習(xí)速率

學(xué)習(xí)速率又稱Learn Rate,在有些機(jī)器學(xué)習(xí)程序中也稱為Step Size即步長。
在梯度下降法中,我們確定下一步的位置首先依賴于負(fù)梯度的方向(確定方向),其次則是依賴步長來確定大小。
假設(shè)在梯度下降法中,起點(diǎn)的w1取0.5,起點(diǎn)的梯度大小通過計算為1,若學(xué)習(xí)速率為0.1,則梯度下降算法會取距離起點(diǎn)沿著負(fù)梯度方向相距1*0.1大小的點(diǎn),即下一步的w1取0.6。
學(xué)習(xí)速率作為一個超參數(shù),影響著訓(xùn)練的速度。如果學(xué)習(xí)速率過大,則會造成模型永遠(yuǎn)不會收斂;若學(xué)習(xí)速率過小,則會造成模型訓(xùn)練花費(fèi)大量的時間。因此,在機(jī)器學(xué)習(xí)的過程中,工程師往往會花費(fèi)大量的時間來選擇合適的學(xué)習(xí)速率。


過大的學(xué)習(xí)速率造成來回震蕩

通常在確定學(xué)習(xí)速率的時候,如果一個損失曲線的梯度一直都比較小,那么則可以相應(yīng)加大學(xué)習(xí)速率;反之,減少學(xué)習(xí)速率。

隨機(jī)梯度下降法(SGD)

在介紹隨機(jī)梯度下降法之前,我們先說一下什么是批量(Batch)。
在機(jī)器學(xué)習(xí)領(lǐng)域中,批量(Batch)指的是在單次的迭代中用于計算梯度的樣本的總數(shù),批量可大可小。在前幾個小節(jié)中,我們默認(rèn)地認(rèn)為批量是整個數(shù)據(jù)集。對于小規(guī)模的樣本來說,這樣做沒什么不妥。但是當(dāng)數(shù)據(jù)集規(guī)模十分巨大的時候,如上億個樣本(比如垃圾郵件的樣本),面對如此超大批量的樣本,進(jìn)行一次迭代將會消耗大量的時間。
此外,對于大批量的樣本,存在冗余樣本的可能性越高。這些冗余樣本是重復(fù)的樣本。相比較,超大規(guī)模的批量比大規(guī)模批量出現(xiàn)冗余的可能性要高。
隨機(jī)梯度下降法通過更少地計算來得到平均梯度。在隨機(jī)梯度下降法中,批量的大小為1,即每次取1個樣本來計算平均梯度,這個樣本的選取是隨機(jī)的。也就是隨機(jī)梯度下降法中的隨機(jī)指的是樣本的選取。在這種方法下,當(dāng)?shù)拇螖?shù)足夠多的時候,平均梯度的值也就越準(zhǔn)確。但是這樣來計算平均梯度卻顯得極為雜亂。
通常,我們使用的是小批量隨機(jī)梯度下降法。小批量隨機(jī)梯度下降法是全批量和SGD的中間方案。小批量通常是10到100個隨機(jī)選擇的樣本。相比隨機(jī)梯度下降法,小批量隨機(jī)梯度下降法可以減少雜亂樣本的數(shù)量,同時也比全批量更為高效。

練習(xí)

1、在一個平均梯度較小的損失曲線情況下,學(xué)習(xí)速率應(yīng)該怎樣選?。?br> A.學(xué)習(xí)速率應(yīng)越低越好
B.學(xué)習(xí)速率應(yīng)相應(yīng)變大
2、在進(jìn)行超大型數(shù)據(jù)集的訓(xùn)練過程中,使用哪種方法效率更高?
A.小批量SGD或SGD
B.全批量SGD

覺得寫的不錯的朋友可以點(diǎn)一個 喜歡? ~
謝謝你的支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容