1. 程式人生 > >人工神經網路之啟用函式 -tanh函式

人工神經網路之啟用函式 -tanh函式

tanh函式
tanh(x)=e2x1e2x+1tanh(x)=1tanh(x)2

證明

tanh(x)x=(12e2x+1)=22e2x(e2x+1)2=4e2x(e2x+1)2=(e2x+1)2(e2x1)2(e2x+1)2=1(e2x1e2x+1)2=1tanh(x)2(10)(11)(12)(13)(14)(15)

神經網路啟用函式及導數


1、Sigmoid函式

     Sigmoid 是使用範圍最廣的一類啟用函式,具有指數函式形狀 。正式定義為:

技術分享

程式碼:

x=-10:0.001:10; 
%sigmoid和它的導數
sigmoid=1./(1+exp(-x));
sigmoidDer=exp(-x)./((1+exp(-x)).^2);
figure;
plot(x,sigmoid,‘r‘,x,sigmoidDer,‘b--‘);
axis([-10 10 -1 1]);
grid on;
title(‘Sigmoid函式(實線)及其導數(虛線)‘);
legend(‘Sigmoid原函式‘,‘Sigmid導數‘);
set(gcf,‘NumberTitle‘,‘off‘);
set(gcf,‘Name‘,‘Sigmoid函式(實線)及其導數(虛線)‘);

輸出:

技術分享

   可見,sigmoid 在定義域內處處可導,且兩側導數逐漸趨近於0,即:

技術分享

    Bengio 教授等將具有這類性質的啟用函式定義為軟飽和啟用函式。與極限的定義類似,飽和也分為左側軟飽和與右側軟飽和:

左側軟飽和:

技術分享

右側軟飽和:

技術分享

    與軟飽和相對的是硬飽和啟用函式,即:f‘(x)=0,當 |x| > c,其中 c 為常數。

    同理,硬飽和也分為左側硬飽和和右側硬飽和。常見的ReLU 就是一類左側硬飽和啟用函式。

Sigmoid 的軟飽和性,使得深度神經網路在二三十年裡一直難以有效的訓練,是阻礙神經網路發展的重要原因。具體來說,由於在後向傳遞過程中,sigmoid向下傳導的梯度包含了一個f‘(x) 因子(sigmoid關於輸入的導數),因此一旦輸入落入飽和區,f‘(x) 就會變得接近於0,導致了向底層傳遞的梯度也變得非常小。此時,網路引數很難得到有效訓練。這種現象被稱為梯度消失。一般來說, sigmoid 網路在 5 層之內就會產生梯度消失現象[Understanding the difficulty of training deep feedforward neural networks]。梯度消失問題至今仍然存在,但被新的優化方法有效緩解了,例如DBN中的分層預訓練,Batch Normalization的逐層歸一化,Xavier和MSRA權重初始化等代表性技術。

    Sigmoid 的飽和性雖然會導致梯度消失,但也有其有利的一面。例如它在物理意義上最為接近生物神經元。(0, 1) 的輸出還可以被表示作概率,或用於輸入的歸一化,代表性的如Sigmoid交叉熵損失函式

程式碼:

x=-10:0.001:10;
tanh=(exp(x)-exp(-x))./(exp(x)+exp(-x));
tanhDer=1-tanh.^2;
figure;
plot(x,tanh,‘r‘,x,tanhDer,‘b--‘);
grid on;
title(‘tanh函式(實線)及其導數(虛線)‘);
legend(‘tanh原函式‘,‘tanh導數‘);
set(gcf,‘NumberTitle‘,‘off‘);
set(gcf,‘Name‘,‘tanh函式(實線)及其導數(虛線)‘);

輸出:

技術分享

    tanh也具有軟飽和性。[Backpropagation applied to handwritten zip code recognition]中提到tanh網路的收斂速度要比sigmoid快。因為tanh的輸出均值比sigmoid更接近0,SGD會更接近 natural gradient[Natural gradient works efficiently in learning](一種二次優化技術),從而降低所需的迭代次數。