[筆記] 機器學習 神經網路 ( Neural Network ) - 表層結構
為什麼使用神經網路
- 在特徵量多的情況下,在非線性回歸算法裡,會產生很多的特徵項,這並不是一個解決複雜非線性問題的好辦法
 假設我們要分類 50 * 50 像素的灰階圖片 :
- 此特徵量 n = 2500 ( RBG 的話就是 n = 7500 )
 - 那麼 
xᵢ * xⱼ的所有條件就有 2500 * 2500 / 2 ≈ 300 萬 - 這樣的計算成本太高了
 
而神經網路是個能輕鬆解決非線性問題的算法
- 神經網路最初產生的目的是模擬人類的大腦,早期不盛行的原因是,當時硬體無法支撐如此龐大的運算
 
神經網路模型的運作
神經網路的模型

- 在前面輸入特徵 x₀ ~ xₙ
 - x₀ 是一個偏置單元 ( bias unit ),始終為 1
 - 最後的輸出則是我們假設函數的結果
 - 在神經網路中最基本我們使用跟分類中相同的邏輯函數 
,有時會稱為激勵函數 ( sigmoid activation function ),之後也會有其他種的函數,例如 : TanH、ReLU - theta 有時也被稱為權重 ( weights )
 

- Layer 1 為 input layer
 - Layer 2 為 hidden layer,在 input layer 和 output layer 之間的都是
 - Layer 3 為 output layer
 
aᵢ⁽ʲ⁾ 為在 Layer j 中的 activation unit iΘ⁽ʲ⁾ 為控制 Layer j 到 Layer j + 1 的權重矩陣

Θ⁽ʲ⁾的維度 ( dimension ) 為 sⱼ₊₁ * (sⱼ + 1)- sⱼ 為在 Layer j 中的 unit 個數
 
神經網路的計算過程

- 假設 
x = a⁽¹⁾ a⁽ʲ⁾ = g(z⁽ʲ⁾),例如 :a⁽²⁾ = g(z⁽²⁾)z⁽ʲ⁾ = Θ⁽ʲ⁻¹⁾a⁽ʲ⁻¹⁾,例如 :z⁽²⁾ = Θ⁽¹⁾a⁽¹⁾hΘ(x) = a⁽ʲ⁾ = g(z⁽ʲ⁾),此 Layer j 為 output layer
神經網路的應用
運算 OR

hΘ(x) = g(-10 + 20x₁ + 20x₂)
- x₁ = 0 and x₂ = 0 then g(−10) ≈ 0
 - x₁ = 0 and x₂ = 1 then g(10) ≈ 1
 - x₁ = 1 and x₂ = 0 then g(10) ≈ 1
 - x₁ = 1 and x₂ = 1 then g(30) ≈ 1
 
- g() 為邏輯函數 ( sigmoid function )
 
進階運算 XNOR
- AND : 
Θ⁽¹⁾ = [-30 20 20] - NOR : 
Θ⁽¹⁾ = [10 -20 -20] - OR : 
Θ⁽¹⁾ = [-10 20 20] 
將三個結合後 :

a⁽²⁾ = g(Θ⁽¹⁾x)a⁽³⁾ = g(Θ⁽²⁾a⁽²⁾)hΘ(x) = a⁽³⁾
多類別分類運算
- 在多類別分類時,並不是 
y = 1、y = 2、y = 3、y = 4…這樣分類 - 而是有多個輸出來個別表示是否為此分類
 

- 假設這次有 4 種分類,那輸出的所有種類如上
 

- 神經網路的模型可以這樣設置
 
1  | function [all_theta] = oneVsAll(X, y, num_labels, lambda)  | 
- 在 Octave 上的多類別分類器函式
 
1  | function p = predictOneVsAll(all_theta, X)  | 
- 在 Octave 上的預測計算函式
 
1  | function p = predict(Theta1, Theta2, X)  | 
- 在 Octave 上的預測計算函式 ( 多層神經網路 )
 



