天天看點

神經網絡算法與Python(三):誤差與學習

參考

一、Python神經網絡程式設計

二、CSDN部落格與簡書

誤差

在第二節中,我們簡述了神經網絡的運算方式,由此可知,輸出結果的誤差主要是來源于各個傳遞通道之間的權重。是以,我需要使用訓練資料集來輔助我們“訓練”神經網絡,即不斷地更新權重減小誤差。

但是,由于在一個完整的神經網絡中,誤差是有所有神經元之間的權重決定的,我們并不知道具體哪個神經元的輸出結果是多少亦或哪一層的輸出結果是多少。我們隻知道最終輸出結果與實際結果(即訓練集中的輸出)之間的誤差。

是以,這裡我們使用反向傳播誤差的方法決定。即在輸出層中的誤差按照權重配置設定到上一層神經元,以此類推。同樣地,我們也可以使用矩陣的方法輔助我們求得各個神經元被分得的誤差。

學習

由反向傳播法求得了各個神經元的誤差以後,那麼關鍵問題就變成了這些誤差該如何指導神經元進行學習,即如何更新權重?

神經網絡算法與Python(三):誤差與學習

上圖展示了一個簡單的三層每層三個神經元的輸入輸出關系。可見單純地從數學的角度出發并不能合理地求出最優值(因為随着神經網絡越來越複雜,公式也會越來越複雜并且計算量巨大)。

同樣采用枚舉法顯然也不是好的辦法來更新權重,因為僅僅從誤差的變化來猜測各個權重的大小變化的話由排列組合即可以知道計算量很大。是以實際上,我們使用梯度下降法(gradient descent)來輔助我們學習,這也是神經網絡中最核心的内容。