第五章 神經(jīng)網(wǎng)絡(luò)

神經(jīng)元模型

神經(jīng)網(wǎng)絡(luò)指由具有適應(yīng)性的簡單單元組成的廣泛并行互連的網(wǎng)絡(luò)。其中的簡單單元就是神經(jīng)元,M-P神經(jīng)元模型是一個經(jīng)典并且沿用至今的模型,對于一個神經(jīng)元:
y=f(\sum^n_{i=1}w_ix_i- \theta)
其中x_i代表其他神經(jīng)元的輸入,w_i為其他神經(jīng)元和本神經(jīng)元的連接權(quán)重,\theta是本伸進元的閾值,f()為激活函數(shù)。整個公式的理解就是所有連接神經(jīng)元對本神經(jīng)元的所有輸入和本神經(jīng)元的閾值進行比較,通過激活函數(shù)判斷最后的輸出。

對于激活函數(shù)有:

  • 階躍函數(shù)
    sgn(x)=\begin{cases} 1, x \geq 0; \\ 0,x<0; \end{cases}
  • Sigmoid函數(shù)
    sigmoid(x)=\frac1{1+e^{-x}}
    可以將較大范圍內(nèi)的輸入擠壓到(0,1)范圍內(nèi)。

將所有的神經(jīng)元連接到一起就形成了神經(jīng)網(wǎng)絡(luò),可以將其視為一個包含了許多參數(shù)的模型。例:10個神經(jīng)元的網(wǎng)絡(luò)模型參數(shù)個數(shù)=90個連接權(quán)重+10個神經(jīng)元閾值。

感知機與多層網(wǎng)絡(luò)

感知機由兩層神經(jīng)元組成,分別成為輸入層和輸出層。輸入層負責信號的輸入,輸出層接受信號,然后進行函數(shù)判斷,又稱為功能神經(jīng)元。感知機通過權(quán)重w_i和閾值\theta來實現(xiàn)簡單的邏輯運算,而w_i\theta就可以通過學習來獲得(可以將\theta看作是w_{n+1} \times -1整個問題就可以看作是權(quán)重的學習過程)。

學習過程通過下式描述:
w_i \leftarrow w_i+\Delta w
\Delta w_i=\eta(y-y')x_i
其中\eta \in (0,1)學習效率,y是真實輸出,y為預測輸出,通過每次輸出預測的差值對w_i進行調(diào)整。

感知機的特點在于,結(jié)構(gòu)簡單,但是只能處理比較簡單的線性可分問題(即通過一個超平面就可以將兩類模式分開),在這類問題中,學習過程會收斂,從而才會有穩(wěn)定的結(jié)果。

對于異或邏輯運算這種非線性可分的問題,就需要比較復雜的多層網(wǎng)絡(luò),這種網(wǎng)絡(luò)除了輸入層和輸出層,還包含了存于中間的隱含層,隱含層也有函數(shù)激活功能,數(shù)目為一層或者多層。多層網(wǎng)絡(luò)的結(jié)構(gòu)特點在于,層間不連,鄰層全連,隔層不連,也稱為多層前饋神經(jīng)網(wǎng)絡(luò)(前饋指的是沒有回路和環(huán)路)。

誤差逆?zhèn)鞑ニ惴?/h1>

誤差逆?zhèn)鞑ニ惴?/strong>(error BackPropagation,簡稱BP)是一種用于訓練多層神經(jīng)網(wǎng)絡(luò)的算法,多用于多層前饋神經(jīng)網(wǎng)絡(luò),所以有“BP網(wǎng)絡(luò)”,但是這個算法還可以用于其他神經(jīng)網(wǎng)絡(luò)。

