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