如果你正在讀這篇文章,那么很可能你已經知道什么是神經網絡,什么是激活函數,但是,一些關于機器學習的入門課程并不能很清楚地說明,為什么我們需要這些激活函數。我們需要它們嗎?沒有它們,神經網絡還能工作嗎?
首先讓我們回顧一下關于神經網絡的一些事情。它們通常被可視化地表示為一個類似圖表的結構,如下圖所示:
如上圖所示,神經網絡有3層:輸入層、隱藏層、輸出層,共3、4、2個神經元。輸入層的節點數量與數據集的特性數量相同。對于隱藏層,您可以自由選擇需要多少節點,并且可以使用多個隱藏層。
網絡中的每個神經元,除了那些在輸入層的神經元,可以被認為是一個線性分類器,它將前一層神經元的所有輸出作為輸入,并計算這些輸出加上一個偏置項的加權和。然后,下一層的神經元將前一層線性分類器計算的值作為輸入,然后計算這些值的加權和,依此類推。我們希望,通過以這種方式結合線性分類器,我們可以構建更復雜的分類器,可以代表我們的數據中的非線性模式。
讓我們看看下面的例子數據集:
這個數據集不是線性可分的,我們不能將一個類從另一個通過一條線分開。但我們可以通過使用兩條線作為決策邊界來實現這種分離。
所以,我們可能認為兩個中間神經元可以完成這個工作。這兩個神經元將學習上圖中的兩條分離線。然后我們需要一個輸出神經元它將之前的兩個神經元作為輸入,這樣它就能正確地進行分類。
對于最后一個做正確分類的神經元,它需要n1和n2隱藏神經元的輸出是線性可分的,如果我們把它們畫在一個二維平面上。上面畫的兩條線有方程:
這意味著這兩個隱藏的神經元正在計算輸入x1和x2的如下線性組合:
我們畫出n1和n2看看它們是否有用。
我們對我們的小神經網絡感到失望。n1和n2的輸出仍然不是線性可分的,因此輸出神經元不能正確分類。那么,問題是什么呢?
問題是,任何線性函數的線性組合仍然是線性的,在一張紙上證明它是正確的并不難。這一事實的證據在本文的結尾。所以,不管我們用了多少層或多少神經元,按照我們目前的方式,我們的神經網絡仍然只是一個線性分類器。
我們需要更多的東西。我們需要將每個神經元計算出的加權和傳遞給一個非線性函數,然后將這個函數的輸出看作那個神經元的輸出。這些函數稱為激活函數,它們在允許神經網絡學習數據中的復雜模式時非常重要。
[1] 已經證明,具有2層(輸入層除外)和非線性激活函數的神經網絡,只要在這些層中有足夠多的神經元,就可以近似任何函數。那么,如果只有兩層就夠了,為什么人們現在還在使用更深層次的網絡呢?嗯,僅僅因為這兩層網絡"能夠"學習任何東西,這并不意味著它們很容易優化。在實踐中,如果我們的網絡產能過剩,他們就會給我們提供足夠好的解決方案,即使他們沒有盡可能地優化。
還有更多種類的激活函數,我們想在上面的示例中使用其中的兩種。它們分別是ReLU(直線單元)和tanh(雙曲正切),如下圖所示。
如果我們在示例中使用ReLU激活,將會發生什么?下圖是應用ReLU激活后n1和n2神經元的輸出。
現在,我們的這兩類點可以用直線分開,這樣輸出神經元就可以正確地對它們進行分類。
如果我們使用tanh激活,也會發生類似的事情,但這次我們的點之間的差距更大。
同樣,輸出神經元可以正確地分類這些點。
這里有一個簡單的數學證明,證明任何線性函數的線性組合仍然是線性的:
其中a0, a1,…,an是不依賴于輸入x1,…,xn的常數。
我希望這篇文章對你有用,謝謝閱讀!
參考
[1] Cybenko, G.V. (2006). "Approximation by Superpositions of a Sigmoidal function". In van Schuppen, Jan H. (ed.). Mathematics of Control, Signals, and Systems. Springer International. pp. 303–314.
作者:Dorian Lazar
deephub翻譯組