天天看點

深入淺出BP神經網絡算法的原理

        相信每位剛接觸神經網絡的時候都會先碰到BP算法的問題,如何形象快速地了解BP神經網絡就是我們學習的進階樂趣了(畫外音:樂趣?你在跟我談樂趣?)

本篇博文就是要簡單粗暴地幫助各位童鞋快速入門采取BP算法的神經網絡。

BP神經網絡是怎樣的一種定義?看這句話:一種按“誤差逆傳播算法訓練”的多層前饋網絡。

        BP的思想就是:利用輸出後的誤差來估計輸出層前一層的誤差,再用這層誤差來估計更前一層誤差,如此擷取所有各層誤差估計。這裡的誤差估計可以了解為某種偏導數,我們就是根據這種偏導數來調整各層的連接配接權值,再用調整後的連接配接權值重新計算輸出誤差。直到輸出的誤差達到符合的要求或者疊代次數溢出設定值。

說來說去,“誤差”這個詞說的很多嘛,說明這個算法是不是跟誤差有很大的關系?

沒錯,BP的傳播對象就是“誤差”,傳播目的就是得到所有層的估計誤差。

它的學習規則是:使用最速下降法,通過反向傳播(就是一層一層往前傳)不斷調整網絡的權值和門檻值,最後使全局誤差系數最小。

它的學習本質就是:對各連接配接權值的動态調整。

如果你覺得這篇文章看起來稍微還有些吃力,或者想要系統地學習人工智能,那麼推薦你去看床長人工智能教程。非常棒的大神之作,教程不僅通俗易懂,而且很風趣幽默。點選這裡可以檢視教程。

深入淺出BP神經網絡算法的原理

拓撲結構如上圖:輸入層(input),隐藏層(hide layer),輸出層(output)

BP網絡的優勢就是能學習和儲存大量的輸入輸出的關系,而不用事先指出這種數學關系。那麼它是如何學習的?

BP利用處處可導的激活函數來描述該層輸入與該層輸出的關系,常用S型函數δ來當作激活函數。

深入淺出BP神經網絡算法的原理

我們現在開始有監督的BP神經網絡學習算法:

1、正向傳播得到輸出層誤差e

=>輸入層輸入樣本=>各隐藏層=>輸出層

2、判斷是否反向傳播

=>若輸出層誤差與期望不符=>反向傳播

3、誤差反向傳播

=>誤差在各層顯示=>修正各層單元的權值,直到誤差減少到可接受程度。

    算法闡述起來比較簡單,接下來通過數學公式來認識BP的真實面目。

    假設我們的網絡結構是一個含有N個神經元的輸入層,含有P個神經元的隐層,含有Q個神經元的輸出層。

深入淺出BP神經網絡算法的原理

     這些變量分别如下:

深入淺出BP神經網絡算法的原理
深入淺出BP神經網絡算法的原理

認識好以上變量後,開始計算:

一、用(-1,1)内的随機數初始化誤差函數,并設定精度ε,最多疊代次數M

二、随機選取第k個輸入樣本及對應的期望輸出

深入淺出BP神經網絡算法的原理

重複以下步驟至誤差達到要求:

三、計算隐含層各神經元的輸入和輸出

深入淺出BP神經網絡算法的原理

四、計算誤差函數e對輸出層各神經元的偏導數,根據輸出層期望輸出和實際輸出以及輸出層輸入等參數計算。

深入淺出BP神經網絡算法的原理

五、計算誤差函數對隐藏層各神經元的偏導數,根據後一層(這裡即輸出層)的靈敏度(稍後介紹靈敏度)δo(k),後一層連接配接權值w,以及該層的輸入值等參數計算

深入淺出BP神經網絡算法的原理
深入淺出BP神經網絡算法的原理

六、利用第四步中的偏導數來修正輸出層連接配接權值

深入淺出BP神經網絡算法的原理

七、利用第五步中的偏導數來修正隐藏層連接配接權值

深入淺出BP神經網絡算法的原理

八、計算全局誤差(m個樣本,q個類别)