對于給定的訓練集:
D=\lbrace (x_1,y_1)(x_2,y_2), \dots,(x_m,y_m)\rbrace,x_i \in R^d,y_i \in R^l
其中:
m為樣本個數(shù),d為屬性個數(shù),l為輸出神經(jīng)元個數(shù)。假定q為隱層神經(jīng)元的個數(shù),\theta_j表示第j個輸出神經(jīng)元的閾值,\gamma_h表示第h隱層神經(jīng)元的閾值,v_{ih}表示輸入層和隱層之間的權(quán)重,w_{hj}表示隱層和輸出層之間的權(quán)重。則隱層第h個神經(jīng)元接收的輸入為:
\alpha_h=\sum_{i=1}^dv_{ih}x_i
輸出層第j個 神經(jīng)元接收的輸入為:
\beta_j=\sum_{h=1}^qw_{hj}b_n
神經(jīng)網(wǎng)絡(luò)的輸出為:
\hat{y}_j^k=f(\beta_j-\theta_j)
則網(wǎng)絡(luò)在(x_k,y_k)上的均方誤差為:
E_k=\frac12 \sum^l_{j=1}(\hat{y}^k_j-y^k_j)^2
網(wǎng)絡(luò)中需要確定的參數(shù)數(shù)目為:d \times q+q \times l+q+l,即兩層權(quán)重和兩層閾值,通過迭代學習算法,對參數(shù)進行更新估計,因此對于每一個參數(shù)有:
v \leftarrow v+\Delta v
BP算法基于梯度下降策略,以w_{hj}為例進行計算。
通過E_kw_{hj}偏導數(shù)構(gòu)建(\eta為學習率):
\Delta w_{hj}=- \eta \frac{\delta E_k}{\delta w_{hj}}
從輸入層到輸出層理解,可得:
\frac{\delta E_k}{\delta w_{hj}}=\frac{\delta E_k}{\delta \hat{y}_j^k} \cdot \frac{\delta \hat{y}_j^k}{\delta \beta_j} \cdot \frac{\delta \beta_j}{\delta w_{hj}}
其中:
\frac{\delta \beta_j}{\delta w_{hj}}=b_h
g_i=\frac{\delta E_k}{\delta \hat{y}_j^k} \cdot \frac{\delta \hat{y}_j^k}{\delta \beta_j}
所以得到:
\Delta w_{hj}=\eta g_i b_n
類似可以計算其他參數(shù):
\Delta \theta_j=-\eta g_i
這個式子我的理解就是g_i為均方誤差對輸入的變化,閾值對應(yīng)輸入的反向變化可以達到同樣結(jié)果。
\Delta v_{ih}=\eta e_hx_i
\Delta \gamma_h=-\eta e_h
輸入層和隱含層之間,隱含層和輸出層之間各種參數(shù)的計算思想相同,但是可以使用不同的\eta為了調(diào)整學習速度。

BP算法的整體流程如下:

輸入:訓練集D,學習率
過程:
  (0,1)范圍內(nèi)隨機初始化所有參數(shù)
  repeat
    for all D do
      計算當前樣本輸出
      計算輸出層神經(jīng)元梯度項gj
      計算隱層神經(jīng)元梯度項eh
      更新連接權(quán)和閾值
    end for
  until 達到條件
輸出:神經(jīng)網(wǎng)絡(luò)

上述這種針對單個樣本的均方誤差最小進行調(diào)整的方式,稱為標準BP算法,如果用累積誤差最小化的規(guī)則更新,就是累積誤差逆?zhèn)鞑ニ惴ǎɡ鄯eBP)。兩種方法都很常用,標準BP算法,參數(shù)更新頻繁,且更新效果存在“抵消”現(xiàn)象,往往進行多次迭代;累積BP算法讀取整個訓練集之后更新參數(shù),頻數(shù)低,但是累積誤差下降到一定程度后,進一步下降會十分緩慢,因此當D比較大的時候,標準算法更快。

已經(jīng)證明如果有足夠多的隱含層神經(jīng)元,多層前饋神經(jīng)網(wǎng)絡(luò)就能以任意精度逼近任意復雜度的連續(xù)函數(shù),然而沒有明確的準則設(shè)置數(shù)目,常用“試錯法”。

