close

image

Tensorflow 和 Pytroch 目前是大家在寫人工智慧時會使用的兩大方法,

他們的出現讓大家不用再辛苦地把人工智慧的數學式給逐碼coding 出來,大大降低使用的門檻。

上圖所示的就是使用 tensorflow的語法操作 forward propagation 時的呈現方法,

首先 (數字1) 定義整個類神經網路的運作架構之後,

接下來(數字2) 就是編輯一些細節, tensorflow內建有很多 loss function 讓我們可以直接打出來,

而不是還得打出該 loss function 的方程式,

最後 (數字3) 在fit model 時用簡單的 model.fit 再加上要跑的 epoch 數量就好了,不用寫一個 for loop。

 

接下來就來go through tensorflow 寫model 的細節,下面這個投影片是先整體性的介紹。

image

首先,要先定義出模型的input 和 ouput 該怎麼連結起來,

比方說,到底是用 sigmoid function,還是要使用 ReLU function,投影片展示的是 sigmoid function,

在把權重和 input 做內積再加上 bias 之後,還要在丟入 sigmiod function 中做轉換,

因此就會形成 z=np.dot(w,x+b) 用來做內積,以及 f_x = 1/(1+np.exp(-z)) 把z 給丟進sigmoid 作轉換的程式。

接下來,模型的架構,例如要使用幾層隱藏層、幾個神經元、用什麼活化函數等等,也都是在這裡定義出來,

就如同下面所示,用幾個神經元 (units=...)和要用什麼function (activation=...) 都清清楚楚。

image

 

接下來,把用來算出 output 的方式程給寫好之後,

就要來省視這個方程式算出來的結果是否正確,如果不正確的話就要修正方程式的係數,

因此要定義 loss function 來計算每一個sample 的計算誤差,再定義 cost function 來計算整體的平均誤差,

投影片展示的是 sigmoid function (分類問題) 會使用的 cross entropy loss function,

由於這種常見的loss function 都已經被內建,因此不需要把方程式給打出來,直接打名稱就好,

如果要使用 linear regression常用的MSE 或 MAE 等等,也都是一樣的作法。

image

 

最後,就要開始訓練模型以降低模型預測的誤差,

因此我們要使用 gradient descent 的手法,找到一個新的 weighting 和 bias 值是可以讓 loss 算出來會更低的,

在 tensorflow 中就是用一個model.fit 的函式,同時定義 epoch 的數量,epoch 指的是gradient descent 要走幾步。

image

 

接下來介紹常用的activation function,

到目前為止吳恩達的類神經網路課程大多在談二元分類,因此 activation function 是使用 sigmoid function,

但是如果今天要預測的對象的值域並不會被限制在0到1之間,而是一個大於0的數字,

這時就要使用一個新的,也就是下面最右邊的 rectified linear unit,簡稱 ReLU,

它的特性是input 小於零時output 都會是0,但是若input 大於0時 output 就會是大於0的數字。

總而言之,要使用哪一種activation function ,基本上就是看預測對象的數值範圍而定。

image

事實上,ReLU function 已經是最常拿來使用的activation function,

原因是它的方程式相對單純,運算的速度就比較快,

因為它不像sigmoid function 在兩端有趨於收歛 (平穩)的區域,因此gradient descent 的速度也會比較快,

模型會更容易訓練、更快收歛、需要的資料量會比較少等等。

結論而言,吳恩達老師推薦大家可以在hidden layer 使用ReLU,在output layer 再使用sigmoid 就好了。

image

image

最後,為何一定要在類神經網路中使用非線性的activation function呢?

原因在於,之所以要使用類神經網路這種複雜的結構,就是為了要解決一般線性迴歸沒辦法處理的複雜問題,

如果只要單純使用 linear 的函式在hidden layer裡,其實效果就跟一般的線性迴歸差不多,

這樣就顯示不出neural network強大的性能,牛刀小試了。

另外,使用數學型式上相對複雜的非線性的acitvation function,

會讓我們擁有更多的參數可以調整,以致於我們有更大的彈性可以去擬合出各種不同的方程式,

效果自然而然會更加強大。

arrow
arrow

    William.Echoes 發表在 痞客邦 留言(0) 人氣()