1. 程式人生 > 實用技巧 >莫煩tensorflow學習記錄 (2)激勵函式Activation Function

莫煩tensorflow學習記錄 (2)激勵函式Activation Function

https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-activation-function/

  這裡的 AF 就是指的激勵函式. 激勵函式拿出自己最擅長的”掰彎利器”, 套在了原函式上 用力一扭, 原來的 Wx 結果就被扭彎了.

  其實這個 AF, 就是一個非線性函式. 比如說relu, sigmoid, tanh. 巢狀在原有的結果之上, 強行把原有的線性結果給扭曲了. 使得輸出結果 y 也有了非線性的特徵.

  可以創造自己的激勵函式來處理自己的問題,只要激勵函式是可以微分的, 因為在 backpropagation 誤差反向傳遞的時候, 只有這些可微分的激勵函式才能把誤差傳遞回去.

  想要恰當使用這些激勵函式, 還是有竅門的. 比如當你的神經網路層只有兩三層, 不是很多的時候, 對於隱藏層, 使用任意的激勵函式, 隨便掰彎是可以的, 不會有特別大的影響. 不過, 當你使用特別多層的神經網路, 在掰彎的時候, 往往不得隨意選擇利器. 因為這會涉及到梯度爆炸, 梯度消失的問題.

  在具體的例子中, 我們預設首選的激勵函式是哪些. 在少量層結構中, 我們可以嘗試很多種不同的激勵函式. 在卷積神經網路的卷積層中, 推薦的激勵函式是 relu. 在迴圈神經網路中推薦的是 tanh 或者是 relu。

常用激勵函式

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


def sigmoid_grad(x): return (1.0 - sigmoid(x)) * sigmoid(x) def relu(x): return np.maximum(0, x) def relu_grad(x): grad = np.zeros(x) grad[x>=0] = 1 return grad def softmax(x): if x.ndim == 2: x = x.T x = x - np.max(x, axis=0) y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T x = x - np.max(x) # 溢位對策 return np.exp(x) / np.sum(np.exp(x))