1 神經網絡
大量結構簡單的、功能接近的神經元節點按一定體系架構連接成的模擬大腦結構的網狀結構。用於分類、模式識別、連續值預測。建立輸入與輸出的映射關系.
1.1 神經元
生物神經元之間相互連接,傳遞信息。樹突進行輸入,細胞體處理,軸突進行輸出到下一神經元。
人工神經元包含:輸入\(x\)(考慮權重\(w\)),混合輸入(線性混合 \(w_i x_i\)),之后判斷是否達到閾值\(b\) 然后進行非線性映射\(f\)(激活函數, 仿生,達到閾值放電,低於閾值為0),輸出一個值\(y\)到下一層。

為了推導方便,把\(b\)當作權重的一部分,\(f\) 為激活函數,有式子:

常見傳統神經網絡激活函數
sigmod: \(f(z)=\frac{1}{1+e^{-z}}\),把\((-\infty, \infty)\)映射到\((0,1)\). 基本上函數的輸入小於-5就非常接近0,大於5非常接近1

雙曲正切函數: \(f(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}\), 把\((-\infty, \infty)\)映射到\((-1,1)\)

數學基礎: 鏈式求導\((f(g(x)))^\prime = f^\prime (g(x)) g^\prime(x)\); 或者\({\mathrm{d}y\over \mathrm{d}x}={\mathrm{d}y\over \mathrm{d}z}\bullet{\mathrm{d}z\over \mathrm{d}x}\)
對激活函數引入變量 \(y\)
\(f(z)=\frac{1}{1+e^{-z}}\) 令 \(f(z)=y\), 求導 \(f^\prime(z)= y(1-y)\)
\(f(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}\), 令\(f(z)=y\), 求導 \(f^\prime (z) = 1-y^2\)
其它關鍵問題
層數:傳統淺層網絡一般3到5層。層起到了提取特征的效果。一般有輸入層、隱含層和輸出層。
優化方法:梯度下降;BP后向傳播(鏈式規則)
1.2 前饋網絡
單向多層。同一層的神經元之間沒有相互連接,層間信息只沿一個方向進行。第一層為輸入層,最后一層為輸出層。
Delta學習規則 \(\Delta w_{ij} = a\cdot(d_i-y_i)x_j(t)\)
\(\Delta w_{ij}\) 是神經元 \(j\rightarrow i\)的連接權重增量; \(x_j\) 是輸入,是神經元 \(j\) 的狀態;\(d_i\) 是 \(i\) 的期望輸出;\(y_i\) 是 \(i\) 的實際輸出;\(a\) 是學習的步長,是學習速度的常數
神經網絡調權重有點像多項式擬合?最終把系數擬合出來。多項式擬合?,是多組輸入,多組輸出,調整系數(輸出與實際值接近)。神經網絡是一組輸入、多組輸出,調整權重(要求實際輸出與期望輸出接近)。
目標函數 目標函數以\(\mathrm{w}\)為自變量,初始輸入 \(\mathbf{x}\), 實際輸出 \(\mathbf{z}=(z_1,\dots,z_c)\) 與 期望輸出 \(\mathbf{t}=(t_1,\dots,t_c)\) 越接近越好,即:
目標要這個函數值盡量小,能夠接近0更好。系數 \({1\over 2}\) 是為計算方便,為了求導時消掉冪2。函數為各輸出誤差的平方的累加和。
1.3 梯度下降
上面的式子求最小值不方便求導,也可以對二維的情形可視化看到比較復雜。可以用梯度下降方法求最小值,沿梯度方向往下,到目標函數變化很少,即達到局部最小值。思路:先確定一個初始點,將\(\mathbf{w}\)的值,按照梯度下降(負方向)的方向調整\(\Delta\mathrm{w}=-\eta\frac{\partial J}{\partial\mathrm{w}}\),就會使喚\(J(\mathbf{w})\) 往更低的方向變化,直到目標\(J(\mathbf{w})\) 變化較少。
\(m+1\) 步的權重為:\(\mathrm{w}(m+1)=\mathrm{w}(m)+\Delta\mathrm{w}(m)=\mathrm{w}(m)-\eta\frac{\partial J}{\partial \mathrm{w}}\)
步驟: (1)計算梯度方向,(2)沿梯度方向下降 (3) 步長,學習速率
(4) 持續迭代。要求目標函數處處可導。
輸出層的權重改變量\(\frac{\partial J}{\partial w_{kj}}\)