深入淺出BP神經網絡算法的原理

比較具體的計算方法介紹好了,接下來用比較簡潔的數學公式來大緻地概括這個過程,相信看完上述的詳細步驟都會有些了解和領悟。

假設我們的神經網絡是這樣的,此時有兩個隐藏層。

深入淺出BP神經網絡算法的原理

我們先來了解靈敏度是什麼?

看下面一個公式:

深入淺出BP神經網絡算法的原理

這個公式是誤差對b的一個偏導數,這個b是怎麼?它是一個基,靈敏度δ就是誤差對基的變化率,也就是導數。

因為∂u/∂b=1,是以∂E/∂b=∂E/∂u=δ,也就是說bias基的靈敏度∂E/∂b=δ等于誤差E對一個節點全部輸入u的導數∂E/∂u。

也可以認為這裡的靈敏度等于誤差E對該層輸入的導數,注意了,這裡的輸入是上圖U級别的輸入,即已經完成層與層權值計算後的輸入。

每一個隐藏層第l層的靈敏度為:

深入淺出BP神經網絡算法的原理

這裡的“◦”表示每個元素相乘,不懂的可與上面詳細公式對比了解

而輸出層的靈敏度計算方法不同,為:

深入淺出BP神經網絡算法的原理

而最後的修正權值為靈敏度乘以該層的輸入值,注意了,這裡的輸入可是未曾乘以權值的輸入,即上圖的Xi級别。

深入淺出BP神經網絡算法的原理

對于每一個權值(W)ij都有一個特定的學習率ηIj,由算法學習完成。

參考文獻1

參考文獻2

        相信每位剛接觸神經網絡的時候都會先碰到BP算法的問題,如何形象快速地了解BP神經網絡就是我們學習的進階樂趣了(畫外音:樂趣?你在跟我談樂趣?)

本篇博文就是要簡單粗暴地幫助各位童鞋快速入門采取BP算法的神經網絡。

BP神經網絡是怎樣的一種定義?看這句話:一種按“誤差逆傳播算法訓練”的多層前饋網絡。

        BP的思想就是:利用輸出後的誤差來估計輸出層前一層的誤差,再用這層誤差來估計更前一層誤差,如此擷取所有各層誤差估計。這裡的誤差估計可以了解為某種偏導數,我們就是根據這種偏導數來調整各層的連接配接權值,再用調整後的連接配接權值重新計算輸出誤差。直到輸出的誤差達到符合的要求或者疊代次數溢出設定值。

說來說去,“誤差”這個詞說的很多嘛,說明這個算法是不是跟誤差有很大的關系?

沒錯,BP的傳播對象就是“誤差”,傳播目的就是得到所有層的估計誤差。

它的學習規則是:使用最速下降法,通過反向傳播(就是一層一層往前傳)不斷調整網絡的權值和門檻值,最後使全局誤差系數最小。

它的學習本質就是:對各連接配接權值的動态調整。

如果你覺得這篇文章看起來稍微還有些吃力,或者想要系統地學習人工智能,那麼推薦你去看床長人工智能教程。非常棒的大神之作,教程不僅通俗易懂,而且很風趣幽默。點選這裡可以檢視教程。

深入淺出BP神經網絡算法的原理

拓撲結構如上圖:輸入層(input),隐藏層(hide layer),輸出層(output)

BP網絡的優勢就是能學習和儲存大量的輸入輸出的關系,而不用事先指出這種數學關系。那麼它是如何學習的?

BP利用處處可導的激活函數來描述該層輸入與該層輸出的關系,常用S型函數δ來當作激活函數。

深入淺出BP神經網絡算法的原理

我們現在開始有監督的BP神經網絡學習算法:

1、正向傳播得到輸出層誤差e

=>輸入層輸入樣本=>各隐藏層=>輸出層

2、判斷是否反向傳播

=>若輸出層誤差與期望不符=>反向傳播

3、誤差反向傳播

