深度學習一:深度前饋網絡

簡述

  • 深度前饋網絡(deep feedforward network), 又叫前饋神經網絡(feedforward neural network)多層感知機(multilayer perceptron, MLP) .
  • 深度前饋網絡之因此被稱爲網絡(network),由於它們一般由許多不一樣的符合函數組合在一塊兒來表示。
  • 輸入層(input layer)、隱藏層(hidden layer)、輸出層(output layer)構成。
  • 隱藏層的維數決定了模型的寬度(width)。

如圖,這是一個經典的二層神經網絡模型(Two-Layer Neural Network)。一般輸入層和輸出層神經元的個數是固定的,咱們須要選擇和調整隱藏層的層數和每一層神經元的個數等。
python

注:咱們能夠利用矩陣乘法來迅速計算神經網絡的輸出,後面不會說起。能夠參考Python神經網絡編程(拉希德著)這本書,寫的很是簡潔。git

線性分類問題

全部數據樣本是線性可分的,即知足一個形如 \(w_0+w_1x_1+w_2x_2\)的線性方程的劃分
github

線性分類問題的侷限

咱們引入經典的邏輯運算來推理線性分類問題的侷限。面試

如圖所示,分別爲線性模型來表示 AND,OR 邏輯,那麼XOR要怎麼表示呢?編程

由圖可知:咱們能夠利用線性模型擬合出一個直線來表示 AND、OR、NOR 的邏輯運算,可是沒有辦法用一條直線表示 xor 異或邏輯,這就是一個經典的非線性問題數組


注:黑色點是positive(1)的點,白色點是negative(0)的點網絡

從邏輯運算的視角來看:函數

邏輯 1 1 0 1 1 0 0 0
AND 1 AND 1 = 1 0 AND 1 = 0 1 AND 0 = 0 0 AND 0 = 0
OR 1 OR 1 = 1 0 OR 1 = 1 1 OR 0 = 1 0 OR 0 = 0
NOR 1 NOR 1 = 0 0 NOR 1 = 0 1 NOR 0 = 0 0 XOR 0 = 1
XOR 1 XOR 1 = 0 0 XOR 1 = 1 1 XOR 0 = 1 0 XOR 0 = 0

咱們能夠利用以下圖所示的一個神經元的感知機來表示一個邏輯 and/or/nor,即每個神經元能夠擬合出一條直線:
學習

解決線性問題的侷限

這裏涉及感知機(perceptron)的基本思想:多個神經元擬合多條直線,將這些直線組合在一塊兒來劃分一個非線性的邊界。
咱們來看上面的XOR邏輯,做爲一個簡單的例子,發現優化

\[I_1 XOR I_2 \]

能夠表示爲

\[(I_1 AND I_2) NOR (I_1 NOR I_2)。 \]

根據上述公式和圖,咱們能夠畫出以下的多層感知機,來實現非線性劃分數據表示XOR邏輯關係。

非線性問題常規處理手段

特徵非線性

引入非線性的特徵來處理非線性問題。
例如:輸入節點有表示平方的節點等。

模型非線性

引入非線性的激活函數來處理非線性問題。

激活函數

激活函數(activation function)又叫轉移函數(transfer function),用來增長神經網絡模型的非線性。

\[activation_i = g(s_i) = g(\sum_{j}w_{ij}x_j) \]

下圖是隻有一個神經元的示意圖:g函數是非線性的激活函數。由圖中能夠看出,當神經元計算出線性方程的結果s以後,傳入激活函數g中進行處理,最終獲得神經元的輸出g(s),從而實現非線性。

經常使用的激活函數

Sigmoid

S型激活函數又叫擠壓函數,能夠把任意的大小的x擠壓到(0,1)之間的y, 在x增大或者減少的過程當中會逐漸出現飽和(無限趨近於0或者1)。
在二分類問題中,能夠以0.5爲閾值,小於0.5爲一個類別,大於0.5爲另外一個類別。

\[f(x) = \frac{1}{1 + e^{-x}} \]

缺點

  1. 存在飽和現象,會致使梯度消失。
  2. 優化路徑存在zig zag問題。
  3. 函數使用指數運算,運算量比較大。

Tanh

雙曲正切函數,與sigmoid函數類似,也會出現梯度飽和,可是tanh的值域爲(-1,1)。

\[tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}} \]

Relu

線性整流函數(Rectified Linear Unit,ReLU),又稱修正線性單元。當x<0時,y爲0;當x>0時,y=x。沒有飽和現象,y能夠取到無窮大。

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

優勢

  1. 運算速度比較快。
  2. 不會出現飽和現象。
  3. 收斂迅速。