如圖第\(k\)次迭代后,最后一個隱藏層\(H\)的結果,即對輸出層的輸入為\(\mathrm{y}\),對輸出層的權重為\(\mathrm{w_k}\),\(k\in[1,c]\),輸出層的對應這個輸入的結果為\(z_k\)
輸出層與之相對應的輸出單元的總的輸入(省略閾值\(b\),把\(b\) 看作權重的一部分,線性組合,該層輸入的加權和):\(net_k=\sum\limits_{j=1}^{n_H}w_{kj}y_j\), \(\color{darkgray}{\frac{\partial net_k}{\partial w_{kj}}}=y_j\)
輸出\(z_k\) 有:\(z_k\propto f(net_k)=f\left(\sum\limits_{j=1}^{n_H}w_{kj}y_j\right)\), \(f\) 為激活函數
尋找 \(J\) 與 \(w_{kj}\) 的函數關系:
\(\frac{\partial J}{\partial w_{kj}}=\color{green}{\frac{\partial J}{\partial net_k}}\color{darkgray}{\frac{\partial net_k}{\partial w_{kj}}}\)
\(\color{green}{\frac{\partial J}{\partial net_k}}=\color{red}{\frac{\partial J}{\partial z_k}}\color{darkorange}{\frac{\partial z_k}{\partial net_k}}=\color{red}{-(t_k-z_k)}\color{darkorange}{f^\prime (net_k)}\)
令: \(\delta_k = (t_k-z_k)f^\prime(net_k)\)(殘差)
\(\frac{\partial J}{\partial w_{kj}}=\color{red}{-(t_k-z_k)\color{darkorange}{f^\prime(net_k)\color{darkgray}{y_j}}}=-\delta_k y_j\)
所以:\(J\longrightarrow z_k \longrightarrow net_k\longrightarrow w_{kj}\)
\(J(\mathbf{w})={1 \over 2}\parallel \mathbf{t-z}\parallel^2 = {1\over 2}\sum\limits_{k=1}^c(t_k-z_k)^2\)
\(\frac{\partial J}{\partial w_{kj}}=\color{red}{\frac{\partial J}{\partial z_k}}\color{darkorange}{\frac{\partial z_k}{\partial net_k}}\color{darkgray}{\frac{\partial net_k}{\partial w_{kj}}}=\color{red}{-(t_k-z_k)}\color{darkorange}{f^\prime (net_k)}\color{darkgray}{y_j}\)
隱藏層的權重改變量\(\frac{\partial J}{\partial w_{ji}}\)

