全连接神经网络详解(Full Connect Neural Network)
文章目錄
- 前言
- 一、單層神經網絡
- 1.1 正向傳播
- 1.2 損失函數
- 1.3 梯度下降
- 二、淺層神經網絡
- 2.1 正向傳播
- 2.2 反向傳播
- 三、深層神經網絡
- 3.1 ImageNet發展史
- 3.2 網絡參數
- 總結及展望
前言
深度學習最基礎的網絡類型的之一,全連接神經網絡(Full Connect Neural Network)是大多數入門深度學習領域的初學者必學的內容,充分體現深度學習方法相比于傳統機器學習算法的特點,即大數據驅動、去公式推導、自我迭代更新、黑匣子訓練等。
本文介紹單層神經網絡、淺層神經網絡和深層神經網絡,循序漸進地加深對于深度學習基本概念的理解。需要注意的是所有代碼基于飛槳PaddlePaddle架構實現。
一、單層神經網絡
Logistic回歸模型是最簡單的單層網絡,常被用來處理二分類問題,它使一種用于分析各種影響因素(x1,x2,…,xn)(x_1,x_2,…,x_n)(x1?,x2?,…,xn?)與分類結果yyy之間的有監督學習方法。
1.1 正向傳播
此計算過程等同于線性回歸計算,即給每一個輸入向量x分配權值,計算出一個結果向量z。同時,為了使神經網絡具有非線性特點,引入激活函數來處理線性變換得到的數值。
- 線性變換(加權和偏置):z=wTx+bz=w^Tx+bz=wTx+b
- 非線性變換(激活函數):δ(x)=11+e?z\delta (x) = \frac{1}{{1 + {e^{ - z}}}}δ(x)=1+e?z1?
上式中www為權值,bbb為偏置,xxx為輸入值,zzz為線性輸出值,δ\deltaδ為非線性輸出值。
1.2 損失函數
模型需要定義損失函數來對參數www和bbb進行優化,損失函數的選擇需要具體問題具體分析,以下為兩種常見損失函數計算公式。
- 平方損失函數:L(y^,y)=12(y^?y)2L(\hat y,y) = \frac{1}{2}{(\hat y - y)^2}L(y^?,y)=21?(y^??y)2
- 對數似然損失函數:L(y^,y)=?[ylog?y^+(1?y)log?(1?y^)]L(\hat y,y) = - [y\log \hat y + (1 - y)\log (1 - \hat y)]L(y^?,y)=?[ylogy^?+(1?y)log(1?y^?)]
上式中y^\hat yy^?為計算結果,yyy為實際結果
1.3 梯度下降
梯度下降是一種前反饋計算方法,反映的是一種“以誤差來修正誤差”的思想,亦是神經網絡進行迭代更新的核心過程。
- 迭代更新:ω=ω?αdL(ω)dω\omega = \omega - \alpha \frac{{dL(\omega )}}{{d\omega }}ω=ω?αdωdL(ω)?
- 鏈式法則:dL(a,y)dω=dL(a,y)da?dadz?dzdω\frac{{dL(a,y)}}{{d\omega }} = \frac{{dL(a,y)}}{{da}} \cdot \frac{{da}}{{dz}} \cdot \frac{{dz}}{{d\omega }}dωdL(a,y)?=dadL(a,y)??dzda??dωdz?
單層網絡的代碼(Numpy實現和飛槳實現)
二、淺層神經網絡
淺層神經網絡相比單層網絡的差別在于隱藏層有多個神經節點,這就使得其可以處理“多輸入多輸出”的復雜問題。每一層的每一個節點都與上下層節點全部連接,這種神經網絡稱作全連接網絡。
2.1 正向傳播
z[1]=(z1[1]z2[1]z3[1])=(w1(1]T?x+b1(1)w2[1]T?x+b2[1]w3[1]T?x+b3[1])=(w1[1]T?xw2[1]T?xw3(1]T?x)+b[1]=W[1]x+b[1]a[1]=(a1[1]a2[1]a3[1])=(t(z1(1])t(z2(1])t(z3[1]))=t(z1[1]z2[1]z3[1])=t(z[1])\begin{array}{c} z^{[1]}=\left(\begin{array}{c} z_{1}^{[1]} \\ z_{2}^{[1]} \\ z_{3}^{[1]} \end{array}\right)=\left(\begin{array}{l} w_{1}^{(1] T} \cdot x+b_{1}^{(1)} \\ w_{2}^{[1] T} \cdot x+b_{2}^{[1]} \\ w_{3}^{[1] T} \cdot x+b_{3}^{[1]} \end{array}\right)=\left(\begin{array}{l} w_{1}^{[1] T} \cdot x \\ w_{2}^{[1] T} \cdot x \\ w_{3}^{(1] T} \cdot x \end{array}\right)+b^{[1]}=W^{[1]} x+b^{[1]} \\ a^{[1]}=\left(\begin{array}{l} a_{1}^{[1]} \\ a_{2}^{[1]} \\ a_{3}^{[1]} \end{array}\right)=\left(\begin{array}{c} t\left(z_{1}^{(1]}\right) \\ t\left(z_{2}^{(1]}\right) \\ t\left(z_{3}^{[1]}\right) \end{array}\right)=t\left(\begin{array}{c} z_{1}^{[1]} \\ z_{2}^{[1]} \\ z_{3}^{[1]} \end{array}\right)=t\left(z^{[1]}\right) \end{array} z[1]=????z1[1]?z2[1]?z3[1]??????=????w1(1]T??x+b1(1)?w2[1]T??x+b2[1]?w3[1]T??x+b3[1]??????=????w1[1]T??xw2[1]T??xw3(1]T??x?????+b[1]=W[1]x+b[1]a[1]=????a1[1]?a2[1]?a3[1]??????=??????t(z1(1]?)t(z2(1]?)t(z3[1]?)???????=t????z1[1]?z2[1]?z3[1]??????=t(z[1])?
- 上角標中括號用于區分不同層
- 下角標數字表示神經元節點的映射關系
- 一個神經元節點包含上一層節點數ωxω_xωx?和bxb_xbx?和下一層節點數zyz_yzy?
2.2 反向傳播
- 梯度下降法
W=W?α?L?Wb=b?α?L?b\begin{aligned} \boldsymbol{W} &=\boldsymbol{W}-\alpha \frac{\partial L}{\partial \boldsymbol{W}} \\ b &=b-\alpha \frac{\partial L}{\partial b} \end{aligned} Wb?=W?α?W?L?=b?α?b?L?? - 向量表達式
W[1]=(w1[1],w2[1],w3[1])T=[w1[1]Tw2[1]Tw3[1]T]=[w11[1],w12[1]w21[1],w22[1]w31[1],w32[1]]b[1]=[b1[1]b2[1]b3[1]]\boldsymbol{W}^{[1]}=\left(\boldsymbol{w}_{1}^{[1]}, \boldsymbol{w}_{2}^{[1]}, \boldsymbol{w}_{3}^{[1]}\right)^{\mathrm{T}}=\left[\begin{array}{l} \boldsymbol{w}_{1}^{[1]^{\mathrm{T}}} \\ \boldsymbol{w}_{2}^{[1] \mathrm{T}} \\ \boldsymbol{w}_{3}^{[1] \mathrm{~T}} \end{array}\right]=\left[\begin{array}{c} w_{11}^{[1]}, w_{12}^{[1]} \\ w_{21}^{[1]}, w_{22}^{[1]} \\ w_{31}^{[1]}, w_{32}^{[1]} \end{array}\right] \quad b^{[1]}=\left[\begin{array}{l} b_{1}^{[1]} \\ b_{2}^{[1]} \\ b_{3}^{[1]} \end{array}\right] W[1]=(w1[1]?,w2[1]?,w3[1]?)T=????w1[1]T?w2[1]T?w3[1]?T??????=????w11[1]?,w12[1]?w21[1]?,w22[1]?w31[1]?,w32[1]??????b[1]=????b1[1]?b2[1]?b3[1]??????
淺層網絡的代碼(Numpy實現和飛槳實現)
三、深層神經網絡
隨著網絡的層數增加,每一層對于前一層次的抽象表示更深入。在神經網絡中,每一層神經元學習到的是前一層神經元值的更抽象的表示。例如第一個隱藏層學習到的是"邊緣”的特征,第二個隱藏層學習到的是由‘邊緣"組成的"形狀”的特征,第三個隱藏層學習到的是由"形狀"組成的“圖案”的特征,最后的隱藏層學習到的是由“圖案"組成的"目標"的特征。通過抽取更抽象的特征來對事物進行區分,從而獲得更好的區分與分類能力。
3.1 ImageNet發展史
針對ImageNet數據集的圖像分類任務,人們提出了許多重要的網絡模型,生動形象地向我們展示了深層網絡的巨大優勢,回顧整個發展史能夠發現,深度學習的網絡層數從8層到152層逐步增加,網絡分類的能力也越來越強。
| 1994 | LeNet5 | - | 卷積、池化和全連接,標志CNN的誕生 |
| 2012 | Alex | 15.3% | ReLU、Dropout、歸一化 |
| 2014 | GoogLeNet | 6.66% | 沒有最深只有更深、Inception模塊 |
| 2015 | ResNet | 3.57% | 152層,深度殘差網絡 |
| 2016、2017 | Soushen、Momenta | 2.99%、2.251% | SE模塊嵌入殘差網絡 |
3.2 網絡參數
- 參數:指算法運行迭代、修正最終穩定的值。權重W和偏置b。
- 超參:開發者人為設定的值。學習率、迭代次數、隱藏層層數、單元節點數、激活函數等
深層網絡的代碼(Numpy實現和飛槳實現)
總結及展望
全連接神經網絡可以用來解決回歸任務、預測任務和分類任務,在不考慮計算機性能的條件下,無腦設置更深層次的網絡模型往往可以取得更好的效果。本質上它是一種線性神經網絡,無法避免地要面臨處理非線性數據集精度差的問題。優化主要集中在以下幾個方面。- 非線性因素:圍繞激活函數展開來說,提高計算速率就要使激活函數去積分化、去微分化、易求偏導,解決梯度消失和梯度爆炸的問題。
- 迭代更新策略:圍繞反向傳播更新權值和偏置,如損失函數選擇、優化器選擇、學習率衰減策略等等,在一定程度上可以提高精度。這類問題本質上仍是一種尋優算法的探索,可以引入遺傳算法、差分進化、多目標優化等尋找pareto最優解,
- 骨干網絡:網絡應該設置多少層,每一層應該有多少個節點,從來沒有一套標準的設計模板,毫無方向的在不斷測試中摸索前進。
總結
以上是生活随笔為你收集整理的全连接神经网络详解(Full Connect Neural Network)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GO 打开WINDOWS的默认浏览器
- 下一篇: 【算法】硬币找钱问题(贪心算法)