為了應(yīng)對BP網(wǎng)絡(luò)的過擬合,有以下兩中策略:

  • 早停
    當訓練集誤差降低但驗證集誤差升高的時候,停止訓練,返回最小驗證集誤差對應(yīng)的連接權(quán)和閾值
  • 正則化
    在目標函數(shù)中增加用于描述網(wǎng)絡(luò)復雜度的部分,利用\lambda,1-\lambda來折中兩項(交叉驗證估計)

全局最小和局部極小

伸進網(wǎng)絡(luò)的訓練過程實際上就是尋找最優(yōu)的w\theta使得誤差E最小,存在兩種最優(yōu):對于w^*\theta^*,若存在\epsilon使得對于:
\forall(w,\theta) \in \lbrace (w;\theta) \mid ||(w;\theta)-(w^*;\theta^*)|| \leq \epsilon \rbrace
都有E(w; \theta) \geq E(w^*;\theta^*),則(w^*,\theta^*)局部極小解;若對于任意(w; \theta)都有E(w; \theta) \geq E(w^*;\theta^*),則(w^*,\theta^*)全局最小解。

全局最小解對應(yīng)的數(shù)值唯一,局部極小解可能有多個,全局一定局部,局部不一定全局。在尋找最優(yōu)參數(shù)的過程中,就是尋找全局最小解的過程,從一定的初始值,沿著一定的方向進行優(yōu)化,沿著下降的方向自然是最快的,例如上面提到的基于梯度下降的搜索方法,但是找到的最小值可能是局部最小而非全局最小,因此就需要一些跳出局部最小的方法(都是啟發(fā)式,沒有理論支持):

  • 通過從多種初始化參數(shù)數(shù)值進行訓練,就會得到多個最小解,將所有最小解中的最小的作為結(jié)果,就有可能是全局最小
  • 模擬退火技術(shù),以一定概率接受次優(yōu)解,便能夠跳出局部最小,通過概率隨事件變小,從而保證算法穩(wěn)定
  • 隨機梯度下降,與標準梯度下降相比,在計算梯度中加入了隨機因素,從而在局部極小點計算的梯度可能仍不為零,從而有機會跳出

其他常見神經(jīng)網(wǎng)絡(luò)

  • RBF網(wǎng)絡(luò)
  • ART網(wǎng)絡(luò)
  • SOM網(wǎng)絡(luò)
  • 級聯(lián)相關(guān)網(wǎng)絡(luò)
  • Elman網(wǎng)絡(luò)
  • Boltzmann機

深度學習

復雜的模型參數(shù)數(shù)目多,功能強,但是訓練效率低下,而且容易過擬合,但是大數(shù)據(jù)以及,高計算的出現(xiàn),使這類復雜模型有了更好的利用。

深度學習在神經(jīng)網(wǎng)絡(luò)方面就可以理解為,通過添加多個隱層,然后通過每一層的分解處理,將低層特征逐漸轉(zhuǎn)化為高層特征,從而在輸出層可以使用“簡單模型”來完成復雜的學習任務(wù)。通過機器自己學習來產(chǎn)生好的特征就可以省去人類子集的設(shè)計,就更接近于“全自動數(shù)據(jù)分析”。

主要實現(xiàn)方式有:

  • 無監(jiān)督逐層訓練
    先將每一層的下層輸出作為輸入,本層的輸出作為上層的輸出,訓練本層的隱結(jié)點,稱為預訓練。預訓練完成后,對整個網(wǎng)絡(luò)進行微調(diào)。這種方法可以看做將大量參數(shù)進行分組,先找局部比較好的設(shè)置,再從整體上進行微調(diào)。例如:深度信念網(wǎng)絡(luò)(DNB)
  • 權(quán)共享
    每組的神經(jīng)元都使用相同的權(quán),節(jié)省訓練開銷。例如:卷積神經(jīng)網(wǎng)絡(luò)(CNN)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容