對於隱藏層的某一神經元 \(y_j\) 往輸出層有輸出\(\mathrm{z}\),也接收來自在輸入層的輸入\(\mathrm{x}\). 其中來自\(x_i\)的輸入權重為\(w_{ji}\), 輸出到 \(z_k\) 的權重為 \(w_{jk}\), \(i\in[1,d]\).
隱藏層的某一神經元\(y_j\) 來自輸入層的總的輸入:
\(net_j=\sum\limits_{i=1}^{d}w_{ji}x_i\), \(\color{darkyellow}{\frac{\partial net_j}{\partial w_{ji}}}=x_i\)
尋找 \(J\) 與 \(w_{ji}\) 的關系:
首先\(J\) 與 隱藏層神經元的輸出\(\color{darkorange}{y_j}\) 有關系,再看隱藏層的輸出\(\color{darkorange}{y_j}\)與隱藏層的接收\(\color{darkgray}{\frac{\partial net_j}{\partial w_{ji}}}\)有關系
所以有:
\(\frac{J}{\partial w_{ji}}=\color{darkorange}{\frac{\partial J}{y_j}}\color{darkgreen}{\frac{\partial y_j}{\partial net_j}}\color{darkgray}{\frac{\partial net_j}{\partial w_{ji}}}\)
\(\color{darkgreen}{\frac{\partial y_j}{\partial net_j}}=g^\prime(net_j)\), \(g\) 為 \(y_j\) 神經元的激活函數,可以與 輸出層的 \(f\) 相同,也可以不同
考察 \(\color{darkorange}{\frac{\partial J}{y_j}}\):
由 \(J(\mathbf{w})={1 \over 2}\parallel \mathbf{t-z}\parallel^2 = {1\over 2}\sum\limits_{k=1}^c(t_k-z_k)^2\):
\(\color{darkorange}{\frac{\partial J}{y_j}}=\frac{\partial \left[ {1\over 2}\sum\limits_{k=1}^c(t_k-z_k)^2\right] }{\partial y_j} = -\sum\limits_{k=1}^c(t_k-z_k) \frac{\partial z_k}{\partial y_j}\), \(\sum\) 表示 \(y_j\) 輸出到的所有 \(\mathrm{z}\);
上式中 \(\frac{\partial z_k}{\partial y_j}=\frac{\partial z_k}{\partial net_k}\frac{\partial net_k}{\partial y_j}=f^\prime (net_k) w_{kj}\),其中 \(f\) 為輸出層相應神經元的 激活函數,輸出層的總輸出 \(net_k=\sum\limits_{j=1}^{n_H}w_{kj}y_j\), \(\frac{\partial net_k}{\partial y_j}=w_{kj}\)
\(\color{darkorange}{\frac{\partial J}{\partial y_j}= -\sum\limits_{k=1}^c(t_k-z_k) f^\prime (net_k) w_{kj} = -\sum\limits_{k=1}^c \delta_k w_{kj}}\)
\(\frac{J}{\partial w_{ji}}=\color{darkorange}{\frac{\partial J}{\partial y_j}}\color{darkgreen}{\frac{\partial y_j}{\partial net_j}}\color{darkgray}{\frac{\partial net_j}{\partial w_{ji}}} = \color{darkorange}{-\sum\limits_{k=1}^c \delta_k w_{kj}} \color{darkgreen}{g^\prime(net_j)} \color{darkgray}{x_i}\)
令 \(\delta_j=\color{darkgreen}{g^\prime(net_j)} \color{darkorange}{\sum\limits_{k=1}^c \delta_k w_{kj}}\) (隱藏層的殘差)
\(\frac{J}{\partial w_{ji}}=-\delta_j \color{darkgray}{x_i}\)
1.4 誤差反向傳播
誤差傳播迭代的形式化表達
輸出層
\(\frac{\partial J}{\color{blue}{\partial w_{kj}}}=-\delta_k \color{purple}{y_j}\)
\(\color{blue}{w_{kj}: 隱含層 \longrightarrow 輸出層的權重}\)
\(\color{purple}{y_j: 輸出層單元的輸入,也是隱藏層神經元的輸出}\)
\(\delta_k=(t_k-z_k)\color{darkorange}{f^\prime(net_k)}\)
\((t_k-z_k): 人為定義的實際輸出層誤差\)
\(\color{darkorange}{f^\prime(net_k): 輸出層激活函數的導數;net_k 各隱含層輸出的加權和}\)
隱含層
\(\frac{J}{\color{blue}{\partial w_{ji}}}=-\delta_j \color{purple}{x_i}\)
\(\color{blue}{w_{ji}: 輸入層 \longrightarrow 隱含層的權重}\)
\(\color{purple}{x_i: 最初的人為實際輸入}\)
\(\delta_j=\color{darkgreen}{g^\prime(net_j)}\color{darkorange}{\sum\limits_{k=1}^c \delta_k w_{kj}}\)
\(\color{darkorange}{\sum\limits_{k=1}^c \delta_k w_{kj}}: 各輸出層傳播來的誤差\)
\(\color{darkorange}{w_{kj}: 隱含層 \longrightarrow 輸出層的權重}\)
\(\color{darkgreen}{g^\prime(net_j): 隱含層激活函數(可以與輸出層相同,也可以不同)的導數;net_j 各輸入的加權和}\)
總結
權重增量 = -1*學習步長*目標函數對權重的偏導數
\(\Delta\mathrm{w}(m)=-\eta\frac{\partial J}{\partial \mathrm{w}}\)
目標函數對權重的偏導數=-1*殘差*當前層的輸入
\(隱含層 \longrightarrow 輸出層\)
\(\frac{\partial J}{\partial w_{kj}}=-\delta_k y_j\)
\(輸入層 \longrightarrow 隱含層\)
\(\frac{J}{\partial w_{ji}}=-\delta_j x_i\)
殘差=當前層激活函數的導數*上層反傳來的誤差
\(隱含層 \longrightarrow 輸出層\)
\(\delta_k=\color{darkorange}{f^\prime(net_k)}(t_k-z_k)\)
\(輸入層 \longrightarrow 隱含層\)
\(\delta_j=\color{darkgreen}{g^\prime(net_j)}\color{darkorange}{\sum\limits_{k=1}^c \delta_k w_{kj}}\)
上層反傳來的誤差=上層殘差的加權和
\(隱含層 \longrightarrow 輸出層\)
\((t_k-z_k): 人為定義的實際輸出層誤差\)
\(輸入層 \longrightarrow 隱含層\)
\(\color{darkorange}{\sum\limits_{k=1}^c \delta_k w_{kj}}: 各輸出層傳播來的誤差\) 誤差反向傳播BP
網絡是前饋的(前向計算損失),由輸入到輸出層的最終輸出,沒有層內連接,沒有自身連接,沒有反饋連接;誤差是反向傳播,用於計算調整每一層的權重,使每一層的權重按梯度下降方法進行計算, 先得輸出層的誤差然后調整指向輸出層的權重,依次從后傳播即表現在調整權重。
網絡的初始輸入是人為的提取原始數據的特征,在算法執行過程中(隱藏層),對這些特征進行選擇對分類有用的特征。
1.5 BP示例

