Mish:一個新的state of the art的啟用函式,ReLU的繼任者

AIBigbull2050發表於2019-12-08
2019-12-04 21:04:05

作者:Less Wright

編譯:ronghuaiyang

導讀

對啟用函式的研究一直沒有停止過,ReLU還是統治著深度學習的啟用函式,不過,這種情況有可能會被Mish改變。

Diganta Misra的一篇題為“Mish: A Self Regularized Non-Monotonic Neural Activation Function”的新論文介紹了一個新的深度學習啟用函式,該函式在最終準確度上比Swish(+.494%)和ReLU(+ 1.671%)都有提高。

我們的小型FastAI團隊使用Mish代替ReLU,打破了之前在FastAI全球排行榜上準確性得分記錄的一部分。結合Ranger最佳化器,Mish啟用,Flat + Cosine 退火和自注意力層,我們能夠獲得12個新的排行榜記錄!

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

我們12項排行榜記錄中的6項。每條記錄都是用Mish而不是ReLU。(藍色高亮顯示,400 epoch的準確率為94.6,略高於我們的20 epoch的準確率為93.8:)

作為我們自己測試的一部分,對於ImageWoof資料集的5 epoch測試,我們可以說:

Mish在高顯著性水平上優於ReLU (P < 0.0001)。(FastAI論壇@ Seb)

Mish已經在70多個基準上進行了測試,包括影像分類、分割和生成,並與其他15個啟用函式進行了比較。

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

ReLU和Mish的對比,Mish的梯度更平滑

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

我做了一個Mish的PyTorch實現,用它替換了ReLU,沒有做任何其他更改,並在困難的ImageWoof資料集上使用廣泛的最佳化器(Adam、Ranger、RangerLars、Novograd等)對它進行了測試。

我發現Mish在訓練穩定性、平均準確率(1-2.8%)、峰值準確率(1.2% - 3.6%)等方面都有了全面的提高,與本文的結果相匹配或超過。

下面是Ranger Optimizer + Mish與FastAI排行榜相比:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

Ranger最佳化器(RAdam和前瞻性)+ Mish啟用超過當前的FastAI 排行榜評級。注意平穩、穩定的訓練曲線。

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

FastAI排行榜為5和20個epochs,ImageWoof資料集(難)。

這是透過簡單地在FastAI的XResNet50中使用Mish替換ReLU,並使用各種最佳化器(上面的Ranger結果)執行來實現的。沒有任何其他變化,包括學習率。 注意:最佳化Mish的學習率很可能會獲得更好的結果。本文提出了相對於ReLU而言,較低的學習率供參考。

Mish檢查了理想的啟用函式應該是什麼(平滑、處理負號等)的所有內容,並提出了一套泛化的初始測試。在過去的一年裡,我測試了大量新的啟用函式,其中大多數都失敗了,從基於MNIST的論文,到基於更真實的資料集的測試。因此,Mish可能最終會為深度學習實踐者提供一種新的啟用功能,並有很大的機會超過長期佔據主導地位的ReLU。

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

Mish的性質

我透過下面的PyTorch程式碼連結提供了Mish,以及一個修改過的XResNet (MXResNet),這樣你就可以快速地將Mish放入你的程式碼中,並立即進行測試!

讓我們後退一步,瞭解什麼是Mish,為什麼它可能改進ReLU上的訓練,以及在神經網路中使用Mish的一些基本步驟。

什麼是Mesh?

直接看Mesh的程式碼會更簡單一點,簡單總結一下,Mish=x * tanh(ln(1+e^x))。

其他的啟用函式,ReLU是x = max(0,x),Swish是x * sigmoid(x)。

PyTorch的Mish實現:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

Mish的PyTorch實現

Tensorflow中的Mish函式:

Tensorflow:x = x *tf.math.tanh(F.softplus(x))

Mish和其他的啟用函式相比怎麼樣?

下圖顯示了Mish與其他一些啟用函式的測試結果。這是多達73個測試的結果,在不同的架構,不同的任務上:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

Mish對比很多基準測試中的啟用函式

為什麼Mish表現這麼好?

以上無邊界(即正值可以達到任何高度)避免了由於封頂而導致的飽和。理論上對負值的輕微允許允許更好的梯度流,而不是像ReLU中那樣的硬零邊界。

最後,可能也是最重要的,目前的想法是,平滑的啟用函式允許更好的資訊深入神經網路,從而得到更好的準確性和泛化。

儘管如此,我測試了許多啟用函式,它們也滿足了其中的許多想法,但大多數都無法執行。這裡的主要區別可能是Mish函式在曲線上幾乎所有點上的平滑度。

這種透過Mish啟用曲線平滑性來推送資訊的能力如下圖所示,在本文的一個簡單測試中,越來越多的層被新增到一個測試神經網路中,而沒有一個統一的函式。隨著層深的增加,ReLU精度迅速下降,其次是Swish。相比之下,Mish能更好地保持準確性,這可能是因為它能更好地傳播資訊:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

更平滑的啟用功能允許資訊更深入地流動……注意,隨著層數的增加,ReLU快速下降。

如何把Mish放到你自己的網路中?

Mish的PyTorch和FastAI的原始碼可以在github的兩個地方找到:

1、官方Mish github:

2、非官方的Mish使用inline提升速度:

3 、我們與Ranger和Mish (MXResNet的一部分)一起的FastAI的記錄:

複製mish.py到你的相關目錄,幷包含它,然後將你的網路啟用函式指向它:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

匯入Mish函式,把啟用函式設定為Mish

另外,FastAI使用者可以使用修改後的XResNet載入和測試,使用Mish而不是ReLU。複製檔案mxresnet.py到本地目錄或路徑:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

接下來指定相關的ResNet大小(18、34、50、101、152),並載入體系結構(cnn_learner,等等)。下面是我如何載入mxresnet50,使用Ranger最佳化:

Mish:一個新的state of the art的啟用函式,ReLU的繼任者

總結

ReLU有一些已知的弱點,但是通常它執行起來很輕,並且在計算上很輕。Mish具有較強的理論淵源,在測試中,就訓練穩定性和準確性而言,Mish的平均效能優於ReLU。

複雜度只稍微增加了一點(V100 GPU和Mish,相對於ReLU,每epoch增加大約1秒),考慮到訓練穩定性的提高和最終精度的提高,稍微增加一點時間似乎是值得的。

最終,在今年測試了大量新的啟用函式後,Mish在這方面處於領先地位,我懷疑它很有可能成為AI未來的新ReLU。

英文原文:




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2667434/,如需轉載,請註明出處,否則將追究法律責任。

相關文章