htfhxx吳恩達深度學習與神經網路學習第三周(3)
來自專欄 htfhxx學習筆記分享
第三周:淺層神經網路(Shallow neural networks)
3.6 激活函數(Activation functions)
這節主要是講幾個激活函數,特徵,用途。
如下圖,提到了這四個激活函數,視頻中提到一堆,我覺得具有高等數學基礎的應該能直觀的通過函數圖像看到這些激活函數的特徵。
Sigmoid和relu的區別(為什麼神經網路用relu多):
- sigmoid函數和tanh函數兩者共同的缺點是,在z特別大或者特別小的情況下,導數的梯度或者函數的斜率會變得特別小,最後就會接近於0,導致降低梯度下降的速度。
- 在z的區間變動很大的情況下,relu激活函數的導數或者激活函數的斜率都會遠大於0,在程序實現就是一個if-else語句,而sigmoid函數需要進行浮點四則運算,在實踐中,使用ReLu激活函數神經網路通常會比使用sigmoid或者tanh激活函數學習的更快。
- sigmoid和tanh函數的導數在正負飽和區的梯度都會接近於0,這會造成梯度彌散,而Relu和Leaky ReLu函數大於0部分都為常數,不會產生梯度彌散現象。
直接放總結的內容:
sigmoid激活函數:除了輸出層是一個二分類問題基本不會用它。
tanh激活函數:tanh是非常優秀的,幾乎適合所有場合。
ReLu激活函數:最常用的默認函數,,如果不確定用哪個激活函數,就使用
通常的建議是:如果不確定哪一個激活函數效果更好,可以把它們都試試,然後在驗證集或者發展集上進行評價。然後看哪一種表現的更好,就去使用它。
3.7 為什麼需要非線性激活函數?(why need a nonlinear activation function?)
為什麼要有激活函數,為什麼激活函數不是y=x. 事實證明:要讓你的神經網路能夠計算出有趣的函數,你必須使用非線性激活函數
這是神經網路正向傳播的方程,現在我們去掉函數g,然後令a^[1]=z^[1], 或者我們也可以令g(z)=z,這個有時被叫做線性激活函數(更學術點的名字是恆等激勵函數,因為它們就是把輸入值輸出)。那麼這個模型的輸出y或僅僅只是輸入特徵x的線性組合。
將下列(1)式帶入(2)
得到:
拆分並簡化多項式
即如果你是用線性激活函數或者叫恆等激勵函數,那麼神經網路只是把輸入線性組合再輸出。
事實證明,如果你使用線性激活函數或者沒有使用一個激活函數,那麼無論你的神經網路有多少層一直在做的只是計算線性函數,所以不如直接去掉全部隱藏層。
事實證明如果你在隱藏層用線性激活函數,在輸出層用sigmoid函數,那麼這個模型的複雜度和沒有任何隱藏層的標準Logistic回歸是一樣的
只有一個地方可以使用線性激活函數,就是你在做機器學習中的回歸問題。
總而言之,不能在隱藏層用線性激活函數,可以用ReLU或者tanh或者leaky ReLU或者其他的非線性激活函數,唯一可以用線性激活函數的通常就是輸出層
3.8 激活函數的導數(Derivatives of activation functions)
這部分是上面的激活函數的求導
直接放結果好了:
推薦閱讀:
TAG:深度學習DeepLearning | 機器學習 | 吳恩達AndrewNg |