輸入樣本為 (A,B) 或者 \((x_1, x_2)\) 為 (0.35,0.9),因變量\(t\)為 0.5
初始權重:
\(w_{x_1y_1}=AP=0.1\), \(w_{x_1y_2}=AQ=0.4\), \(w_{y_1z}=PO=0.3\)
\(w_{x_2y_1}=BP=0.8\), \(w_{x_2y_2}=BQ=0.6\), \(w_{y_2z}=PO=0.9\)
三個神經元的激活函數均為\(f(net)=\frac{1}{1+e^{-net}}\), \(net\) 為該神經元的輸入權重和.
隱藏層神經元的輸入 \(net_{y_j}=\sum\limits_{i=1}^d w_{y_jx_i} x_i\)。
輸出層神經元的輸入 \(net_{z_k}=\sum\limits_{j=1}^n w_{z_ky_j} y_j\)。
前饋到輸出層 O:
P 處理來自 AB的輸入 \(p(A,B)=f(net_{y_1})=f(\sum\limits_{i=1}^2 w_{y_1x_i} x_i)=\frac{1}{1+e^{-(0.1\times 0.35+0.8\times 0.9)}}=0.68\)
Q 處理來自 AB的輸入 \(q(A,B)=f(net_{y_2})=f(\sum\limits_{i=1}^2 w_{y_2x_i} x_i)=\frac{1}{1+e^{-(0.4\times 0.35+0.6\times 0.9)}}=0.6637\)
O 處理來自 PQ的輸入 \(o(P,Q)=f(net_{z_1})=f(\sum\limits_{j=1}^2 w_{z_1y_j} y_j)=\frac{1}{1+e^{-(0.3\times 0.68+0.9\times 0.6637)}}=0.69\)

