神經網絡中的BP算法

在我們瞭解過神經網絡的人中,都瞭解神經網絡一個有很常見的訓練方法,BP訓練算法.通過BP算法,我們可以不斷的訓練網絡,最終使得網絡可以無限的逼近一種我們想要擬合的函數,最終訓練好的網絡它既能在訓練集上表現好,也能在測試集上表現不錯!


那麼BP算法具體是什麼呢?爲什麼通過BP算法,我們就可以一步一步的走向最優值(即使有可能是局部最優,不是全局最優,我們也可以通過其它的方法也達到全局最優),有沒有一些什麼數學原理在裏面支撐呢?

1  BP算法


BP算法具體是什麼,可以參考我上篇文章推送(詳細的將BP過程走了一遍,加深理解通俗理解神經網絡BP反向傳播算法)。


那麼下面解決這個問題,爲什麼通過BP算法,就可以一步一步的走向更好的結果.


首先我們從神經網絡的運行原理來看,假如現在有下面這個簡單的網絡,如圖:





我們定義符號說明如下:




則我們正向傳播一次可以得到下面公式:




如果損失函數C定義爲


那麼我們希望訓練出來的網絡預測出來的值和真實的值越接近越好.


我們先暫時不管SGD這種方法(感興趣的可以參考我的這篇文章詳解梯度下降法的三種形式BGD,SGD以及MBGD),最暴力的我們希望對於一個訓練數據,C能達到最小,而在C表達式中,我們可以把C表達式看做是所有w參數的函數,也就是求這個多元函數的最值問題.那麼成功的將一個神經網絡的問題引入到數學中最優化的路上了.


2  一點思考



好,我們現在順利的將一個神經網絡要解決的事情轉變爲一個多元函數的最優化上面來了.


現在的問題是怎麼修改w,來使得C越來越往最小值靠近呢.常見的方法我們可以採取梯度下降法(爲什麼梯度下降法中梯度的反方向是最快的方向,可以參考我的這篇文章爲什麼梯度反方向是函數下降最快的方向?).

可能到這還有點抽象,下面舉一個特別簡單的例子.


假如我們的網絡非常簡單,如下圖(符號說明跟上面一樣):




那麼我們可以得到:



其中


只有w參數是未知的,那麼C就可以看做是關於w的二元函數(二元函數的好處就是我們可以在三維座標上將它可視化出來,便於理解~).圖片來自於網絡:




下面走一遍算法過程:


我們先開始隨機初始化w參數,相當於我們可以在圖上對應A點.


下面我們的目標是到達最低點F點,於是我們進行往梯度反方向進行移動,公式如下:


每走一步的步伐大小由前面的學習率決定,假如下一步到了B點,這樣迭代下去,如果全局只有一個最優點的話,我們在迭代數次後,可以到達F點,從而解決我們的問題。


那麼好了,上面我們給出二元函數這種簡單例子,從分析到最後求出結果,我們能夠直觀可視化最後的步驟。


那麼如果網絡複雜後,變成多元函數的最優值求法原理是一模一樣的


到此,我結束了該文要講的知識點了.歡迎各位同學指錯交流~


3  最終的思考


在我學習的時候,我已經理解了上面的知識了,但是我在思考既然我最後已經得到一個關於w的多元函數了。


那麼我爲什麼不直接對每一個w進行求偏導呢,然後直接進行更新即可,爲什麼神經網絡的火起還需要bp算法的提出才復興呢!


我的疑惑就是爲什麼不可以直接求偏導,而必須出現BP算法之後才使得神經網絡如此的適用呢?下面給出我的思考和理解(歡迎交流~)


1.爲什麼不可以直接求導數


在神經網絡中,由於激活函數的存在,很多時候我們在最後的代價函數的時候,包含w參數的代價函數並不是線性函數,比如最簡單的




這個函數對w進行求導是無法得到解析解的,那麼也就說明了無法直接求導的原因


2 那麼既然我們我們不能夠直接求導,我們是否可以近似的求導呢?比如可以利用




根據這個公式我們可以近似的求出對每個參數的導數,間距越小就越接近,那麼爲什麼不可以這樣,而必須等到BP算法提出來的時候呢?思考中.......


答:是因爲計算機量的問題,假設我們的網絡中有100萬個權重,那麼我們每一次算權重的偏導時候,都需要計算一遍改變值,而改變值必須要走一遍完整的正向傳播.


那麼對於每一個訓練樣例,我們需要100萬零一次的正向傳播(還有一次是需要算出C)。


而我們的BP算法求所有參數的偏導只需要一次反向傳播即可,總共爲倆次傳播計時。


到這裏我想已經解決了爲什麼不能夠用近似的辦法,因爲速度太慢,計算複雜度太大了~每一次的傳播,如果參數多的話,每次的矩陣運算量非常大,以前的機器速度根本無法承受~所以直到有了BP這個利器之後,加快了神經網絡的應用速度.

文章來源:作者:憶臻

發佈了34 篇原創文章 · 獲贊 328 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章