激活函數通過計算加權和并加上偏置來確定神經元是否應該倍激活,它們將輸入信號轉換為輸出的可微運算。大多數激活函數都是非線性的,由于激活函數是深度學習的基礎,下面簡要介紹一些常見的激活函數。
1 RelU函數
最受歡迎的激活函數是修正線性單元,ReLU,因為它實現起來簡單,同時在各種高預測任務中表現良好。ReLU提供了一種非常簡單的非線性變化,給定元素x RelU函數倍定義為該元素與0中的最大值。
RelU(x) = max(x, 0);
通俗地說,RelU函數通過將相應的激活值設為0,僅僅保留正元素丟棄所有負元素。為了直觀感受一下,我們可以繪制出函數的曲線圖,正如從圖中所看到的,激活函數是分段呈線性的。
x = torch.arange(-8.0, 8.0, 0.1); requires_grad = true
y = torch.relu(x);
d2l.plot(x.detach(), y.detach(), 'x', 'relu(x)', figsize = (5, 2.5));
2 sigmoid激活函數
對于一個定義域在R上的輸入,sigmoid函數將輸入變換為區間(0,1) 上的輸出。因此,sigmoid 通常稱為擠壓函數,將范圍(-inf,inf)上的任意輸入壓縮到區間(0,1)上的某個值。
sigmoid(x) = 1/(1 + exp(-x))
sigmoid函數的導數是
d/dx sigmoid(x) = exp(-x) / (1 + exp(-x))^2 = sigmoid(x)(1 - sigmoid(x))
3 tanh函數
與sigmoid 函數類似,tanh(雙曲正切)函數也能將其輸入壓縮轉換到區間(-1,1)上,tanh函數如下
tanh(x) = 1 - exp(-2x) / 1 + exp(-2x)
下面我們繪制tanh函數的圖像,注意,當輸入在0附近時,tanh函數接近線性變換,函數的形狀類似于sigmoid函數,不同的是tanh函數關于坐標系原點中心對稱。
y = torch.tanh(x);
d2l.plot(x.detach(), t.detach(), 'x', 'tanh(x)', figsize = (5, 2.5));
tanh函數的導數是
d/dx tanh(x) = 1 - tanh^2(x)
tanh函數的導數的圖像如下所示,當輸入接近0時,tanh函數的導數接近最大值1,與我們在sigmoid函數的圖像中看到的類似,輸入在任一方向上越遠離0點,導數越接近0.