人工神經網絡由一系列神經元組成:
每個神經元都代表了一個特定的線性函數:
每個單元都會進行以下的計算過程:
ini = ΣWj,iaj
ai = g(ini)
通過調整每一個神經元的權值W,可以使得整個神經網絡非常好的擬合數據。
激活函數
每個神經元中都有一個激活函數,通常使用Sigmoid函數:
f(x) = 1/(1+e -x)
dy/dx = y(1-y)
因為它在定義域內光滑且連續,輸出十分平緩。
訓練過程
function ANN(examples) returns a neural network
network = a network with random weights
repeat do
for each example in examples do
FeedForward(network, example)
BackPropagation(network, example)
error = CalError(network, examples)
until error is small enough
return network
可以看到訓練過程包括兩個主要步驟:
- 前向傳播(Feed Forward):將樣例輸入神經網絡中獲得每個神經元的輸出;
- 后向反饋(Back Propagation):根據每個神經元的輸出調整權值。
前向傳播
在前向傳播過程中,我們將輸入經過兩層神經元后獲得每一個神經元的輸出,每一層都執行以下計算:
ini = ΣWj,iaj
ai = g(ini)
function FeedForward(network, example) return a output vector
for L = 2 to layer_num do
for each node i in layer L do:
sum = weight_L_i × a_L-1 // dot product
a_L_i = g(sum)
后向反饋
在后向反饋中,我們根據輸出結果與正確結果相比較后,對各個神經元的權值進行修正。
function BackPropagation(network, example)
for each node j in the output layer do
b_j = g'(a_j)*(rightanswer_j-a_j)
for L = layer_num-1 to 1 do
for each node i in layer L do
b_i = g'(a_i)*(w × b_j)
for each weight w_i,j in network do
w_i,j = w_i, j + alpha*ai*b_j // alpha 為學習率