日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习读书笔记:神经网络

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习读书笔记:神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 神經元
  • 感知機 & 多層神經網絡
    • 神經網絡學習
    • 多層神經網絡
  • 誤差逆傳播算法:BP(BackPropagation)
    • 神經網絡過擬合問題
    • 局部最小與全局最小

? 現在的深度學習大行其道,深度學習就是利用深度神經網絡來進行學習。而什么是深度網絡呢,就是隱層大于1的網絡(實際上遠遠大于1)。那啥時候又是隱層呢?這都需要從神經元開始說起。

神經元

? 看看下面這樣圖:

? 這就是神經網絡中最基本的單元:M-P 神經元。神經元是模仿人類的神經單元組織出現的。

? 神經元將輸入轉成輸出:

  • 輸入。輸入又包含兩個部分,輸入數值x1,x2...xn{x_1, x_2 ... x_n}x1?,x2?...xn?和每個輸入對應的權值w1,w2...wn{w_1, w_2 ... w_n}w1?,w2?...wn?

  • 輸出。輸出yyy包含了包含了計算方式fff和閾值θ\thetaθ兩個部分。

  • 激活函數。一般來說,輸出通過fff計算之后,為了模仿人類神經元的“興奮”、“抑制”的二值狀態,會再fff之后增加一個激活函數。

    最簡單的激活函數是sgn(x)={1,x≥00,x<0sgn(x) = \begin{cases} 1, x \geq 0 \\ 0, x<0 \end{cases}sgn(x)={1,x00,x<0?,但是一般來說會使用數學性質更好的Sigmoid函數:sigmoid(x)=11+e?xsigmoid(x) = \frac{1}{1+e^{-x}}sigmoid(x)=1+e?x1?

? 把這樣的神經元前后連到一起,就形成了神經網絡。

感知機 & 多層神經網絡

? 感知機是一種最簡單的神經元連接方法:

神經網絡學習

? 神經網絡的學習是通過一個學習率來調整各個參數。

? 對于一個最簡單的M-P神經元模型來說,假設有n個輸入,那么對應了n個權重:w1,w2...wn{w_1, w_2 ... w_n}w1?,w2?...wn?。還有一個閾值θ\thetaθ。假設把這個θ\thetaθ也放入到www的向量中去,就可以統一的寫成,對于每一個訓練樣本,我們要計算獲得:
wi=wi+ΔwiΔwi=η(y?y~)xiw_i = w_i + \Delta w_i \\ \Delta w_i = \eta(y-\tilde{y})x_i wi?=wi?+Δwi?Δwi?=η(y?y~?)xi?
? 也就是說,根據每次訓練樣本中的fff的輸入y~\tilde yy~?和真實值yyy的差值,然后再乘以學習率η\etaη來計算得到每個www分量的調整量。根據這個調整量來調整模型中的www。通過大量的訓練樣本迭代來獲得最優化的www向量。這就是神經網絡的學習過程。

多層神經網絡

? 在這個模型中,只有兩層神經元。《機器學習》的書上是提出了這個可以用于“與”、“或”、“非”三種邏輯運算的。但是如果碰到像“異或”這種線性不可分的問題,感知機(二層網絡)就無法進行區分了。

? 這時候,就需要在輸入層和輸出層之間增加其他的層:就是多層神經網絡,除了輸入層和輸出層,其他的層統一叫做:“隱層”。

? 像上面的異或問題,加上一層神經元節點就可以搞定這個問題:

? 那么如果碰到更復雜的問題,可能就需要加上更多的隱層:

? 上面所有的網絡,因為我們的計算方向都是從輸入層 -> 隱層 -> 輸出層,可以說都是“往前“的,所以都叫做前饋網絡

? 一直增加隱層的數量,比如100層,200層,網絡的結構越來越深,這樣就演變成了深度神經網絡,用深度神經網絡來進行學習的方式就叫做深度學習

誤差逆傳播算法:BP(BackPropagation)

? 針對多隱層的神經網絡,不像感知機一樣只有兩層,也就是說不止一層的www向量需要進行學習。那么對于這種神經網絡,需要更加厲害一點的學習算法來進行。

? 誤差逆傳播,也就是把這個誤差一層一層從輸出層往輸入層傳播。

? 我們來看一下是怎么個一層一層的傳播法,拿單隱層的網絡來看,多隱層的類推:

  • lll表示輸出層的節點數,y1,y2,...yl{y_1, y_2, ... y_l}y1?,y2?,...yl?表示每個輸出層節點。
  • qqq表示隱層的節點數,b1,b2...bqb_1, b_2 ... b_qb1?,b2?...bq?表示每個隱層節點。
  • ddd表示輸入層的節點數,x1,x2...xdx_1, x_2 ... x_dx1?,x2?...xd?表示每個輸入層節點。
  • θj,j∈(1,2...l)\theta_{j}, j \in (1,2...l)θj?,j(1,2...l)表示每個輸出層節點中的閾值。
  • γh,h∈(1,2...q)\gamma_h, h \in (1,2...q)γh?,h(1,2...q)表示每個隱層節點中的閾值。
  • 每個輸出層的輸入就是qqq個隱層節點的鏈接,那么對于第jjj的輸入節點的輸入就是βj=∑h=1qwhjbh\beta_j = \sum_{h=1}^q{w_{hj}b{_h}}βj?=h=1q?whj?bh?,其中whjw_{hj}whj?為第hhh的隱層節點到第jjj個輸出層的權重。bhb_hbh?則為第hhh個隱層節點的輸出值。
  • 類似地,每個隱層的輸出值bhb_hbh?由與第hhh個隱層節點的所有輸入層節點來決定:αj=∑i=1dvihxi\alpha_j = \sum_{i=1}^d{v_{ih}x_i}αj?=i=1d?vih?xi?,其中vihv_{ih}vih?為第iii個輸入層節點到第hhh個隱層的權重。xix_ixi?則為每個輸入層節點的輸入。
  • 如果有多個隱層,就一層一層的推下去。
  • 隱層和輸出層的fff都定義為Sigmoid函數。

? 基于上面的一些定義,可以得到:

  • 對于每個訓練樣本(xk,yk)(x_k, y_k)(xk?,yk?)輸出層的輸出向量:yk~=(y1k~,y2k~...ylk~)\tilde{y_k} = (\tilde{y_1^k}^, \tilde{y_2^k}... \tilde{y_l^k})yk?~?=(y1k?~?,y2k?~?...ylk?~?)。其中yjk=f(βj?θj),j∈(1,2...l)y_j^k = f(\beta_j-\theta_j), j \in (1,2...l)yjk?=f(βj??θj?),j(1,2...l)。那么這個網絡在這個樣本上的均方誤差就是:Ek=12∑j=1l(yjk~?yjk)2E_k = \frac{1}{2}\sum_{j=1}^l{(\tilde{y_j^k} - y_j^k)^2}Ek?=21?j=1l?(yjk?~??yjk?)2

  • 如果針對上面公式里面的yjk~\tilde{y_j^k}yjk?~?進行展開,代入上面的β\betaβα\alphaα的話,總共就有(d+l+1)q+l(d+l+1)q+l(d+l+1)q+l個參數需要進行學習。才能確定網絡模型。

  • 對上述的所有的參數,我們需要計算出每次的調整量Δv\Delta vΔv,然后進行調整:v←v+Δvv\leftarrow v + \Delta vvv+Δv

  • Δv\Delta vΔv使用梯度下降的策略去對參數進行計算。給定一個學習率η\etaη,對其中一個參數whjw_{hj}whj?的調整計算為(用EEE去對這個參數whjw_{hj}whj?求偏導,梯度下降就是找梯度最大,加個負號就是找下降最快的方向):Δwhj=?η?Ek?whj\Delta{w_{hj}} = -\eta\frac{\partial E_k}{\partial w_{hj}}Δwhj?=?η?whj??Ek??,然后通過鏈式法則去一層層推導。我理解這里就體現除了逆傳播這個概念吧。具體通過鏈式法則怎么一步一步推導的,因為自己數學水平有限,有興趣的朋友可以自己去搜一搜。

  • 最終可以算出來幾個值為:

    Δwhj=ηgjbh\Delta w_{hj} = \eta g_j b_hΔwhj?=ηgj?bh?

    Δθj=?ηgj\Delta \theta_j = -\eta g_jΔθj?=?ηgj?

    Δvih=ηehxi\Delta v_{ih} = \eta e_h x_iΔvih?=ηeh?xi?

    Δγh=?ηeh\Delta \gamma_h = -\eta e_hΔγh?=?ηeh?

    其中:

    gj=yjk~(1?yjk~)(yjk?yjk)g_j = \tilde{y_j^k}(1-\tilde{y_j^k})(y_j^k-y_j^k)gj?=yjk?~?(1?yjk?~?)(yjk??yjk?)

    eh=bh(1?bh)∑j=1whjgje_h = b_h(1-b_h)\sum_{j=1}{w_{hj}g_j}eh?=bh?(1?bh?)j=1?whj?gj?

  • 這里一個關鍵的點在于學習率η\etaη,每個參數都可以使用不同的η\etaη來確定,因為過大的η\etaη會導致震蕩,過小又過收斂過慢,導致大量的計算。

? 一般把停止條件設置為損失達到某個較小的值。

? 上面講的是針對一個樣本(xk,yk)(x_k, y_k)(xk?,yk?)的均方誤差計算,也就是說假設有mmm個樣本的數據集DDD,針對每一個樣本都進行一次誤差反向傳播,來進行參數更新。這樣參數會及時更新,但是問題在于:參數可能會來回震蕩,因為樣本之間的誤差可能會相互抵消。但實際上可能就是前kkk個樣本計算后,基本上就穩定收斂了。

? 也可以將mmm個樣本分成nnn個批次,每個批次是有t=m/nt = m/nt=m/n個樣本,但是BP算法的目標是要最小化訓練集上的累積誤差E=1t∑j=1tEjE=\frac{1}{t}\sum_{j=1}^t{E_j}E=t1?j=1t?Ej?。根據你這個公式去做上述的推導和計算。

  • 一個一個樣本計算的稱為:標準BP算法
  • 一批一批樣本計算的稱為:累積BP算法

神經網絡過擬合問題

? 因為多層神經網絡的擬合能力非常強,一些復雜的關系也可以通過增加隱層的層數來達到擬合。所以是需要解決過擬合的問題。

? 一般采用兩種策略來解決這個過擬合的問題:

  • 早停。顧名思義,就是讓這個反向傳播算法的參數更新早點停止,不需要把所有的樣本全部訓練完。將數據分成訓練集和驗證集(不是測試集,測試集是用于訓練完成后評估網絡的泛化誤差的,這里的驗證集我理解是用于在不斷更新參數的過程中來控制過擬合的)。訓練批次完成后(標準BP或者是累積BP),就用驗證集數據評估一下誤差,如果誤差比之前升高了,就停止繼續迭代。

  • 正則化。通過引入一個參數: λ\lambdaλ,然后把網絡學習的參數向量www也納入到誤差計算公式EEE中,并且通過λ\lambdaλ控制之前的EEE和向量www
    E=λ1m∑k=1mEk+(1?λ)∑iwi2E = \lambda\frac{1}{m}\sum_{k=1}^m{E_k} + (1-\lambda)\sum_{i}w_i^2 E=λm1?k=1m?Ek?+(1?λ)i?wi2?
    書上說是通過λ\lambdaλ來控制,讓反向傳播的過程中會挑選較小的www,網絡的權重會比較光滑,從而降低過擬合的概率,不太懂是為什么。先這么記著吧。

局部最小與全局最小

? 使用梯度下降方法來找最小值,假設上面的EkE_kEk?函數在坐標系中的曲線為:

? 網絡的參數往往剛開始都是設置一個隨機值開始,假設是從左邊的某個點開始下降,很容易就陷入到局部最小的情況,然后算法停止。當然也有可能有右邊開始下降,就可以找到全局最小。我們需要找到一個更有效的方法,防止梯度下降的時候盡可能小的陷入局部最小的情況。

  • 既然隨機的話,就多選機組隨機參數值開始進行下降算法,選其中讓均方誤差EkE_kEk?最小的那一個,可以降低。
  • 模擬退火算法,在每一次的計算中,按照一定的概率選擇次選方案進行下降。
  • 隨機梯度下降,在梯度下降的時候,加入隨機因素。

總結

以上是生活随笔為你收集整理的机器学习读书笔记:神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。