誤差反向傳播調整權重
先從輸出層的實際誤差開始中 \(t=0.5\), \(z=0.69\):
梯度下降法使\(J(\mathrm{w})={1\over 2}(t-z)^2\) 得到最小值
先看隱含層到輸出層權重:
\(\frac{\partial J}{\partial PO}=\frac{\partial J}{\partial error}\frac{\partial error}{\partial o}\frac{\partial o}{\partial PO} = \color{red}{\frac{\partial J}{\partial z_1}}\color{darkorange}{\frac{\partial z_1}{\partial net_{z_1}}}\color{darkgray}{\frac{\partial net_{z_1}}{\partial w_{z_1y_1}}}=\color{red}{-(t-z)}\color{darkorange}{f^\prime (net_{z_1})}\color{darkgray}{y_1}=-(0.5-0.69)\times[0.69\times(1-0.69)]\times0.68=0.02763\)
這里 \(\color{darkorange}{f (net_{z_1})}=z_1\), 導數可以用輸出計算 \(\color{darkorange}{f^\prime (net_{z_1})}=z_1 (1-z_1)\).
\(\frac{\partial J}{\partial QO}=\frac{\partial J}{\partial error}\frac{\partial error}{\partial o}\frac{\partial o}{\partial QO} = \color{red}{\frac{\partial J}{\partial z_1}}\color{darkorange}{\frac{\partial z_1}{\partial net_{z_1}}}\color{darkgray}{\frac{\partial net_{z_1}}{\partial w_{z_1y_2}}}=\color{red}{-(t-z)}\color{darkorange}{f^\prime (net_{z_1})}\color{darkgray}{y_2}=-(0.5-0.69)\times[0.69\times(1-0.69)]\times0.6673=0.02711\)
調整權重
\(\mathrm{w}(m+1)=\mathrm{w}(m)+\Delta \mathrm{w} = \mathrm{w}(m)-\eta\frac{\partial J}{\partial \mathrm{w}}\)
\(PO^* = PO-\frac{\partial J}{\partial PO} = 0.2723\)
\(QO^* = QO-\frac{\partial J}{\partial QO} = 0.8730\)
輸入層到隱藏層的權重
\(\frac{\partial J}{\partial AP}= \frac{\partial J}{\partial error}\frac{\partial error}{\partial o}\frac{\partial o}{\partial p}\frac{\partial p}{\partial AP}=\color{darkorange}{\frac{\partial J}{y_1}}\color{darkgreen}{\frac{\partial y_1}{\partial net_{y_1}}}\color{darkgray}{\frac{\partial net_{y_1}}{\partial w_{y_1x_1}}}=\color{darkorange}{\left[ -\sum\limits_{k=1}^1(t_k-z_k) \frac{\partial z_k}{y_1}\right]}\color{darkgreen}{\frac{\partial y_1}{\partial net_{y_1}}}\color{darkgray}{\frac{\partial net_{y_1}}{\partial w_{y_1x_1}}} =\color{darkorange}{\left[ -(t_1-z_1) \frac{\partial z_1}{\partial net_{z_1}}\frac{\partial net_{z_1}}{\partial y_1}\right]}\color{darkgreen}{\frac{\partial y_1}{\partial net_{y_1}}}\color{darkgray}{\frac{\partial net_{y_1}}{\partial w_{y_1x_1}}} =\color{darkorange}{-(t_1-z_1) \frac{\partial z_1}{\partial net_{z_1}}\frac{\partial net_{z_1}}{\partial y_1}}\color{darkgreen}{\frac{\partial y_1}{\partial net_{y_1}}}\color{darkgray}{\frac{\partial net_{y_1}}{\partial w_{y_1x_1}}} =\color{darkorange}{-(t_1-z_1) f^\prime(net_{z_1})w_{z_1y_1}^*}\color{darkgreen}{f^\prime(net_{y_1})}\color{darkgray}{x_1}=\color{darkorange}{-(t_1-z_1) (z_1 (1-z_1))w_{z_1y_1}^*}\color{darkgreen}{(y_1(1-y_1))}\color{darkgray}{x_1}=-(0.5-0.69)\times[0.69\times(1-0.69)]\times0.2723\times[0.68\times(1-0.68)]\times0.35=0.00084\)
類似可以計算 \(\frac{\partial J}{\partial BP}\), \(\frac{\partial J}{\partial AQ}\), \(\frac{\partial J}{\partial BQ}\)
調整權重
\(AP^* = AP-\frac{\partial J}{\partial AP} = 0.09916\)
\(BP^* = BP-\frac{\partial J}{\partial BP} = 0.7978\)
\(AQ^* = AQ-\frac{\partial J}{\partial AQ} = 0.3972\)
\(BQ^* = BQ-\frac{\partial J}{\partial BQ} = 0.5928\)
2 多樣本
批量梯度下降(BGD),對所有樣本進行處理, 得到全局最優解,樣本數很大時計算量很大。
目標函數為: \(J(w) = {1\over 2}\sum_\limits{所有樣本}\sum\limits_{k=1}^c (t_k-z_k)^2\)
隨機梯度下降(SGD)
只用其中一部分樣本,就有可能已經迭代到最優解了。SGD不是每次迭代都向着整體最優化方向,但是整體上是趨於整體最優化方向。
Mini-batch Gradient Descent(Mini-BGD), 在批量梯度下降和隨機梯度下降之間折衷。每次從所有數據中取一個子集(mini-batch)。 可以是退化成SGD,也可以是所有樣本BGD。