=>誤差在各層顯示=>修正各層單元的權值,直到誤差減少到可接受程度。

    算法闡述起來比較簡單,接下來通過數學公式來認識BP的真實面目。

    假設我們的網絡結構是一個含有N個神經元的輸入層,含有P個神經元的隐層,含有Q個神經元的輸出層。

深入淺出BP神經網絡算法的原理

     這些變量分别如下:

深入淺出BP神經網絡算法的原理
深入淺出BP神經網絡算法的原理

認識好以上變量後,開始計算:

一、用(-1,1)内的随機數初始化誤差函數,并設定精度ε,最多疊代次數M

二、随機選取第k個輸入樣本及對應的期望輸出

深入淺出BP神經網絡算法的原理

重複以下步驟至誤差達到要求:

三、計算隐含層各神經元的輸入和輸出

深入淺出BP神經網絡算法的原理

四、計算誤差函數e對輸出層各神經元的偏導數,根據輸出層期望輸出和實際輸出以及輸出層輸入等參數計算。

深入淺出BP神經網絡算法的原理

五、計算誤差函數對隐藏層各神經元的偏導數,根據後一層(這裡即輸出層)的靈敏度(稍後介紹靈敏度)δo(k),後一層連接配接權值w,以及該層的輸入值等參數計算

深入淺出BP神經網絡算法的原理
深入淺出BP神經網絡算法的原理

六、利用第四步中的偏導數來修正輸出層連接配接權值

深入淺出BP神經網絡算法的原理

七、利用第五步中的偏導數來修正隐藏層連接配接權值

深入淺出BP神經網絡算法的原理

八、計算全局誤差(m個樣本,q個類别)

深入淺出BP神經網絡算法的原理

比較具體的計算方法介紹好了,接下來用比較簡潔的數學公式來大緻地概括這個過程,相信看完上述的詳細步驟都會有些了解和領悟。

假設我們的神經網絡是這樣的,此時有兩個隐藏層。

深入淺出BP神經網絡算法的原理

我們先來了解靈敏度是什麼?

看下面一個公式:

深入淺出BP神經網絡算法的原理

這個公式是誤差對b的一個偏導數,這個b是怎麼?它是一個基,靈敏度δ就是誤差對基的變化率,也就是導數。

因為∂u/∂b=1,是以∂E/∂b=∂E/∂u=δ,也就是說bias基的靈敏度∂E/∂b=δ等于誤差E對一個節點全部輸入u的導數∂E/∂u。

也可以認為這裡的靈敏度等于誤差E對該層輸入的導數,注意了,這裡的輸入是上圖U級别的輸入,即已經完成層與層權值計算後的輸入。

每一個隐藏層第l層的靈敏度為:

深入淺出BP神經網絡算法的原理

這裡的“◦”表示每個元素相乘,不懂的可與上面詳細公式對比了解

而輸出層的靈敏度計算方法不同,為:

深入淺出BP神經網絡算法的原理

而最後的修正權值為靈敏度乘以該層的輸入值,注意了,這裡的輸入可是未曾乘以權值的輸入,即上圖的Xi級别。

深入淺出BP神經網絡算法的原理

對于每一個權值(W)ij都有一個特定的學習率ηIj,由算法學習完成。

參考文獻1

參考文獻2

        相信每位剛接觸神經網絡的時候都會先碰到BP算法的問題,如何形象快速地了解BP神經網絡就是我們學習的進階樂趣了(畫外音:樂趣?你在跟我談樂趣?)

本篇博文就是要簡單粗暴地幫助各位童鞋快速入門采取BP算法的神經網絡。

BP神經網絡是怎樣的一種定義?看這句話:一種按“誤差逆傳播算法訓練”的多層前饋網絡。

        BP的思想就是:利用輸出後的誤差來估計輸出層前一層的誤差,再用這層誤差來估計更前一層誤差,如此擷取所有各層誤差估計。這裡的誤差估計可以了解為某種偏導數,我們就是根據這種偏導數來調整各層的連接配接權值,再用調整後的連接配接權值重新計算輸出誤差。直到輸出的誤差達到符合的要求或者疊代次數溢出設定值。