code

2017年3月29日 星期三

AI筆記38 - Neural Networks

Perceptron複習一下



perceptron是最簡單的NN,每個sample i的每個feature被weighted and summed,最後經過step function來classify,至於weights要怎麼獲得才是重點。

training過程就是iteratively調整weighted sum function形成的hyperplane,直到找到一個最小錯誤者。不過perceptron只能對linear separable data做分類,他只能產出linear separator


Enhance Perceptron: using a Sigmoid function

perceptron只能對linear separable data運作,要升級的話(可以找出nonlinear separator的話),嘗試把step function換掉。因為step function不可微分,所以不能用gradient descent的方法去找。如果把perceptron的step function換成sigmoid function:

所以我們的升級版perceptron: (sigmoid function在perceptron又稱為activation function)



Multilayer Perceptrons

sigmoid function在z -> 10 和 z -> -10 的時候就已經趨近1 或 0:


所以我們可以用這個數學特性,來看我們的perceptron怎麼做兩個feature的logical OR:


首先可以看到我們要產生相對應的truth table,藉由上述的sigmoid的趨近1和0的特性,只要能兜出上面這個truth table就完成了x1和x2 feature的logical OR:


所以我們可以w0 = -10, w1 = 20, w2 = 20,這是一組解。所以g(z) =


利用上述的觀念,也可以做出NAND, AND:



再來就是要真正做multilayer perceptron,因為XOR必須要靠上面這三個elementary perceptron來形成更複雜的功能,用truth table可以確認XOR 等同於 最右邊這欄compound propositions:

這形成一個MLP:


組合成一個output layer,公式就是把上一個layer的output丟進來:




Backpropagation Algorithm

這種multilayer的NN要怎麼把每一layer中的weights找出最佳解來? 有一種方法叫做backward propagation of errors,利用gradient descent來minimize squared prediction error。

注意我們這邊討論的NN結構都是沒有loop的,也就是上一層的layer不會接受下一層的layer當作input,這樣的單向input結構稱為 feedfoward NN

所以名詞不要搞混了,餵食input單向,所以稱為feedfoward。在output layer得到了某個prediction,當然不可能100%正確,跟training sample的ground truth y比較過後,把錯誤的量逆向propagate回去,讓每個layer都能修正其錯誤(learn weights),稱為backpropagation of errors:


注意output layer的neuron可能有多個! 例如做k-classification。

所以error可以計算如下
中文是input sample e 且有 weights w 的 NN,造成的total error E = 1/2 * (所有k個output neurons的output Ok與true label yk的平方差),1/2是為了之後計算好算:

這邊搞不懂的是為什麼會有Yk? 不是只有一個y? 我應該沒搞清楚某些東西。

好吧 anyway @@...
有了這個total error的定義,接下來要做gradient descent來minimize error:

wij是兩個前後相連的layer i  和 layer j 之間的weight,delta wij意即我們要descent的量,等於是一個learning rate alpha 乘上 某個偏微分,這邊因為不太懂,先不做解釋,之後有遇到再說吧。

總之就是以下這個圖說明了multilayer perceptron的運作方式:




沒有留言:

張貼留言