簡體   English   中英

為什么 ReLU function 在 CNN 的每一層之后?

[英]Why ReLU function after every layer in CNN?

我正在介紹 Duke 提供的 Coursera 上的 ML,如果您對 ML 感興趣,我推薦它。 本課程的講師解釋說“我們通常在神經網絡的層之間包含非線性。這樣做有很多原因。首先,如果它們之間沒有任何非線性,連續的線性變換(完全連接的層)會折疊成一個單一的線性變換,這意味着 model 並不比單層更具表現力。另一方面,中間非線性可防止這種崩潰,從而使神經網絡能夠逼近更復雜的函數。” 我很好奇,如果我應用 ReLU,我們是否會丟失信息,因為 ReLU 會將每個負值都轉換為 0? 那么這個變換如何比沒有 ReLU 的變換更具表現力呢?

在多層感知器中,我嘗試在沒有 ReLU 轉換的情況下在 MNIST 數據集上運行 MLP,並且性能似乎沒有太大變化(使用 ReLU 為 92%,沒有 ReLU 為 90%)。 但是,我仍然很好奇為什么這種轉變為我們提供了更多信息而不是丟失信息。

第一點是,如果沒有非線性,例如 ReLU function,在神經網絡中,網絡僅限於執行輸入的線性組合。 換句話說,.network只能學習輸入和output之間的線性關系。這意味着.network不能逼近非線性的復雜函數,例如多項式或非線性方程。

考慮一個簡單的示例,其中任務是根據坐標 (x, y) 將 2D 數據點分類為屬於兩個類之一。 線性分類器,例如單層感知器,只能繪制一條直線來分隔兩個類。 但是,如果數據點不是線性可分的,線性分類器將無法准確地對它們進行分類。 非線性分類器,例如具有非線性激活的多層感知器 function,可以繪制彎曲的決策邊界並更准確地分離兩個類。

ReLU function 通過引入非線性增加了 neural.network 的復雜性,這使得 .network 可以學習更復雜的數據表示。 ReLU function 定義為 f(x) = max(0, x),它將所有負值設置為零。 通過將所有負值設置為零,ReLU function 在.network 中創建了多個線性區域,這使得.network 可以表示更復雜的函數。

例如,假設您有一個包含兩層的神經網絡,其中第一層具有線性激活 function,第二層具有 ReLU 激活 function。第一層只能對輸入執行線性變換,而第二層可以進行非線性變換。 通過在第二層中使用非線性 function,網絡可以學習更復雜的數據表示。

在您的實驗中,當您刪除 ReLU function 時,性能沒有太大變化是正常的,因為您嘗試解決的數據集和問題可能不夠復雜,不需要 ReLU function。換句話說,一個線性 model 可能足以解決該問題,但對於更復雜的問題,ReLU 可能是實現良好性能的關鍵組件。

還需要注意的是,ReLU 並不是唯一引入非線性的 function,也可以使用其他非線性激活函數,例如 sigmoid 和 tanh。 激活 function 的選擇取決於您正在處理的問題和數據集。

Neural.networks 的靈感來自大腦的結構。 大腦中的神經元通過使用電脈沖和化學信號在大腦的不同區域之間傳遞信息。 有些信號很強,有些則不是。 信號微弱的神經元不會被激活。

Neural.networks 以相同的方式工作。 有些輸入特征信號弱,有些信號強。 這些取決於功能。 如果它們很弱,相關的神經元就不會被激活,也不會向前傳遞信息。 我們知道某些特征或輸入對於 label 的貢獻並不是關鍵因素。出於同樣的原因,我們不會為 neural.networks 中的特征工程而煩惱。 model 負責處理。 因此,激活函數在這里提供幫助並告訴 model 哪些神經元以及它們應該傳輸多少信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM