代價函數
在一開始,我們會完全隨機地初始化所有的權重和偏置值。可想而知,這個網絡對於給定的訓練示例,會表現得非常糟糕。例如輸入一個3的圖像,理想狀態應該是輸出層3這個點最亮。
可是實際情況並不是這樣。這是就需定義一個代價函數。(吳恩達老師稱單個樣本上的代價為$Loss function$,稱為損失函數 )
接下來就要考慮幾萬個訓練樣本中代價的平均值
梯度下降法
還得告訴它,怎么改變這些權重和偏置值,才能有進步。
為了簡化問題,我們先不去想一個有13000多個變量的函數,而考慮簡單的一元函數,只有一個輸入變量,只輸出一個數字。學過微積分的都知道,有時你可以直接算出這個最小值,不過函數很復雜的話就不一定能寫出,而我們這個超復雜的13000元的代價函數,就更加不可能做到了。
(這里有個問題:神經網絡中,為何不直接對損失函數求偏導后令其等於零,求出最有權重,而要使用梯度下降法(迭代)計算權重)?
知乎上對於這個問題的回答:https://www.zhihu.com/question/267021131
這里我主要關注了兩點:
- 神經網絡的代價函數其實是非凸函數
- 非凸優化問題被認為是非常難求解的,因為可行域集合可能存在無數個局部最優點,通常求解全局最優的算法復雜度是指數級的(NP難)。
一個靈活的技巧是:以下圖為例,先隨便挑一個輸入值,找到函數在這里的斜率,斜率為正就向左走,斜率為負就向右走,你就會逼近函數的某個局部最小值。(其實是沿着負梯度方向,函數減少的最快)
但由於不知道一開始輸入值在哪里,最后你可能會落到許多不同的坑里,而且無法保證你落到的局部最小值就是代價函數的全局最小值。
值得一提的是,如果每步的步長與斜率成比例,那么在最小值附近斜率會越來越平緩,每步會越來越小,這樣可以防止調過頭。
當我們提到讓網絡學習,實質上就是讓代價函數的值最小。代價函數有必要是平滑的,這樣我們才可以挪動以找到全局最小值,這也就是為什么人工神經元的激活值是連續的。
沒道理的回答
當輸入是一個噪音圖片時,神經網絡卻仍很自信的把它識別成一個數字。換句話說,即使網絡學會了如何識別數字,但是它卻不會自己寫數字。
究其原因,因為網絡的訓練被限制在很小的框架內,在網絡的世界里,整個宇宙都是由小網格內清晰的靜止的手寫數字構成的。
最后,作者給出上期問題的答案:神經元根本就沒有取去識別圖案和短邊!
參考鏈接: