神經網路與深度學習(二):前饋神經網路

神經元

激活函數的性質

  • 連續並可導(允許少數點上不可導)的非線性函數。
    • ​ 可導的激活函數可以直接利用數值優化的方法來學習網路參數。
  • 激活函數及其導函數要儘可能的簡單
    • ​ 有利於提高網路計算效率。
  • 激活函數的導函數的值域要在一個合適的區間內
    • ​ 不能太大也不能太小,否則會影響訓練的效率和穩定性。
  • 單調遞增

常用的激活函數

image-20221107191954701

複合函數=S型函數+斜坡函數

S型函數

Logistic函數

\[\sigma ( x ) = \frac { 1 } { 1 + e x p ( – x ) }
\]

\[\left. \begin{array} { l } { tan h ( x ) = \frac { e x p ( x ) – e x p ( – x ) } { e x p ( x ) + e x p ( – x ) } } \\ { tan h ( x ) = 2 \sigma ( 2 x ) – 1 } \end{array} \right.
\]

性質:

  • 飽和函數
  • Tanh函數是零中心化的,而logistic函數的輸出恆大於0

斜坡函數

\[Relu(x)=max(0,x)
\]

  • 計算上更加高效
  • 生物學合理性
    • 單側抑制、寬興奮邊界
  • 在一定程度上緩解梯度消失問題

死亡ReLU問題(Dying ReLU Problem)

\[\begin{array}{l}
LeakyReLU(x)=\left\{\begin{array}{ll}
x& \text { if } x>0 \\
\gamma x & \text { if } x \leq 0
\end{array}\right.\\
=\max (0, x)+\gamma \min (0, x)
\end{array}
\]

近似的零中心化的非線性函數

\[\begin{aligned}
\mathrm{ELU}(x) &=\left\{\begin{array}{ll}
x & \text { if } x>0 \\
\gamma(\exp (x)-1) & \text { if } x \leq 0
\end{array}\right.\\
&=\max (0, x)+\min (0, \gamma(\exp (x)-1))
\end{aligned}
\]

Rectifier函數的平滑版本

\[\operatorname{Softplus}(x)=\log (1+\exp (x))
\]

複合函數

Swish函數:一種自門控(Self-Gated)激活函數

\[swish(x)=x\sigma(\beta x)
\]

高斯誤差線性單元(Gaussian Error Linear Unit,GELU)

\[GELU(x)=xP(X\le x)
\]

image-20221107193345779

神經網路

人工神經網路主要由大量的神經元以及它們之間的有向連接構成。因此考慮三方面:

  • 神經元的激活規則
    • ​ 主要是指神經元輸入到輸出之間的映射關係,一般為非線性函數。
  • 網路的拓撲結構
    • ​ 不同神經元之間的連接關係。
  • 學習演算法
    • ​ 通過訓練數據來學習神經網路的參數。

網路結構

人工神經網路由神經元模型構成,這種由許多神經元組成的資訊處理網路具有並行分布結構。

image-20221107193700166

神經網路是一種主要的連接主義模型

​ 20世紀80年代後期,最流行的一種連接主義模型是分散式並行處理(Parallel Distributed Processing,PDP)網路,其有3個主要特性:

  1. 資訊表示是分散式的(非局部的);
  2. 記憶和知識是存儲在單元之間的連接上;
  3. 通過逐漸改變單元之間的連接強度來學習新的知識。

引入誤差反向傳播來改進其學習能力之後,神經網路也越來越多地應用在各種機器學習任務上。

前饋神經網路

全連接神經網路、多層感知器

  • 各神經元分別屬於不同的層,層內無連接。
  • 相鄰兩層之間的神經元全部兩兩連接。
  • 整個網路中無回饋,訊號從輸入層向輸出層單向傳播,可用一個有向無環圖表示。

image-20221107194139768

給定一個前饋神經網路,用下面的記號來描述這樣網路:

image-20221107194301313

資訊傳遞過程

前饋神經網路通過下面公式進行資訊傳播。

\[\begin{aligned}
z^{(l)} &=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)} \\
\boldsymbol{a}^{(l)} &=f_{l}\left(\boldsymbol{z}^{(l)}\right)
\end{aligned}
\]

\[\boldsymbol{a}^{(l)}=f_{l}\left(\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)}\right)
\]

前饋計算:

image-20221107195019787

應用到機器學習

神經網路可以作為一個「萬能」函數來使用,可以用來進行複雜的特徵轉換,或逼近一個複雜的條件分布。

\[\hat{y}=g(\phi(\boldsymbol{x}) ; \theta)
\]

image-20221107195727314

深層前饋神經網路

image-20221107195922056

參數學習

對於多分類問題

如果使用Softmax回歸分類器,相當於網路最後一層設置C個神經元,其輸出經過Softmax函數進行歸一化後可以作為每個類的條件概率。

\[\hat{\boldsymbol{y}}=\operatorname{softmax}\left(z^{(L)}\right)
\]

採用交叉熵損失函數,對於樣本(X,y),其損失函數為

\[\mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})=-\boldsymbol{y}^{\top} \log \hat{\boldsymbol{y}}
\]

給定訓練集為 $D=\left{\left(\boldsymbol{x}^{(n)}, y{(n)}\right)\right}_{n=1}{N} $, 將每個樣本 $ \boldsymbol{x}^{(n)} $ 輸入 給前饋神經網路, 得到網路輸出為$ \hat{y}^{(n)} $, 其在數據集 \(\mathrm{D}\) 上的 結構化風險函數為:

\[\mathcal{R}(\boldsymbol{W}, \boldsymbol{b})=\frac{1}{N} \sum_{n=1}^{N} \mathcal{L}\left(\boldsymbol{y}^{(n)}, \hat{\boldsymbol{y}}^{(n)}\right)+\frac{1}{2} \lambda\|\boldsymbol{W}\|_{F}^{2}
\]

Frobenius範數

\[\|\boldsymbol{W}\|_{F}^{2}=\sum_{l=1}^{L} \sum_{i=1}^{M_{l}} \sum_{j=1}^{M_{l-1}}\left(w_{i j}^{(l)}\right)^{2}
\]

梯度下降

計算

\[\frac{\partial \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})}{\partial \boldsymbol{W}^{(t)}}
\]

\(和\)

\[\frac{\partial \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})}{\partial \boldsymbol{b}^{(t)}}
\]

如何計算梯度?

神經網路為一個複雜的複合函數

鏈式法則?

\[y=f^{5}\left(f^{4}\left(f^{3}\left(f^{2}\left(f^{1}(x)\right)\right)\right)\right) \rightarrow \frac{\partial y}{\partial x}=\frac{\partial f^{1}}{\partial \mathrm{x}} \frac{\partial f^{2}}{\partial f^{1}} \frac{\partial f^{3}}{\partial f^{2}} \frac{\partial f^{4}}{\partial f^{3}} \frac{\partial f^{5}}{\partial f^{4}}
\]

反向傳播演算法

​ 根據前饋網路的特點而設計的高效方法

一個更加通用的計算方法

​ 自動微分(Automatic Differentiation,AD)

反向傳播演算法

矩陣微積分

  • 矩陣微積分(Matrix Calculus)是多元微積分的一種表達方式,即使用矩陣和向量來表示因變數每個成分關於自變數每個成分的偏導數。

  • 分母布局

    • 標量關於向量的偏導數
    \[\frac{\partial y}{\partial x}=\left[\frac{\partial y}{\partial x_{1}}, \cdots, \frac{\partial y}{\partial x_{M}}\right]^{\top} \in \mathbb{R}^{M \times 1}
    \]

    • 向量關於向量的偏導數
    \[\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}}=\left[\begin{array}{ccc}
    \frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{N}}{\partial x_{1}} \\
    \vdots & \ddots & \vdots \\
    \frac{\partial y_{1}}{\partial x_{M}} & \cdots & \frac{\partial y_{N}}{\partial x_{M}}
    \end{array}\right] \in \mathbb{R}^{M \times N}
    \]

    image-20221107202932002

image-20221107203321837
image-20221107203821827
image-20221107203952655

使用反向傳播演算法的隨機梯度下降訓練過程

image-20221107204130058

自動梯度計算

計算圖與自動微分

自動微分是利用鏈式法則來自動計算一個複合函數的梯度。

\[f(x ; w, b)=\frac{1}{\exp (-(w x+b))+1}
\]

計算圖

image-20221107204404304

自動微分

反向模式和反向傳播的計算梯度的方式相同,通常使用反向模式

image-20221107205216477

如果函數和參數之間有多條路徑,可以將這多條路徑上的導數再進行相加,得到最終的梯度。

反向傳播演算法(自動微分的反向模式)

前饋神經網路的訓練過程可以分為以下三步

  1. 前向計算每一層的狀態和激活值,直到最後一層
  2. 反向計算每一層的參數的偏導數
  3. 更新參數

靜態計算圖和動態計算圖

  • 靜態計算圖是在編譯時構建計算圖,計算圖構建好之後在程式運行時不能改變。
    Theano和Tensorflow
  • 動態計算圖是在程式運行時動態構建。
    DyNet,Chainer和PyTorch

兩種構建方式各有優缺點

  • 靜態計算圖在構建時可以進行優化,並行能力強,但靈活性比較差低。
  • 動態計算圖則不容易優化,當不同輸入的網路結構不一致時,難以並行計算,但是靈活性比較高。

Keras

深度學習的三個步驟

  1. 定義網路
  2. 損失函數
  3. 優化

優化問題

非凸優化問題

\[y = \sigma( w _ { 2 } \sigma ( w _ { 1 } x ) )
\]

image-20221107211416590

梯度消失問題(Vanishing Gradient Problem)

image-20221107211731977

難點

  • 非凸優化問題:即存在局部最優而非全局最優解,影響迭代
  • 梯度消失問題,下層參數比較難調
  • 參數過多,影響訓練
    • ​ 參數解釋起來比較困難

需求

  • 計算資源要大
  • 數據要多
  • 演算法效率要好:即收斂快

原創作者:孤飛-部落格園
原文鏈接://www.cnblogs.com/ranxi169/p/16867528.html