本日は活性化関数について学びたいと思います。
Diffusion Modelを学習しているときに、U-Netなどの層にswishやGELUという聞き慣れない関数が出てきました。
まずは巷の記事を眺めます。
こちらの中級者向けサイトはよく出てきます。中級者なのでしょう。
CVMLエキスパートガイド
ReLU とその発展型の活性化関数 [GELU, Swish, Mish など]
https://cvml-expertguide.net/terms/dl/layers/activation-function/relu-like-activation/
まず、ReLUです。
「ReLUは,max関数を用いて入力信号の**整流化(Rectification)**を行う単純な関数であるが,脱シグモイドによる低計算コスト化により,層の総数がとても多くて深いCNNの学習を,高速化することができるようになった.また,シグモイド系活性化関数で起きがちな,下端出力値である [-1, [0 や,上端出力値である 1] への飽和も避けられるので,収束性能向上も見込める.」
ReLU
以前は連続的なシグモイド関数などが利用されていましたが、層が深くなると勾配消失問題で勾配が十分確保できなくなることから、このReLUが利用されるようになってきたようです。
ほかにも
Leaky ReLU と PReLU
GELU (Gaussian Error Linear Units)
Swish
Mish
などが紹介されていて、活性化関数について詳しく知りたいかたは元の解説を読むのが良いかと思います。ここでは、解説の要約に加えて簡単なグラフ形状も書いてみようと思います。
Leaky ReLUは、xが0より小さい部分でも微妙に勾配をつけて、マイナスの入力に対応する。
「Leakyという形容詞の通り,ReLUのx<0側を傾けることで,少しだけ情報をリークさせて手前の層に逆伝搬できるようにしたものである.」
f(x) = 0.01x (x<0)
f(x) = x (x>=0)
PReLU (Parametric Rectified Linear Units)は初期値0.25から、上記に似てるが固定値ではなくマイナス勾配がパラメータ化されている
f(x) = ax (x<0)
f(x) = x (x>=0)
グラフで書くと上は、両方とも、
GELU
「GELU (Gaussian Error Linear Units)は,Google DeepMind から発表された,ランダム正則化機能も備えたReLUである。」
f(x) = xφ(x)
で、確率密度関数を導入。
「ReLUに似た形ながら滑らかな関数形を持ちつつも,入力値に則して大きくなるゲート係数Φの導入により,ドロップアウト的な正則化効果も得ることができる。」
「GELUはその提案後,OpenAI GPTや,GoogleのBERTで,それらの構成部品の Transformer中に使用された.これを皮切りに,その後もBERTやTransformer界隈でのGELUの使用が多い」
Swish
「最高性能を出す活性化関数を,強化学習を用いて探索した結果として得られた,以下のReLU型の活性化関数」
f(x) = x σ(βx)
σ(x)はシグモイド関数で、βはパラメータもしくは定数。
「Swishは,近年の最先端のコンピュータビジョン研究でよく用いられている。また,seq2seq界隈の分野(例えばText-to-Speechなど)でも使用例が多い.たとえば音声認識向けの定番Transformerモデルである Conformer [Gulati et al., 2020] でも,Swishが用いられている。」
Mish
「各ReLU型活性化関数の性能を,更に上回るものとして,Mish [Misra 2020]が登場」
f(x) = tanh(softplus(x))
softplus(x) = log(1 + exp(x))
「Mish は物体検出の Yolo v4でも活性化関数として用いられているなど」
とにかく詳しい記事でした。
次の記事です。
多項式近似による活性化関数の計算量削減実験
https://zenn.dev/inaturam/articles/04955c8f0f7a88
結構面白い記事でした、GELU, Swish, Mishなどに触れながら、関数を具体的に評価していました。
個人的にはかなり面白そうだったので、時間があって活性化関数についてもっと詳しく知りたい方向けです。
【開発者必見】活性化関数の最新包括的レビュー!
https://ai-scholar.tech/articles/survey/activation-functions-review
「活性化関数は、5種類(シグモイド系、ReLU系、ELU系、学習系、その他)に分類され、それぞれの課題を抱えている。」
こちらの記事もかなりたくさんの活性化関数を取り扱っていました。時間があれば見てみたいですが、フォローしきれないくらい活性化関数業界は元気がいいですね!
次です。
SmeLU:ディープラーニングの再現性を悪化させている犯人はReLU関数(2/3)
https://webbigdata.jp/post-13250/
こちらも活性化関数の性能検証が多かったです。とてもいろんな関数がありますね。
活性化関数Geluに関して
https://qiita.com/nishiha/items/207f6d7eacce344e3c5e
Geluについて特化して説明をされています。
ReLUはSwish,SwishはReLU
https://qiita.com/ShotaDeguchi/items/872e4bf79a1203a5db75
こちらはReLUとSwishの比較に特化
活性化関数業界の期待のルーキー”Mish”について
こちらはMish特化
ということで、調べる前からは想像がつかないくらい活性化関数業界は元気でした。ベンチマークをとっている記事もありましたので、実務でどれくらいの性能が出るのか、ベンチマーク比較がたくさんあると便利だなと感じました。以上です。