machine learning 之 Neural Network 1
整理自Andrew Ng的machine learning課程week 4.
目錄:
- 為什麽要用神經網絡
- 神經網絡的模型表示 1
- 神經網絡的模型表示 2
- 實例1
- 實例2
- 多分類問題
1、為什麽要用神經網絡
當我們有大量的features時:如$x_1, x_2,x_3.......x_{100}$
假設我們現在使用一個非線性的模型,多項式最高次為2次,那麽對於非線性分類問題而言,如果使用邏輯回歸的話:
$g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x_1^2x_2+........)$
大約有5000($\frac{n^2}{2}$)個特征,也就是說O(n2
這樣多的特征帶來的後果是:1.過擬合的可能性增大 2.計算的耗費很大
舉個更加極端的例子,在圖像問題中,每一個像素就相當於一個特征,僅對於一個50*50(已經是非常小的圖片了)的圖像而言,如果是灰度圖像,就有2500個特征了,RGB圖像則有7500個特征,對於每個特征還有255個取值;
對於這樣的一個圖像而言,如果用二次特征的話,就有大概3百萬個特征了,如果這時候還用邏輯回歸的話,計算的耗費就相當的大了
這個時候我們就需要用到neural network了。
2、神經網絡的模型表示1
神經網絡的基本結構如下圖所示:
$x_0, x_1,x_2,x_3$是輸入單元,$x_0$又被稱為bias unit,你可以把bias unit都設置為1;
$\theta$是權重(或者直接說參數),連接輸入和輸出的權重參數;
$h_\theta(x)$是輸出的結果;
對於以下的網絡結構,我們有以下定義和計算公式:
$a_i^{(j)}$:在第j層的第i個單元的activation(就是這個單元的值),中間層我們稱之為hidden layers
$s_j$:第j層的單元數目
$\Theta^{(j)}$:權重矩陣,控制了從第j層到第j+1層的映射關系,$\Theta^{(j)}$的維度為$s_{j+1}*(s_j+1)$
對於$a^{(2)}$的計算公式為:
$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)$
那麽同理,
$h_\Theta(x)=a_1^{(3)}=g(\theta_{10}^{(2)}a_0^{(2)}+\theta_{11}^{(2)}a_1^{(2)}+\theta_{12}^{(2)}a_2^{(2)}+\theta_{13}^{(2)}a_3^{(2)})$
3、神經網絡模型表示2
forward propagation: vectorized implementation
對以上的公式的向量化表示:
$z_1^{(2)}=\theta_{10}^{(1)}x_0+\theta_{11}^{(1)}x_1+\theta_{12}^{(1)}x_2+\theta_{13}^{(1)x_3}$
$a_1^{(2)}=g(z_1^{(2)})$
寫成向量即為:
$ a^{(1)}=x= \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \end{bmatrix} $ $ z^{(2)}=\begin{bmatrix} z^{(2)}_1 \\ z^{(2)}_1 \\ z^{(2)}_1 \end{bmatrix} $ $\Theta^{(1)}= \begin{bmatrix} \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{bmatrix}$
因此:
$z^{(2)}=\Theta^{(1)}a^{(1)}$
$a^{(2)}=g(z^{(2)})$
加上$a^{(2)}_0=1$:
$z^{(3)}=\Theta^{(2)}a^{(2)}$
$a^{(3)}=h_\Theta(x)=g(z^{(3)})$
以上即為向量化的表達方式。
對於每個$a^{(j)}$都會學習到不同的特征
4、實例1
先來看一個分類問題,XOR/XNOR,對於$x_1,x_2 \in {0,1}$,當x1和x2不同(0,1或者1,0)時,y為1,相同時y為0;y=x1 xnor n2
對於一個簡單的分類問題 AND:
可以用如下的神經網絡結構得到正確的分類結果
同樣的,對於OR,我們可以設計出以下的網絡,也可以得到正確的結果
5、實例2
接著上面的例子,對於 NOT,以下網絡結構可以進行分類:
我們回到示例中最初提到的問題:XNOR
當我們組合上述簡單例子(AND、OR、NOT)時,就可以得到解決XNOR問題的正確的網絡結構:
6、多分類問題
在neural network中的多分類問題的解決,也是用的one vs all的思想,在二分類問題中,我們是輸出不是0就是1,而在多分類問題中,輸出的結果是一個one hot向量,$h_\Theta(x) \in R^k$,k代表類別數目
比如說對於一個4類問題,輸出可能為:
類別1:$\begin{bmatrix} 0 \\ 0 \\ 0 \\ 1 \end{bmatrix}$, 類別2:$\begin{bmatrix} 0 \\ 0 \\ 1 \\ 0 \end{bmatrix}$, 類別3:$\begin{bmatrix} 0 \\ 1 \\ 0 \\ 0 \end{bmatrix}$ , 等等
你不可以把$h_\Theta(x)$輸出為1,2,3,4
machine learning 之 Neural Network 1