缺點

  1. 當x<0,y也爲0,梯度爲0。即當x<0,是沒有辦法進行學習的。

ELU

指數線性單元(Exponential Linear Unit)也是ReLU激活函數的變體。

\[f(x) = \begin{cases} x & x\geq0 \\ α*(e^x-1) & x<0 \end{cases} \]

優勢

  1. 當x<0時,曲線也有變化,不會中止學習。

缺點

  1. 指數運算的計算量比較大。

Leaky ReLU

帶泄露修正線性單元(Leaky ReLU)函數是ReLU激活函數的變體。當x<0時,y=0.1x;當x>0時,y=x。

\[f(x) = max(αx,x) \]

優勢

  1. 當x<0時,曲線也有變化,不會中止學習。
  2. 計算量比ELU小不少
  3. x<0的斜率α能夠本身設置

反向傳播

鏈式求導

鏈式求導是反向傳播利用的主要數學技巧,所以先來看鏈式求導。

咱們假設

\[y = y(u)\\ u = u(x) \]

\[\frac{∂y}{∂x} =\frac{∂y}{∂u}\frac{∂u}{∂x} \]

利用鏈式求導法則能夠有效的求出偏導數。注:應用在神經網絡中損失函數必須是可微的(differentiable),例如 Sigmod 或者 Tanh 等

  • Sigmod:
    • if $$z(s) = \frac{1}{1+e^-s}$$ , then $$z'(s) = z(1-z)$$
  • Tanh:
    • if $$z(s) = tanh(s)$$ , then $$z'(s) = 1-z^2$$

反向傳播 Backpropagation

反向傳播(back propagation, 簡稱backprop)。是梯度降低法在深度網絡上的具體實現方式。在傳統的前饋神經網絡中,信息經過網絡向前流動,輸入x提供初始值,而後傳播到每一層的隱藏單元,最終產生輸出y。這個流程被稱爲前向傳播(forward propagation)。而反向傳播容許來自代價函數的信息經過網絡向後流動,以便計算梯度、調整參數。

如圖,這是一個前向傳播網絡的示意圖:

其中 E 表示計算出的偏差,這個例子中利用的是最小均方偏差。

咱們爲了減少偏差,使模型的輸出接近咱們想要的值,就要利用反向傳播的辦法來調整模型中的參數。將偏差信號沿着原來的路線返回,即要從輸出到輸入作偏導,修改神經元的權值和偏置值,使偏差 E 最小。

反向傳播中的核心方程

根據上述的方程,咱們能夠來更新權重,\(w = w - η \frac{∂E}{∂w}\), 其中 \(η\) 是學習率

注:這個地方可能用計算圖理解比較清晰。你們能夠去查一些相關資料。

損失函數

損失函數(Loss Function)又稱偏差函數(Error Function)和代價函數(Cost Function)

在神經網絡中,咱們的目標是找到一組權重,使偏差最小化,即到達圖中的 Global Minimum 點

均方偏差 MSE

處理迴歸問題經常使用的損失函數

均方偏差(Mean Square Error, MSE)是真實值與預測值的差值的平方而後求和平均。

\[E = \frac{1}{2}(z_i-t_i)^2 \]

其中,\(z_i\) 是實際輸出值,\(t_i\) 是目標輸出值。前面加 \(\frac{1}{2}\) 的緣由是爲了求導時候消去導數上移下來的數字2.

存在的問題:對於均方偏差函數,在處理分類問題的時候不太合適。當 MSE 配合 Sigmoid 函數使用時,MSE 在求導過程當中要用到 Sigmoid 函數的導數\(z'(s)\),會由於梯度消失而致使模型權重學習的很慢。如圖

\[\frac{\delta E}{\delta w} = \frac{\delta E}{\delta z} \frac{\delta z}{\delta s} \frac{\delta s}{\delta w} = (z_i-t_i)·z_i'(s)·x_i \]

而交叉熵損失函數能夠很好的避免這個問題。

交叉熵損失函數 CEE

處理分類問題經常使用的損失函數

交叉熵損失函數(Cross Entropy, CE)或稱交叉熵偏差(Cross Entropy Error, CEE)

\[E = -\sum_kt_klog(z_k) \]

在01二分類問題中,公式形式爲

\[E = -tlog(z)-(1-t)log(1-z) \]

常見面試題

用Python手寫反向傳播神經網絡

源碼已上傳Github, 點擊跳轉

激活函數的做用

神經網絡中的激活函數有哪些

神經網絡爲何用交叉熵

交叉熵公式

Loss Function有哪些,怎麼用?

線性迴歸的表達式,損失函數

相關文章
相關標籤/搜索