2017年12月22日 星期五

Python Deep Learning 深學筆記 - 戛火函數 (Activation function)



請共教育部閩南語常用辭典開--咧,隨時會當查。



為啥乜愛有戛火函數?

咱先複習進前 ê 神經元函數

y = 1 if (w1x1 + w2x2 ≦ θ)
y = 0 if (w1x1 + w2x2  > θ)

抑是伊个變化, 

y = 1 if (w1x1 + w2x2 - θ ≦ 0)  
y = 0 if (w1x1 + w2x2  - θ > 0 )

攏總是愛兩个分開 ê 函式才有法度表示. 按呢生佇數學, 理論, 抑是實作上有無四序 ê 所在. 咱敢會使 kā in 合合做一咧函式來表示都好? 這咧時陣, 就是戛火函式欲上台 ê 時機囉!

簡單講, 咱希望有一咧函式是:

a = w1x1 + w2x2 + b    (佇遮 θ= -b)
y = h(a)

佇遮, 咱愛先有一咧觀念: 戛火函式毋是干焦一个標準答案, 較早 ê 專家已經揣出幾落个, 咱佇遮先介紹三个.


戶橂函數 (Step function)


上直接 ê 寫法, h(x) 就是:

y = 0 if x < 0
y = 1 if x >= 0

佇遮, 咱先來利用 matplotlib 和 numpy kā 伊畫--出來, 請參考 step.py:

#!/usr/bin/python3
def step_function(x):
    return np.array( x > 0, dtype=np.int)

import numpy as np
import matplotlib.pylab as plt

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)    # siat-tīng y kuainn ê huān-uî
plt.show()

這个 step_function 其實就是 y = 1 if x > 0, y = 0 if x <= 0, 伊毋若處理一个數字, 閣會當處理 numpy ê 陣列. 這是使用 ê 奇巧, 逐个kā伊抾轉去用.

$ python3 step.py

你會看著:

Sigmoid (Sik-moo-i)函式

咱看著戶橂函式是無連紲(discontinous)函式, 因為uì x 是 0 到 x > 0, 直接 uì 0 跳到 1, 你揣無任何 x 會使予 y 變做 0.5, 0.9.
這个 Sigmoid (台羅: Sik-moo-i) 函式是相連紲 ê 函式:


{\displaystyle f(x)={\frac {1}{1+e^{-x}}}}

咱來 kā 伊畫出來較有感覺, 干焦 kā 進前戶橂函式中的 step_function 換掉就會用得, 這是 sigmoid.py:

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

運行 python3 sigmoid.py 你會看著:

Sik-moo-i 函式和戶橂函式上大ê無仝是: 伊是相連紲 (continuous) ê 函式. 佇實際使用, 相連紲 ê Sik-moo-i 較有路用. 這是因為大自然本底就是相連紲--ê.

ReLU (Lé-lù) 函數

ReLU (台羅: Lé-lù), 是最近較衝, 較定定用个. 

h(x) = 0 if x <= 0
h(x) = x if x > 0

伊个特色是 x > 0 是線性--ê. 伊个 python 函式寫法是: (relu.py)

def relu(x):
    return np.maximum(0, x)

看來真簡單, 著毋? 這是愛有一點仔數學 ê 技巧, 知影 Lé-lù 其實就是 h(x) = x, 閣一點仔程式設計 ê 經驗, 這是愛加寫, 加看高手寫个程式, 學伊的手路, 加思考, 才有法度佇咧一兩逝 ê 程式, 予人感覺輕輕鬆鬆問題就解決--阿!

這是伊畫出來 ê 圖:



沒有留言:

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...