深度學習之梯度下降法


代價函數

在一開始,我們會完全隨機地初始化所有的權重和偏置值。可想而知,這個網絡對於給定的訓練示例,會表現得非常糟糕。例如輸入一個3的圖像,理想狀態應該是輸出層3這個點最亮。

可是實際情況並不是這樣。這是就需定義一個代價函數。(吳恩達老師稱單個樣本上的代價為$Loss function$,稱為損失函數 )

接下來就要考慮幾萬個訓練樣本中代價的平均值

 

梯度下降法

還得告訴它,怎么改變這些權重和偏置值,才能有進步。

為了簡化問題,我們先不去想一個有13000多個變量的函數,而考慮簡單的一元函數,只有一個輸入變量,只輸出一個數字。學過微積分的都知道,有時你可以直接算出這個最小值,不過函數很復雜的話就不一定能寫出,而我們這個超復雜的13000元的代價函數,就更加不可能做到了。

(這里有個問題:神經網絡中,為何不直接對損失函數求偏導后令其等於零,求出最有權重,而要使用梯度下降法(迭代)計算權重)?

知乎上對於這個問題的回答:https://www.zhihu.com/question/267021131

這里我主要關注了兩點:

  1. 神經網絡的代價函數其實是非凸函數
  2. 非凸優化問題被認為是非常難求解的,因為可行域集合可能存在無數個局部最優點,通常求解全局最優的算法復雜度是指數級的(NP難)。

一個靈活的技巧是:以下圖為例,先隨便挑一個輸入值,找到函數在這里的斜率,斜率為正就向左走,斜率為負就向右走,你就會逼近函數的某個局部最小值。(其實是沿着負梯度方向,函數減少的最快)

但由於不知道一開始輸入值在哪里,最后你可能會落到許多不同的坑里,而且無法保證你落到的局部最小值就是代價函數的全局最小值。

值得一提的是,如果每步的步長與斜率成比例,那么在最小值附近斜率會越來越平緩,每步會越來越小,這樣可以防止調過頭

當我們提到讓網絡學習,實質上就是讓代價函數的值最小。代價函數有必要是平滑的,這樣我們才可以挪動以找到全局最小值,這也就是為什么人工神經元的激活值是連續的。

 

沒道理的回答

當輸入是一個噪音圖片時,神經網絡卻仍很自信的把它識別成一個數字。換句話說,即使網絡學會了如何識別數字,但是它卻不會自己寫數字。

究其原因,因為網絡的訓練被限制在很小的框架內,在網絡的世界里,整個宇宙都是由小網格內清晰的靜止的手寫數字構成的。

 

最后,作者給出上期問題的答案:神經元根本就沒有取去識別圖案和短邊!

 

 

參考鏈接:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM