神經網絡(Neural Network)
是一種十分強大的機器學習算法。神經網絡的模型相似腦細胞傳遞神經信號的方式。下面是單個腦細胞的示意圖:算法
一個腦細胞經過多個樹突接收某種電信號,而後經過軸突將信號傳遞給下一個腦細胞。大量的腦細胞彼此相連就會造成一個極其龐大的網絡。神經網絡算法正是模擬了腦細胞傳播電信號的過程。網絡
下面是經過課程做業,實現的一個手寫體數字識別的機器學習例子。採用的是神經網絡算法實現的多元分類問題。在這個例子中,咱們試圖將一張點陣圖識別成0-9的數字,所以,該分類問題的分類結果總共有10類,輸入則是每一張20x20
的點陣圖像素組成的向量。機器學習
讓咱們來看看如何表示神經網絡的假設函數。能夠把單個神經元當作是一個接收輸入信號,通過必定的「激勵」後,輸出信號的單元。在咱們的模型中,輸入就比如特徵向量x1⋯xn
,輸出則是假設函數的值。針對輸入向量,咱們會增長一個x0
項,稱爲誤差單元(bias unit)
,而且老是爲1。使用神經網絡解決分類問題時,咱們使用g
函數$ \frac{1}{1 + e^{-\theta^Tx}} $來做爲激勵函數。特徵向量在輸入神經元前,會有一個表示不一樣特徵權重
的向量做用於輸入向量,也就是說特徵向量在輸入前會通過θ
向量進行弱化或強化。函數
輸入節點也稱爲輸入層
,輸出節點也稱爲輸出層
。只有輸入層
和輸出層
的神經網路其實跟邏輯迴歸模型沒有區別。咱們能夠在輸入層和輸出層以前增長若干隱藏層
,隱藏層中的單元也叫激勵單元(activation units)
。學習
j
層向第j+1
層傳播時的權重矩陣每一個激勵值的計算方法以下:測試
$$ \begin{align*} a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3) \newline a_2^{(2)} = g(\Theta_{20}^{(1)}x_0 + \Theta_{21}^{(1)}x_1 + \Theta_{22}^{(1)}x_2 + \Theta_{23}^{(1)}x_3) \newline a_3^{(2)} = g(\Theta_{30}^{(1)}x_0 + \Theta_{31}^{(1)}x_1 + \Theta_{32}^{(1)}x_2 + \Theta_{33}^{(1)}x_3) \newline 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)}) \newline \end{align*} $$spa
上式描述的是,用一個3x4的矩陣$ Θ^{(1)} $乘以輸入向量,獲得激勵節點。最終的輸出是激勵節點通過另外一個1x4矩陣$ Θ^{(2)} $後獲得的。不可貴出以下結論:3d
若是第j層有$ s_j $個單元,第j+1層有$ s_{j+1} $個單元,那麼$ Θ^{(j)} $的階數爲$ s_{j+1} × (s_j + 1) $。+1
源自於每一層的誤差單元(bias unit)
。code
爲了更好的理解上述模型,下面經過神經網絡算法來訓練模型進行邏輯運算。首先先實現一個邏輯或運算$ x_1 $ OR $ x_2 $:blog
如上圖,咱們經過一個簡單的2層神經網絡實現了一個OR邏輯門
。設置$ \Theta_{1} $爲:
$$ \Theta_{1}=\begin{bmatrix}-10 \space 20 \space 20\end{bmatrix} $$
記得咱們的g
函數$ \frac{1}{1 + e^{-\theta^Tx}} $,咱們能夠獲得右邊的真值表。所以,對於這個神經網絡,上述$ \Theta_{1} $就是模型須要習得的參數。
對於這個問題彷佛使用普通的邏輯迴歸也能解決,那是由於對於邏輯或而言,仍然屬於線性問題。可是下面咱們要計算的同或
運算,就是非線性問題了:
咱們能夠把同或
運算寫成以下形式:
$$ (x_1 \space AND \space x_2) \space OR \space ((NOT x_1) \space AND \space (NOT \space x_2)) $$
經過組合,咱們能夠獲得下面的神經網絡:
這是個3層神經網絡,有一個輸入層,一個隱藏層(2個激勵節點),一個輸出層:
$$ \Theta_{1}=\begin{bmatrix}-30\space20\space20\newline -10\space-20\space-20\end{bmatrix} \Theta_{2}=\begin{bmatrix}-10\space20\space20 \end{bmatrix} $$
上述邏輯運算的例子最後獲得的是一個值(即0或1)。不少實際的問題須要咱們解決多元分類問題。其實咱們只要讓神經網絡輸出層包含多個節點便可,例如將一個張圖的像素輸入,預測圖片是什麼: