TensorFlow從0到1 - 6 - 解鎖梯度下降算法

TensorFlow從0到1系列回顧

上一篇 5 TF輕松搞定線性回歸,我們知道了模型參數(shù)訓(xùn)練的方向是由梯度下降算法指導(dǎo)的,并使用TF的封裝tf.train.GradientDescentOptimizer(0.01)(學(xué)習(xí)率為0.01)完成了機(jī)器自學(xué)習(xí)的過程。本篇開啟梯度下降算法的黑盒一探究竟,并解鎖幾個(gè)TF API常用參數(shù)的真正含義:

  • learning rate;
  • steps;
  • epoch;
  • mini batch。
雪山速降

一般函數(shù)的最小值問題

4 第一個(gè)機(jī)器學(xué)習(xí)問題引入了損失函數(shù)的定義,即待訓(xùn)模型參數(shù)為自變量,計(jì)算模型輸出與預(yù)期(label)的均方誤差(MSE)。如下所示。

B-O-F-1 損失函數(shù)

所獲得的這個(gè)新函數(shù)C(a,b)的最小值處的(a, b)值,就是我們所尋找的理想模型參數(shù)。就這樣,一個(gè)回歸問題變成了更加具體的求函數(shù)極值的問題。

更進(jìn)一步,本節(jié)將之前損失函數(shù)自變量a和b一般化表示為v1,v2,把求解損失函數(shù)的最小化問題,轉(zhuǎn)換為更一般的函數(shù)C(v1,v2)最小化問題,C(v1,v2)具有任意的函數(shù)形式。如果找到一般的函數(shù)最小值求解方法,那么具有特殊形式的損失函數(shù)最小值求解自不在話下。

對(duì)于C是一個(gè)或者少數(shù)幾個(gè)變量的函數(shù),可以通過函數(shù)極值點(diǎn)處的導(dǎo)數(shù)特性來獲得多元方程組,直接求解極值點(diǎn)。但是我們準(zhǔn)備放棄這種嘗試,因?yàn)閷?duì)于一個(gè)真實(shí)世界的機(jī)器學(xué)習(xí)問題,其模型的復(fù)雜程度通常會(huì)遠(yuǎn)遠(yuǎn)的高于線性模型,參數(shù)的個(gè)數(shù)也遠(yuǎn)不止兩個(gè),損失函數(shù)的形式會(huì)變成:C(v1, v2 ... vn),如果n數(shù)以億計(jì),用微積分的方法簡(jiǎn)直就是噩夢(mèng)。

雪山速降的啟發(fā)

把函數(shù)曲面的某個(gè)局部,想象成前面圖中的雪山,如果想速降(以最快的速度下山),那么直覺上的最佳路徑就是沿著雪山最陡峭的方向下山。

再打個(gè)比方,考慮有兩個(gè)自變量的二次函數(shù)C(v1, v2),在三維視圖中,它是一個(gè)曲面。假設(shè)有個(gè)小球靠自身重力滾落到曲面的底部,可以想象其路徑也是沿著最陡峭的方向的。

梯度下降

如果我們不能直接看出函數(shù)的最小值,或者通過直接求解的方式得到函數(shù)最小值,那么利用雪山速降、小球滾落的啟發(fā),總是沿著最陡峭的下降方向移動(dòng),就會(huì)最快到達(dá)最小值點(diǎn)。

那么,“最陡峭”方向在數(shù)學(xué)上該怎么表達(dá)呢?

梯度的定義

微積分告訴我們,當(dāng)把v1, v2, ... , vn各個(gè)自變量移動(dòng)一個(gè)很小的值,C將有如下變化:

B-C-F-1 微積分

梯度定義有:

B-C-F-2 梯度

v的變化量為?v ≡ (?v1, ?v2, ..., ?vn)T,則C的變化量可重寫為梯度向量▽C與v的變化向量?v的點(diǎn)乘:

B-C-F-3 C的增量

梯度下降算法

直覺上,如果v朝某個(gè)方向上移動(dòng),導(dǎo)致C的增量是個(gè)負(fù)數(shù),那么可以肯定C在“下降”。

開下腦洞,直接令?v = -η▽C,其中η是一個(gè)正數(shù),代入公式B-C-F-3有:

?C ≈ -η▽C·▽C = -η‖▽C‖2 ≤ 0,此時(shí)?C一定小于等于0,C在下降。

幸運(yùn)的是,數(shù)學(xué)上可以證明對(duì)于一個(gè)非常小的步長(zhǎng)?v,令?v = -η▽C可以使C的減小最大化。

總結(jié)起來就是:

  • -η▽C正是我們期望的?v——移動(dòng)方向是▽C的反方向,移動(dòng)的幅度是η‖▽C‖;
  • v移動(dòng)?v所造成的C的?C,是-η‖▽C‖2;

上面這個(gè)η就叫做學(xué)習(xí)率learning rate。

