賛否両論のあるニューラルネットワークの活性化関数の包括的なリスト


94

ニューラルネットワークの活性化関数の長所と短所(および理想的には成功した、またはあまり成功していない出版物へのいくつかのポインター)の包括的なリストを提供する参照文書はありますか?


ANNについては十分に知りませんが、アクティベーション関数の形状が大きく異なる場合を除き、それらを区別することは非常に困難です。類似の状況については、ここで私の答えを見ることができます:ロジットモデルとプロビットモデルの違い
グン

1
いいえ、それは非常に大きな違いをもたらします。
ヴィリアミ

en.wikipedia.org/wiki/Activation_functionは優れたリソースです。あなたには、他の多くを使用することができますsin(x)参照、openreview.net/pdf?id=Sks3zF9egを
ピョートル

アクティベーション機能に関するビデオチュートリアルについては、quickkt.com
intelligence

回答:


144

ここで、これまでに学んだことのリストを作成します。@marcodenaが言ったように、長所と短所はこれらのことを試すことから学んだ単なる発見的手法であるためより困難ですが、少なくともそれらが害を及ぼさないリストを持っていると思います。

まず、混乱を避けるために、表記法を明示的に定義します。

表記法

この表記は、ニールセンの本からのものです。

フィードフォワードニューラルネットワークは、互いに接続されたニューロンの多くの層です。入力を受け取り、その入力はネットワークを「トリクル」し、ニューラルネットワークは出力ベクトルを返します。

より正式には層のニューロンの活性化(別名出力)と呼びます。ここでは入力ベクトルの要素です。 j t h i t h a 1 j j t hajijthithaj1jth

次に、次の関係を介して、次のレイヤーの入力を前のレイヤーの入力に関連付けることができます。

aji=σ(k(wjkiaki1)+bji)

どこ

  • σはアクティベーション関数です。
  • k t hi 1 t h j t h i t hwjkiから重量であるのニューロンにレイヤのニューロン層、kth(i1)thjthith
  • j t h i t hbjiは、層のニューロンのバイアスです。jthith
  • j t h i t hajiは、層のニューロンの活性化値を表します。jthith

、つまり、活性化関数を適用する前のニューロンの活性化値を表すを書くことがあります。 Σ KW I jはKI - 1、K+ B I Jzjik(wjkiaki1)+bji

ここに画像の説明を入力してください

より簡潔な表記については、次のように記述できます。

ai=σ(wi×ai1+bi)

この式を使用して、入力フィードフォワードネットワークの出力を計算するには、設定し計算。ここで、はレイヤーの数です。1 = 私は23... Mの MをIRna1=Ia2,a3,,amm

アクティベーション関数

(以下では、読みやすさのために代わりにを記述します)e xexp(x)ex

身元

線形活性化関数とも呼ばれます。

aji=σ(zji)=zji

身元

ステップ

