先來回想我們在Day 13 feature crosses提到的nonlinear problems,當時是用feature相乘(product)當成一個synthetic feature,如果是像下面更困難的分布,可能就沒辦法這麼簡單的解決了。
不用怕,還是可以的,只要有神經網路(Neural Networks)。
好,我們先把一個linear model畫成圖:
藍色是input feature,連接線是weight,綠色output則是input feature的加權總合。
看看這樣的idea能不能解決nonlinear的問題。
改變一下,在他們中間加上一層hidden layers
黃色的hidden layer是藍色的加權總合,綠色的則是黃色的加權總合。
很不幸的,這樣的model 還是linear。即使多加幾層hidden layer都一樣。
OK,我們在其中套上一個非線性轉換層,讓整個model可以有處理nonlinear的能力:
橘點是把下面的hidden layer做非線性轉換(一般不會畫出來),又稱做激勵函數Activation Function。非線性轉換後在當成上層hidden layer的input,接著讓output加權總和。這樣可以讓每一層透過raw input更有效的學習更複雜、更難的function。
sigmoid function
它所代表的是
rectified linear unit(ReLU)
比sigmoid做的運算簡單,就只是max(0, x)
,會比指數運算更有效率。
實務上,我們可以把任何數學函數視為activation function,會用一個σ
去代表我們的activation function,而該node可以視為:
TensorFlow也提供了很多activation function,但還是建議使用ReLU。
總結一下
最後叮嚀一下 一定要記得玩一下 Playground,去體會螺旋狀(Spiral)的data怎麼被train的。