回頭再來看“最陡峭的一小步”的數(shù)學(xué)解釋,那就是沿著梯度的反方向上走一小步。只要一小步一小步朝著正確的方向移動(dòng),遲早可以走到C(v1, v2, ..., vn)的最小值處。“梯度下降”,名副其實(shí)。

梯度下降的具體操作方法如下:

  1. 隨機(jī)選取自變量的初始位置v(以后會(huì)專門討論初始化的技巧);
  2. v → v' = v - η▽Cv(v移動(dòng)到v',▽Cv是v處的梯度,η保持不變);
  3. v' → v'' = v' - η▽Cv'(v'移動(dòng)到v'',▽Cv'是v'處的梯度,η保持不變);
  4. ...

v移動(dòng)的次數(shù),即訓(xùn)練的步數(shù)steps。

v是各個(gè)自變量(v1, v2, ..., vn)的向量表示,那具體到每個(gè)自變量該如何移動(dòng)呢?以v1,v2為例:

B-O-F-3 梯度下降

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

到此,梯度下降算法解決了如何尋求一般函數(shù)C(v1, v2, ..., vn)的最小值問題,再應(yīng)用到機(jī)器學(xué)習(xí)之前,先別急,還差一小步。

B-O-F-2 損失函數(shù)

回到損失函數(shù),再仔細(xì)看看其形式,發(fā)現(xiàn)它有個(gè)特別之處,即函數(shù)表達(dá)式與訓(xùn)練樣本的數(shù)量密切相關(guān),它是多個(gè)樣本方差的累加,最后再求均值。一個(gè)樣本集的樣本數(shù)動(dòng)輒成千上萬,為了“梯度下降”一小步中要用到的▽C,這么多樣本都要參與計(jì)算嗎?

并不需要,實(shí)踐中有巧妙的方法:

B-O-F-4 樣本梯度均值

首先,損失函數(shù)的梯度▽C,實(shí)踐中一般是通過樣本集中單個(gè)樣本梯度值▽Cx的均值得到。如果你對(duì)這個(gè)公式持懷疑態(tài)度,這不奇怪,一個(gè)簡(jiǎn)單的消除疑慮的做法就是用之前的線性模型和損失函數(shù),用兩個(gè)樣本值分別計(jì)算一下等式兩邊,看是否相等即可。

對(duì)于樣本集成千上萬個(gè)樣本,對(duì)每個(gè)樣本x都求其▽Cx,計(jì)算量似乎更大了。先別急,往下看。可以用一個(gè)小批量樣本,通過其中每個(gè)樣本▽Cx的均值,來近似為▽C:

B-O-F-5 樣本梯度均值的近似

這就是實(shí)踐中采用的方法,被稱為隨機(jī)梯度下降法。那個(gè)小批量樣本就是一個(gè)mini batch

把全部樣本集分成一批批的小樣本集,每全部遍歷使用過1次,就稱為1次epoch。

據(jù)此,每個(gè)自變量更新的公式如下:

B-O-F-6 分量的增量

上一篇 5 TF輕松搞定線性回歸
下一篇 7 TF線性回歸參數(shù)溢出之謎


共享協(xié)議:署名-非商業(yè)性使用-禁止演繹(CC BY-NC-ND 3.0 CN)
轉(zhuǎn)載請(qǐng)注明:作者黑猿大叔(簡(jiǎn)書)

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

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

  • 現(xiàn)在我們?cè)O(shè)計(jì)了一個(gè)神經(jīng)網(wǎng)絡(luò),但是它怎樣通過學(xué)習(xí)來識(shí)別手寫數(shù)字呢?首先需要的是被稱為訓(xùn)練數(shù)據(jù)集的數(shù)據(jù)集合。我們將使用...
    魔法煉金術(shù)閱讀 717評(píng)論 0 2
  • 去年Alaph GO擊敗李世石九段,社會(huì)掀起了機(jī)器學(xué)習(xí)技術(shù)討論的熱潮,不過很多人對(duì)機(jī)器學(xué)習(xí)并不了解,本文借由手寫數(shù)...
    Sunhaorong閱讀 2,720評(píng)論 0 4
  • 第二個(gè)Topic講深度學(xué)習(xí),承接前面的《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》。 深度學(xué)習(xí)簡(jiǎn)介 前面也提到過,機(jī)器學(xué)習(xí)的本質(zhì)就是尋找最...
    我偏笑_NSNirvana閱讀 16,201評(píng)論 7 49
  • 昨天室友走了,宿舍只剩下我自己一個(gè)人,本來也沒什么的,一直也都是一個(gè)人在做著自己的事情,上自習(xí),去圖書館,本來也就...
    一個(gè)愛幻想的girl閱讀 325評(píng)論 0 0
  • 目錄本次給大家介紹的是我收集以及自己個(gè)人保存一些.NET面試題簡(jiǎn)介1.C# 值類型和引用類型的區(qū)別2.如何使得一個(gè)...
    寒劍飄零閱讀 4,894評(píng)論 0 30

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