動機(Motivation)
對於非線性分類問題,如果用多元線性回歸進行分類,需要構造許多高次項,導致特征特多學習參數過多,從而復雜度太高。
神經網絡(Neural Network)
一個簡單的神經網絡如下圖所示,每一個圓圈表示一個神經元,每個神經元接收上一層神經元的輸出作為其輸入,同時其輸出信號到下一層,其中每一層的第一個神經元稱為bias unit,它是額外加入的其值為1,通常用+1表示,下圖用虛線畫出。
符號說明:
- $a_i^{(j)}$表示第j層網絡的第i個神經元,例如下圖$a_1^{(2)}$就表示第二層的第一個神經元
- $\theta^{(j)}$表示從第$j$層到第$j+1$層的權重矩陣,例如下圖所有的$\theta^{(1)}$表示從第一層到第二層的權重矩陣
- $\theta^{(j)}_{uv}$表示從第j層的第v個神經元到第j+1層的第u個神經的權重,例如下圖中$\theta^{(1)}_{23}$表示從第一層的第3個神經元到第二層的第2個神經元的權重,需要注意到的是下標uv是指v->u的權重而不是u->v,下圖也給出了第一層到第二層的所有權重標注
- 一般地,如果第j層有$s_j$個神經元(不包括bias神經元),第j+1層有$s_{j+1}$個神經元(也不包括bias神經元),那么權重矩陣$\theta^{j}$的維度是$(s_{j+1}\times s_j+1)$
前向傳播(Forward Propagration, FP)
后一層的神經元的值根據前一層神經元的值的改變而改變,以上圖為例,第二層的神經元的更新方式為
$$a_1^{(2)} = g(\theta_{10}^{(1)}x_0 + \theta_{11}^{(1)}x_1 + \theta_{12}^{(1)}x_2 + \theta_{13}^{(1)}x_3)$$
$$a_2^{(2)} = g(\theta_{20}^{(1)}x_0 + \theta_{21}^{(1)}x_1 + \theta_{22}^{(1)}x_2 + \theta_{23}^{(1)}x_3)$$
$$a_3^{(2)} = g(\theta_{30}^{(1)}x_0 + \theta_{31}^{(1)}x_1 + \theta_{32}^{(1)}x_2 + \theta_{33}^{(1)}x_3)$$
$$a_4^{(2)} = g(\theta_{40}^{(1)}x_0 + \theta_{41}^{(1)}x_1 + \theta_{42}^{(1)}x_2 + \theta_{43}^{(1)}x_3)$$
其中g(z)為sigmoid函數,即$g(z)=\frac{1}{1+e^{-z}}$
1. 向量化實現(Vectorized Implementation)
如果我們以向量角度來看待上述的更新公式,定義
$a^{(1)}=x=\left[ \begin{matrix}x_0\\ x_1 \\ x_2 \\ x_3 \end{matrix} \right]$ $z^{(2)}=\left[ \begin{matrix}z_1^{(2)}\\ z_1^{(2)} \\ z_1^{(2)}\end{matrix} \right]$ $\theta^{(1)}=\left[\begin{matrix}\theta^{(1)}_{10}& \theta^{(1)}_{11}& \theta^{(1)}_{12}& \theta^{(1)}_{13}\\ \theta^{(1)}_{20}& \theta^{(1)}_{21}& \theta^{(1)}_{22}& \theta^{(1)}_{23}\\ \theta^{(1)}_{30}& \theta^{(1)}_{31}& \theta^{(1)}_{32} & \theta^{(1)}_{33}\end{matrix}\right]$
則更新公式可以簡化為
$$z^{(2)}=\theta^{(1)}a^{(1)}$$
$$a^{(2)}=g(z^{(2)})$$
$$z^{(3)}=\theta^{(2)}a^{(2)}$$
$$a^{(3)}=g(z^{(3)})=h_\theta(x)$$
可以看到,我們由第一層的值,計算第二層的值;由第二層的值,計算第三層的值,得到預測的輸出,計算的方式一層一層往前走的,這也是前向傳播的名稱由來。
2. 與Logistic回歸的聯系
考慮上圖沒有隱藏層的神經網絡,其中$x=\left[ \begin{matrix}x_0\\ x_1 \\ x_2 \\ x_3 \end{matrix} \right]$,$\theta=\left[ \begin{matrix}\theta_0& \theta_1& \theta_2 & \theta_3 \end{matrix} \right]$,則我們有$h_\theta(x)=a_1^{(2)}=g(z^{(1)})=g(\theta x)=g(x_0\theta_0+x_1\theta_1+x_2\theta_2+x_3\theta_3)$,可以看到這正是Logistic回歸的假設函數!!!這種關系表明Logistic是回歸是不含隱藏層的特殊神經網絡,神經網絡從某種程度上來說是對logistic回歸的推廣。
神經網絡示例
對於如下圖所示的線性不可分的分類問題,(0,0)(1,1)為一類(0,1)(1,0)為另一類,神經網絡可以解決(見5)。首先需要一些簡單的神經網絡(1-4),其中圖和真值表結合可以清楚的看出其功能,不再贅述。
1. 實現AND操作
2. 實現OR操作
3. 實現非操作
4. 實現NAND=((not x1) and (not x2))操作
5. 組合實現NXOR=NOT(x1 XOR x2) 操作
該神經網絡用到了之前的AND操作(用紅色表示)、NAND操作(用青色表示)和OR操作(用橙色表示),從真值表可以看出,該神經網絡成功地將(0, 0)(1,1)分為一類,(1,0)(0,1)分為一類,很好解決了線性不可分的問題。
神經網絡的代價函數(含正則項)
$$J(\Theta) = -\frac{1}{m}\left[\sum\limits_{i=1}^{m}\sum\limits_{k=1}^{K}y^{(i)}_{k}log(h_\theta(x^{(i)}))_k + (1-y^{(i)}_k)log(1-(h_\theta(x^{(i)}))_k)\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum\limits_{i=1}^{s_l}\sum\limits_{j=1}^{s_{l+1}}(\Theta_{ji}^{(l)})^2$$
符號說明:
- $m$ — 訓練example的數量
- $K$ — 最后一層(輸出層)的神經元的個數,也等於分類數(分$K$類,$K\geq 3$)
- $y_k^{(i)}$ — 第$i$個訓練exmaple的輸出(長度為$K$個向量)的第$k$個分量值
- $(h_\theta(x^{(i)}))_k$ — 對第$i$個example用神經網絡預測的輸出(長度為$K$的向量)的第$k$個分量值
- $L$ — 神經網絡總共的層數(包括輸入層和輸出層)
- $\Theta^{(l)}$ — 第$l$層到第$l+1$層的權重矩陣
- $s_l$ — 第$l$層神經元的個數, 注意$i$從1開始計數,bias神經元的權重不算在正則項內
- $s_{l+1}$ — 第$l+1$ 層神經元的個數
參考文獻
[1] Andrew Ng Coursera 公開課第四周
[2] Neural Networks. https://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/cs11/report.html
[3] The nature of code. http://natureofcode.com/book/chapter-10-neural-networks/
[4] A Basic Introduction To Neural Networks. http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html