aji=σ(zji)={0if zji<01if zji>0

ステップ

区分線形

「範囲」であると選択します。この範囲よりも小さいものはすべて0になり、この範囲よりも大きいものはすべて1になります。それ以外は線形に補間されます。正式に:xminxmax

aji=σ(zji)={0if zji<xminmzji+bif xminzjixmax1if zji>xmax

どこ

m=1xmaxxmin

そして

b=mxmin=1mxmax

区分線形

シグモイド

aji=σ(zji)=11+exp(zji)

シグモイド

補完ログログ

aji=σ(zji)=1exp(exp(zji))

補完ログログ

バイポーラ

aji=σ(zji)={1if zji<0   1if zji>0

バイポーラ

バイポーラシグモイド

aji=σ(zji)=1exp(zji)1+exp(zji)
バイポーラシグモイド

タン

aji=σ(zji)=tanh(zji)

タン

ルクンのタン

Efficient Backpropを参照してください。

aji=σ(zji)=1.7159tanh(23zji)

ルクンのタン

スケーリング:

LeCunのTanh Scaled

ハードタン

aji=σ(zji)=max(1,min(1,zji))

ハードタン

絶対の

aji=σ(zji)=∣zji

絶対の

整流器

Rectified Linear Unit(ReLU)、Max、またはRamp Functionとも呼ばれます。

aji=σ(zji)=max(0,zji)

整流器

ReLUの変更

これらは、不思議な理由でMNISTにとって非常に良いパフォーマンスを持っているように見える、私が遊んでいるいくつかのアクティベーション関数です。

aji=σ(zji)=max(0,zji)+cos(zji)

ReLU cos

スケーリング:

ReLU cosスケーリング

aji=σ(zji)=max(0,zji)+sin(zji)

ReLU sin

スケーリング:

ReLU sinスケーリング

スムーズ整流器

Smooth Rectified Linear Unit、Smooth Max、またはSoft plusとも呼ばれます

aji=σ(zji)=log(1+exp(zji))

スムーズ整流器

ロジット

aji=σ(zji)=log(zji(1zji))

ロジット

スケーリング:

ロジットスケーリング

プロビット

aji=σ(zji)=2erf1(2zji1)

どこにである誤差関数。基本関数で説明することはできませんが、Wikipediaのページとこちらで逆に近似する方法を見つけることができます。erf

または、次のように表現できます。

aji=σ(zji)=ϕ(zji)

どこある累積分布関数(CDF)。これを概算する方法については、こちらをご覧ください。ϕ

プロビット

スケーリング:

プロビットスケーリング

余弦

ランダムキッチンシンクを参照してください。

aji=σ(zji)=cos(zji)

余弦

ソフトマックス

正規化指数とも呼ばれます。

aji=exp(zji)kexp(zki)

単一のニューロンの出力はその層の他のニューロンに依存しているため、これは少し奇妙です。また、は非常に高い値になる可能性があるため、計算が難しくなります。この場合、はおそらくオーバーフローします。同様に、が非常に低い値の場合、アンダーフローしてなり。zjiexp(zji)zji0

これに対抗するために、代わりに計算し。これにより、次のことができます。log(aji)

log(aji)=log(exp(zji)kexp(zki))

log(aji)=zjilog(kexp(zki))

ここでは、log-sum-expトリックを使用する必要があります

私たちがコンピューティングしているとしましょう:

log(e2+e9+e11+e7+e2+e5)

最初に、便宜上指数関数を大きさでソートします。

log(e11+e9+e5+e2+e2+e7)

次に、が最高であるため、を乗算し。e 11e11e11e11

log(e11e11(e11+e9+e5+e2+e2+e7))

log(1e11(e0+e2+e6+e9+e13+e18))

log(e11(e0+e2+e6+e9+e13+e18))

log(e11)+log(e0+e2+e6+e9+e13+e18)

11+log(e0+e2+e6+e9+e13+e18)

次に、右側の式を計算し、そのログを取得できます。その合計はに関して非常に小さいため、これを行うことは問題ありません。したがって、0へのアンダーフローは、いずれにしても違いを生むほど重要ではありません。右側の式ではオーバーフローは発生しません乗算した後、すべてのべき乗がなることが保証されているためです。log(e11)e110

正式には、。次に:m=max(z1i,z2i,z3i,...)

log(kexp(zki))=m+log(kexp(zkim))

その後、softmax関数は次のようになります。

aji=exp(log(aji))=exp(zjimlog(kexp(zkim)))

補足として、softmax関数の導関数は次のとおりです。

dσ(zji)dzji=σ(zji)=σ(zji)(1σ(zji))

マックスアウト

これも少し注意が必要です。基本的には、maxoutレイヤーの各ニューロンを多数のサブニューロンに分割し、それぞれに独自の重みとバイアスを持たせるという考え方です。次に、ニューロンへの入力はその代わりに各サブニューロンに行き、各サブニューロンは単に出力します(活性化関数を適用せずに)。そのニューロンのは、そのすべてのサブニューロンの出力の最大値になります。zaji

正式には、単一のニューロンに、サブニューロンがとしましょう。それからn

aji=maxk[1,n]sjki

どこ

sjki=ai1wjki+bjki

(はドット積です

これについて考えるのを助けるために、たとえばシグモイド活性化関数を使用しているニューラルネットワークの層の重み行列を考えます。は2D行列です。各列は、前のレイヤーすべてのニューロンの重みを含むニューロンベクトルです。WiithWiWjiji1

サブニューロンがある場合、各サブニューロンには前のレイヤーのすべてのニューロンの重みを含むベクトルが必要になるため、各ニューロンの2D重み行列が必要になります。これは、が3D重み行列になり、各が単一のニューロン 2D重み行列になることを意味し。そして、は、ニューロンサブニューロンベクトルで、前の層すべてのニューロンの重みを含みます。WiWjijWjkikji1

同様に、たとえばシグモイド活性化関数を再び使用するニューラルネットワークでは、はレイヤー各ニューロンバイアスを持つベクトルです。bibjiji

サブニューロンとこれを行うために、我々は、2Dバイアスマトリックス必要各層の、バイアスを有するベクトルである各subneuronのにおけるニューロン。biibjibjkikjth

各ニューロンの重み行列とバイアスベクトルを使用すると、上記の式が非常に明確になり、各サブニューロンの重みが出力単純に適用されます。レイヤー、次にバイアスを適用し、それらの最大値を取得します。wjibjiwjkiai1i1bjki

放射基底関数ネットワーク

放射基底関数ネットワークは、フィードフォワードニューラルネットワークの修正版です。

aji=σ(k(wjkiaki1)+bji)

前のレイヤーのノードごとに1つの重み(通常どおり)があり、さらに各ノードに1つの平均ベクトルと1つの標準偏差ベクトルがあります。前のレイヤー。 K μ のi jはk個の σのIのJのKwjkikμjkiσjki

次に、活性化関数を呼び出して、標準偏差ベクトルと混同しないようにします。ここでを計算するには最初に前のレイヤーの各ノードに対して1つのを計算する必要があります。1つのオプションは、ユークリッド距離を使用することです。σ I jはK i個のJ Zのi個のJのKρσjkiajizjki

zjki=(ai1μjki=(ai1μjki)2

ここででの要素。これは使用しません。あるいは、マハラノビス距離があり、これはおそらくより良いパフォーマンスを発揮します。μjkithμjkiσjki

zjki=(ai1μjki)TΣjki(ai1μjki)

ここで、は次のように定義される共分散行列です。Σjki

Σjki=diag(σjki)

つまり、は対角要素であるを含む対角行列です。ここでとを列ベクトルとして定義します。これは通常使用される表記法だからです。Σjkiσjkiai1μjki

これらは本当にマハラノビス距離が

zjki=(ai1μjki)2σjki

ここででの要素。なお、常に正でなければなりませんが、これは驚くべきことではないので、これは、標準偏差の典型的な要件です。σjkithσjkiσjki

必要に応じて、マハラノビス距離は十分に一般的であるため、共分散行列は他の行列として定義できます。たとえば、共分散行列が単位行列の場合、マハラノビス距離はユークリッド距離に減少します。はかなり一般的であり、正規化ユークリッド距離として知られています。ΣjkiΣjki=diag(σjki)

いずれにしても、距離関数が選択されると、を計算できます。aji

aji=kwjkiρ(zjki)

これらのネットワークでは、理由により、アクティベーション関数を適用した後に重みで乗算することを選択します。

これは、多層放射基底関数ネットワークの作成方法を説明していますが、通常、これらのニューロンは1つだけであり、その出力はネットワークの出力です。単一ニューロンの各平均ベクトルおよび各標準偏差ベクトルは1つの「ニューロン」と見なされ、これらの出力のすべての後に別の層があるため、複数のニューロンとして描画されます。上記の同様にこれらの計算値の合計に重みをます。最後に「加算」ベクトルを使用して2つのレイヤーに分割するのは奇妙に思えますが、それは彼らが行うことです。μjkiσjkiaji

こちらもご覧ください

放射基底関数ネットワーク活性化関数

ガウス

ρ(zjki)=exp(12(zjki)2)

ガウス

多二次

ある点選択します。次に、からまでの距離を計算します。(x,y)(zji,0)(x,y)

ρ(zjki)=(zjkix)2+y2

これはウィキペディアからです。それは制限されておらず、正の値をとることができますが、正規化する方法があるかどうか疑問に思っています。

場合、これは絶対値(水平シフト伴う)と同等です。y=0x

多二次

逆二次関数

反転することを除き、二次関数と同じ:

ρ(zjki)=1(zjkix)2+y2

逆二次関数

* SVGを使用したintmathのグラフからのグラフィック。


12
CVへようこそ。+6これは非常に有益です。将来、もっと似たようなものになることを願っています。
グング

1
の形式の滑らかな整流線形関数とプロビットもあります。log(1+exp(x))
Memming

OK これは正しいです?
フィリイダ

3
これは、参考文献の素晴らしいリストがある興味深い論文になるでしょう。たとえば、arxiv.org/abs/1505.03654。論文を書いて他の参考文献が必要な場合は、お気軽にご連絡ください。
フナフ

9
誰かがこれをElu、Leaky ReLU、PReLU、RReLUで更新する必要があります。
ヴィリアミ

24

そのようなリストの1つですが、それほど網羅的ではありません:http : //cs231n.github.io/neural-networks-1/

一般的に使用されるアクティベーション関数

すべてのアクティベーション関数(または非線形性)は単一の数値を受け取り、それに対して特定の固定された数学演算を実行します。実際には、いくつかのアクティベーション機能があります。

ここに画像の説明を入力してくださいここに画像の説明を入力してください

左:シグモイドの非線形性は実数を[0,1]の範囲に縮小します右: tanhの非線形性は実数を[-1,1]の範囲に縮小します。

シグモイド。シグモイドの非線形性は、数学形式持ち、上の画像の左側に示されています。前のセクションで言及したように、実数値を取り、それを0〜1の範囲に「スカッシュ」します。特に、大きな負の数は0になり、大きな正の数は1になります。それは、ニューロンの発火率として素晴らしい解釈があるためです:まったく発火しない(0)から、想定される最大頻度で完全に飽和した発火(1)まで。実際には、シグモイドの非線形性は最近好意的に落ちており、めったに使用されません。これには2つの大きな欠点があります。σ(x)=1/(1+ex)

  • シグモイドは飽和し、勾配を殺します。シグモイドニューロンの非常に望ましくない特性は、ニューロンの活性化が0または1のテールで飽和すると、これらの領域の勾配がほとんどゼロになることです。バックプロパゲーション中、この(ローカル)勾配は、対物レンズ全体のこのゲートの出力の勾配に乗算されることを思い出してください。したがって、ローカルグラジエントが非常に小さい場合、グラジエントを効果的に「殺す」ことになり、ニューロンを介して重みや再帰的にデータに信号が流れることはほとんどありません。さらに、飽和を防ぐためにシグモイドニューロンの重みを初期化するときは、特別な注意を払う必要があります。たとえば、初期の重みが大きすぎると、ほとんどのニューロンが飽和状態になり、ネットワークはほとんど学習しません。
  • シグモイド出力はゼロ中心ではありません。これは望ましくありません。なぜなら、ニューラルネットワークの処理の後の層のニューロン(これについては後ほど詳しく説明します)がゼロ中心でないデータを受信するためです。これは、勾配降下中のダイナミクスに影響を及ぼします。ニューロンに入力されるデータが常に正の場合(たとえば 、要素ごとに)、逆伝播中に重み勾配が すべて正またはすべて負(式全体の勾配依存) x>0f=wTx+bwf)。これにより、重みの勾配更新に望ましくないジグザグダイナミクスが導入される可能性があります。ただし、データのバッチ全体でこれらの勾配が加算されると、重みの最終更新に可変符号が付き、この問題が多少緩和されることに注意してください。したがって、これは不便ですが、上記の飽和したアクティベーションの問題と比較して、それほど深刻な結果はありません。

タン。タンの非線形性は、上の画像の右側に示されています。実数値を範囲[-1、1]に押しつぶします。シグモイドニューロンと同様に、その活性化は飽和しますが、シグモイドニューロンとは異なり、その出力はゼロ中心になります。したがって、実際には、シグモイドの非線形性よりもタンの非線形性が常に優先されます。また、tanhニューロンは単にスケーリングされたシグモイドニューロンであり、特に次のことが成り立つことに注意してください:。tanh(x)=2σ(2x)1

ここに画像の説明を入力してくださいここに画像の説明を入力してください

左:整流線形ユニット(ReLU)アクティベーション関数。x<0の場合はゼロで、x> 0の場合は勾配1で線形です。右: Krizhevsky et al。のプロット (pdf)tanhユニットと比較して、ReLUユニットとの収束が6倍向上したことを示す論文。

ReLU。整流線形ユニットは、ここ数年で非常に人気があります。関数計算します。言い換えると、アクティベーションは単にゼロでしきい値設定されます(左の上の画像を参照)。ReLUの使用には、いくつかの長所と短所があります。f(x)=max(0,x)

  • (+)シグモイド/タン関数と比較して確率的勾配降下の収束を大幅に加速することが判明しました(例:Krizhevsky et al。の 6倍)。これは、線形で飽和していない形式によるものであると主張されています。
  • (+)高価な操作(指数関数など)を伴うタン/シグモイドニューロンと比較して、ReLUは、活性化行列をゼロで単純にしきい値処理することで実装できます。
  • (-)残念ながら、ReLUユニットはトレーニング中に壊れやすく、「死ぬ」可能性があります。たとえば、ReLUニューロンを流れる大きな勾配により、ニューロンがデータポイントで再びアクティブにならないように重みが更新される可能性があります。これが発生した場合、ユニットを流れる勾配は、その時点から永遠にゼロになります。つまり、ReLUユニットはデータマニホールドからノックオフされる可能性があるため、トレーニング中に不可逆的に停止する可能性があります。たとえば、学習率を高く設定しすぎると、ネットワークの40%が「デッド」になる可能性があります(つまり、トレーニングデータセット全体でアクティブにならないニューロン)。学習率を適切に設定することで、これはそれほど頻繁には問題になりません。

リーキーReLU。Leaky ReLUは、「死にゆくReLU」の問題を修正する試みの1つです。x <0のときに関数がゼロである代わりに、漏れやすいReLUは小さな負の勾配(0.01程度)を持ちます。つまり、関数計算、である小さい定数です。一部の人々は、この形式のアクティベーション機能で成功を報告していますが、結果は常に一貫しているとは限りません。Kaiming He et al。、2015 によるDelving Deep into Rectifiersで紹介されたPReLUニューロンに見られるように、負の領域の勾配は各ニューロンのパラメーターにすることもできます。しかし、タスク間の利点の一貫性は現在不明。f(x)=1(x<0)(αx)+1(x>=0)(x)α

ここに画像の説明を入力してください

Maxout。関数型を持たない他のタイプのユニットが提案されています。この場合、重みとデータ間のドット積に非線形性が適用されます。比較的一般的な選択肢の1つは、ReLUとその漏れやすいバージョンを一般化するMaxoutニューロン(最近Goodfellow et al。によって導入され )です。Maxoutニューロンは、関数計算します。ReLUとLeaky ReLUの両方がこの形式の特別なケースであることに注意してください(たとえば、ReLUの場合、f(wTx+b)max(w1Tx+b1,w2Tx+b2)w1,b1=0)。したがって、MaxoutニューロンはReLUユニットのすべての利点を享受し(動作の線形領域、飽和なし)、その欠点はありません(ReLUが消滅する)。ただし、ReLUニューロンとは異なり、1つのニューロンごとにパラメーターの数が2倍になり、パラメーターの総数が多くなります。

これで、最も一般的なタイプのニューロンとその活性化機能についての説明を終了します。最後のコメントとして、同じネットワーク内で異なるタイプのニューロンを組み合わせて一致させることは非常にまれですが、そうすることで根本的な問題はありません。

TLDR:「どのニューロンタイプを使用する必要がありますか?」これが懸念される場合は、Leaky ReLUまたはMaxoutを試してください。シグモイドを使用しないでください。tanhを試してみてください。ただし、ReLU / Maxoutよりも動作が悪くなることが予想されます。


ライセンス:


MITライセンス(MIT)

著作権(c)2015 Andrej Karpathy

これにより、このソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを取得するすべての人に、使用、コピー、修正、マージの権利を含むがこれらに限定されないソフトウェアを扱う許可が無料で付与されますソフトウェアのコピーを発行、配布、サブライセンス、および/または販売し、以下の条件に従って、ソフトウェアの提供先にソフトウェアの提供を許可します。

上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは大部分に含まれるものとします。

本ソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むが、これに限らず、明示または黙示を問わず、いかなる保証もなしに「現状のまま」提供されます。いかなる場合でも、作者または著作権者は、契約、不法行為、またはその他の行為、ソフトウェアまたは使用またはその他の取引に起因する、または関連するいかなる請求、損害またはその他の責任についても責任を負わないものとしますソフトウェア。*

その他のリンク:


10

賛否両論のリストは存在しないと思います。アクティベーション関数は、アプリケーションに大きく依存し、ニューラルネットワークのアーキテクチャにも依存します(ここでは、S字型に似た2つのsoftmax関数のアプリケーションを見ることができます)。

関数の一般的な振る舞いに関するいくつかの研究を見つけることができますが、定義された決定的なリスト(あなたが尋ねるもの...)は決してないと思います。

私はまだ学生ですので、これまでに知っていることを指摘します。

  • ここでは、逆伝播を伴うタンおよびシグモイドの挙動についてのいくつかの考えを見つけます。Tanhはより一般的ですが、シグモイド...(常に「but」があります)
  • ディープスパース整流ニューラルネットワーク Glorotザビエルらの、彼らは、整流ユニットは、より生物学的に妥当であり、それらは他のものよりも良好に機能することを述べる(シグモイド/ TANH)

これが「正しい」答えです。リストを作成できますが、賛否両論は完全にデータに依存しています。実際、活性化関数の学習は理論的にははるかに合理的です。研究にあまり焦点を当てていない理由は、シグモイドが「うまくいく」からです。最終的に、唯一の
利点

4

ダニエルの偉大な答えを完全にするために、他のパラダイムがあります。そこでは、液体状態機械極端な学習機械エコー状態ネットワークなど、重みおよび/または活性化の種類にランダムに「車輪を回転」させます

これらのアーキテクチャについて考える1つの方法:貯水池は、SVMのような一種のカーネル、またはデータが何らかのハイパースペースに投影される単純なFFNNの1つの大きな隠れ層です。実際の学習はありません。満足のいく解決策に達するまで、貯水池は再生成されます。

この素敵な答えもご覧ください。


2

最近のアクティベーション機能を確認する記事は、

アクティベーション関数:ディープラーニングの実践と研究の傾向の比較」、Chigozie Enyinna Nwankpa、Winifred Ijomah、Anthony Gachagan、Stephen Marshall

ディープニューラルネットワークは、これまで開発されてきた、よりディープラーニング(DL)アーキテクチャの現実世界の複雑な問題を解決するために、さまざまな新興分野で使用されています。これらの最先端のパフォーマンスを実現するために、DLアーキテクチャはアクティベーション機能(AF)を使用して、特定のDLアーキテクチャの隠れ層と出力層の間でさまざまな計算を実行します。このホワイトペーパーでは、ディープラーニングアプリケーションで使用されている既存のAFに関する調査を紹介し、ディープラーニングアプリケーションでのアクティベーション機能の使用における最近の傾向を明らかにします。このペーパーの目新しさは、DLで使用されるAFの大部分をコンパイルし、最新の研究結果に対する実用的なディープラーニング展開におけるこれらの機能のアプリケーションと使用の現在の傾向を概説することです。このコンパイルは、配備の準備ができている特定のアプリケーションに最適で適切なアクティベーション機能の選択において効果的な決定を下すのに役立ちます。AFに関するほとんどの研究論文が同様の研究と結果を強調しているので、この論文はタイムリーです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.