本文由 沈慶陽 所有,轉(zhuǎn)載請與作者取得聯(lián)系!
前言
在上一節(jié)中俊柔,我們介紹了和機(jī)器學(xué)習(xí)有關(guān)的一些概念。其中昭殉,通過損失來評價模型預(yù)測的準(zhǔn)確程度棵癣。那么對于訓(xùn)練過程中辕翰,我們應(yīng)該采取什么樣的方法來減少損失呢?
我們都玩過猜價格的游戲:給定一個商品的價格狈谊,出題人明確商品的價格是多少喜命,開始你也許會胡亂猜一個數(shù)字,出題人會告訴你相差多少(高很多河劝,高一點壁榕,低一點...),那么你會根據(jù)出題人的反饋再次猜一個數(shù)字赎瞎。上述的價格牌里,可以是機(jī)器學(xué)習(xí)中的w1,當(dāng)猜w1為0時务甥,給出損失loss牡辽,根據(jù)損失再次猜w1的另一個值,比如0.2缓呛。如果一直這樣猜下去的話催享,總有猜中的時候。但是哟绊,如何以最快的方法確定w1的值是值得商榷的因妙。
降低損失的方法
迭代的方法
上圖展示了訓(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ù)在該點處的方向?qū)?shù)沿著該方向取得最大值,即函數(shù)在該點處沿著該方向(此梯度的方向)變化最快地熄,變化率最大(為該梯度的模)华临。
在一元函數(shù)中,梯度即導(dǎo)數(shù)端考,而在二元以上函數(shù)中雅潭,梯度即偏導(dǎo)數(shù)。此處不深究計算方法却特。
在上一小節(jié)中講到的迭代的方法并沒有詳細(xì)說明計算參數(shù)是如何更新的扶供。那么該小節(jié)講到的梯度下降法則是更為具體的方法。
假設(shè)裂明,實際損失與權(quán)重的圖如上圖所示(實際上我們是不知道該圖是什么樣子的)椿浓。對于損失與權(quán)重的圖,其始終是凹的闽晦,即存在最低點使損失最邪獍(也就是該點的斜率為0)。
暴力一點的方法仙蛉,就是計算整個數(shù)據(jù)集中的w1的每個可能的值來得到最低的損失笋敞。對于回歸問題來說,這種方法往往太過暴力而導(dǎo)致效率低下荠瘪。在機(jī)器學(xué)習(xí)領(lǐng)域中有著一種更為聰明的方法——梯度下降法夯巷。
在梯度下降法中,首先需要找到一個起點w1的值哀墓。對于起點值得選取并不重要趁餐,在一些機(jī)器學(xué)習(xí)的訓(xùn)練程序中,起點值通常選擇為0麸祷,或是任意一個值澎怒。這個起點值就是梯度下降法的起點。
梯度是偏導(dǎo)數(shù)相對于所有自變量的矢量,梯度下降法在起點選擇好之后喷面,會計算損失曲線在起點處的梯度星瘾。由于梯度的定義為:某一函數(shù)在該點處的方向?qū)?shù)沿著該方向取得最大值。即沿著梯度的方向惧辈,損失是增長的琳状。因此我們需要取負(fù)梯度的方向。所以我們的下一步會沿著負(fù)梯度的方向盒齿,將梯度大小的一部分與起點相加取得下一個點念逞。并重復(fù)該過程,直到取得最低點或模型趨于收斂边翁。
學(xué)習(xí)速率
學(xué)習(xí)速率又稱Learn Rate翎承,在有些機(jī)器學(xué)習(xí)程序中也稱為Step Size即步長。
在梯度下降法中符匾,我們確定下一步的位置首先依賴于負(fù)梯度的方向(確定方向)叨咖,其次則是依賴步長來確定大小。
假設(shè)在梯度下降法中啊胶,起點的w1取0.5甸各,起點的梯度大小通過計算為1,若學(xué)習(xí)速率為0.1焰坪,則梯度下降算法會取距離起點沿著負(fù)梯度方向相距1*0.1大小的點趣倾,即下一步的w1取0.6。
學(xué)習(xí)速率作為一個超參數(shù)某饰,影響著訓(xùn)練的速度儒恋。如果學(xué)習(xí)速率過大,則會造成模型永遠(yuǎn)不會收斂露乏;若學(xué)習(xí)速率過小碧浊,則會造成模型訓(xùn)練花費大量的時間。因此瘟仿,在機(jī)器學(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)該怎樣選日锷蕖?
A.學(xué)習(xí)速率應(yīng)越低越好
B.學(xué)習(xí)速率應(yīng)相應(yīng)變大
2府瞄、在進(jìn)行超大型數(shù)據(jù)集的訓(xùn)練過程中碧磅,使用哪種方法效率更高?
A.小批量SGD或SGD
B.全批量SGD
覺得寫的不錯的朋友可以點一個 喜歡? ~
謝謝你的支持!