[筆記] 機器學習 神經網路 ( 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 上的預測計算函式 ( 多層神經網路 )