大白話5分鐘帶你走進人工智能-第十二節梯度降低之背後的原理之泰勒公式(7)app
咱們接下來給你們深化一下,梯度降低背後究竟是什麼原理?談到這個,咱們要談到一個叫泰勒展開的這麼一個數學定理,泰勒發現任何一個函數不用管它有多複雜,無論它什麼樣,千奇百怪的任何一個函數,均可以寫成關於N階導數的一個多項式。即函數
解釋下,在A點附近,好比說A爲1,那麼在1附近,那麼f(x)=f(1),你有個解析式,f(1)總能算出來,把1丟進去算出來,那麼泰勒展開即:學習
是二階導數,什麼叫二階導數?導函數再求一下導。這麼一直這麼往下加,加到餘項爲零的時候就加完了。假如餘項始終不爲零,它就一直無限這麼加下去,加的項越多,這個函數越像原始的函數。優化
泰勒公式實際上用多項式函數去逼近一個光滑函數,什麼叫逼近?由於它是把一個原始的函數拆成好多項了,那麼拆項越多,這個加出來的結果就越像原函數。那好好的一個普通的函數,你爲何非得要給它拆成好多項呢? 一個X2+1,就兩項很簡單的,你爲何要給它變成N項?實際上不是全部的函數都是能這麼寫,好比sin X,在計算機裏,實際上計算sin X背後的本質是它他先進行完了泰勒展開,展開成200 多項,而後把這200多項算出來,獲得sin X究竟是多少。這個是交給計算機計算的這麼一種方式。再好比,此時我令a=0,就至關於在零點附近給它展開。若是按照剛纔展開式來說的話,零階展開就是n等於0,,X軸是x=1,你發現0階展開,若是把餘項拋棄了的話,就是一條直線,這條直線像原函數嗎?看起來不像。但在x=0這一點上的這條直線跟這個原函數很像。假如階數增高的話,如圖:人工智能
能夠看到,隨着階數的升高,甚至僅僅到達十階展開的時候,在咱們肉眼可及的地方,它跟原函數已經很是接近了。零階展開,若是就光說零附近的話,即便是零階展開,在極小的區域裏它也是比較像的,對吧?隨着階數愈來愈多,是否是離零越遠的地方也越跟原函數很像了?這就是泰勒展開的本質。它實際上就是經過在某一點附近用一個多項式去逼近原來的原函數,你能夠理解爲它是一個原函數的近似取值。 spa
回到咱們梯度降低來講,咱們梯度降低其實就是對原函數展開一個一階泰勒近似。 假如對泰勒展開式在x0進行一階泰勒展開,只獲得兩項。第一項就是f(x0),第二項就是(x-x0)f`(x0)。這個式子裏誰是未知數?誰是已知數?能夠發現只有x是未知數,剩下這些數雖然寫的是字母,但實際上你帶到真實的場景裏,就能算出來是具體的數。假如此時的f是損失函數的話,在x0的值是可求的,x0點的導數也可求。這x0天然也是知道的,因此它的一階泰勒的近似公式就是已經知道的了。3d
咱們看梯度降低是怎麼來的? 回到函數最優化問題上,若是我初始出來一組W0了,你想讓W0加上λd這個東西以後帶回到損失函數裏,但願損失函數越小越好。也就是咱們想要找到一個 λd 使上一代的 w+λd後 損失函數降低得最多,即 min 𝐸 𝑤0 + 𝜆𝑑 。λ是學習率,d應該等於什麼值?按照以前經驗,d應該等於負的梯度纔對。爲何d等於負梯度?咱們來一步步推導。咱們對E在w0附近進行一階泰勒展開:code
若是把𝑤0 + 𝜆𝘦入到上面的展開式裏面也就是:blog
咱們進行完一階泰勒展開以後,我想要讓損失函數:element
越小越好。看第一項E(𝑤0)能改變大小嗎?它已是一個既成事實了,λ是你人爲定的,因此只有讓d.g(𝑤0)越小越好。咱們先回顧下向量點乘的幾何含義:
也就是兩個向量長度乘積再乘一個向量之間的夾角cosθ。因此。怎麼讓這結果最小,咱們假設d向量長度變小一點,這樣能讓d*g(𝑤0)這項更小,可是你仔細想,d若是太大小了的話,一階泰勒展開的不等號還能成立嗎?由於咱們只展開了一階,階數越高,越接近原函數,當d過小的時候,展開的函數是否是就遠離原來的W0點了?遠離W0點的時候,不等號是否是就不成立了?至關於去求一個跟損失函數不同的函數的最小值,這是沒有意義的。假設向量長度不變的話,那麼怎麼讓它們相乘的結果越小越好?天然而然想到,讓cosθ=-1的時候,結果就最小。那何時cosθ=-1?也就是θ等於180度的時候,也就是d向量應該跟原來的梯度向量成180度夾角,即當d向量等於負的梯度向量的時候,此時的夾角θ能使cosθ=-1,因此咱們一般利用當d=-g(w0),此時的d向量和g(w0)之間的夾角爲180度,這時d*g(𝑤0)就是最小的。這也就是爲何梯度降低每一步的迭代,加的那個東西就恰好是負梯度這麼巧,是從一階泰勒展開,一步步推導出來的。
總結下,梯度降低的本質是什麼?對損失函數進行了一階泰勒展開的近似,而後對這個近似出來的函數求最小值,把最小值看成下一步用來迭代的值。 這就是梯度降低背後的數學原理。
歡迎關注個人公衆號LhWorld,不只爲你推薦最新的博文,還有更多驚喜和資源在等着你!一塊兒學習共同進步!