私はニューラルネットワークについていくつか読んでおり、単層ニューラルネットワークの一般的な原理を理解しています。追加のレイヤーの必要性を理解しましたが、なぜ非線形活性化関数が使用されるのですか?
この質問の後に、次の質問が続きます。逆伝搬で使用されるアクティベーション関数の派生物は何ですか?
私はニューラルネットワークについていくつか読んでおり、単層ニューラルネットワークの一般的な原理を理解しています。追加のレイヤーの必要性を理解しましたが、なぜ非線形活性化関数が使用されるのですか?
この質問の後に、次の質問が続きます。逆伝搬で使用されるアクティベーション関数の派生物は何ですか?
回答:
アクティベーション機能の目的は、ネットワークに非線形性を導入することです
これにより、説明変数によって非線形に変化する応答変数(ターゲット変数、クラスラベル、またはスコア)をモデル化できます。
非線形( -これの単語である直線にレンダリング出力と同じでない出力は、入力の線形結合から再生することができないことを意味するアフィン)。
もう1つの考え方:ネットワークに非線形活性化関数がない場合、NNは、レイヤーの数に関係なく、単一レイヤーのパーセプトロンのように動作します。これらのレイヤーを合計すると、別の線形関数が得られるためです。 (上記の定義を参照)。
>>> in_vec = NP.random.rand(10)
>>> in_vec
array([ 0.94, 0.61, 0.65, 0. , 0.77, 0.99, 0.35, 0.81, 0.46, 0.59])
>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
array([ 0.74, 0.54, 0.57, 0. , 0.65, 0.76, 0.34, 0.67, 0.43, 0.53])
-2から2に評価される、バックプロップ(双曲線タンジェント)で使用される一般的な活性化関数:
線形アクティブ化機能を使用できますが、ごく限られた場合に使用できます。実際、アクティベーション関数をよりよく理解するには、通常の最小二乗法または単に線形回帰を調べることが重要です。線形回帰は、入力と組み合わせたときに、説明変数とターゲット変数間の垂直効果が最小になる最適な重みを見つけることを目的としています。つまり、予想される出力が以下に示すように線形回帰を反映している場合は、線形活性化関数を使用できます(上図)。しかし、下の2番目の図のように、線形関数は望ましい結果を生成しません:(中央の図)。ただし、以下に示すような非線形関数を使用すると、望ましい結果が得られます。
線形活性化関数を使用したニューラルネットワークは、アーキテクチャの複雑さに関係なく、1層の深さでのみ有効であるため、活性化関数を線形にすることはできません。ネットワークへの入力は通常、線形変換(入力*重み)ですが、実世界と問題は非線形です。入力データを非線形にするために、活性化関数と呼ばれる非線形マッピングを使用します。活性化機能は、特定の神経機能の存在を決定する意思決定機能です。0と1の間でマッピングされます。0は機能がないことを意味し、1は機能があることを意味します。残念ながら、重みで発生する小さな変化は、0または1のいずれかしか取ることができないため、アクティベーション値に反映できません。したがって、非線形関数は連続的であり、この範囲で微分可能でなければなりません。ニューラルネットワークは-infinityから+ infiniteまでの任意の入力を取得できる必要がありますが、{0,1}または{-1,1}の範囲の出力にマップできる場合があります。アクティベーション機能が必要です。ニューラルネットワークにおけるその目的は、重みと入力の非線形の組み合わせを介して非線形の決定境界を生成することであるため、活性化関数には非線形性が必要です。
ニューラルネットワークで線形活性化関数のみを許可する場合、出力は入力の線形変換になりますが、これはユニバーサル関数近似を形成するには不十分です。このようなネットワークは、行列の乗算として表すことができ、そのようなネットワークから非常に興味深い動作を得ることができません。
すべてのニューロンがアフィン活性化関数(つまり、フォーム上の活性化関数f(x) = a*x + c
、ここでa
、c
は定数であり、線形活性化関数の一般化です)がある場合も同じことが起こり、入力から出力へのアフィン変換になります。 、それもあまりエキサイティングではありません。
ニューラルネットワークには、出力層などの線形活性化機能を持つニューロンが含まれている可能性がありますが、ネットワークの他の部分に非線形活性化機能を持つニューロンの会社が必要です。
注:興味深い例外は、DeepMindの合成勾配です。これは、小さなニューラルネットワークを使用して、アクティブ化の値を指定して、バックプロパゲーションパスの勾配を予測します。また、非表示レイヤーのないニューラルネットワークと、線形アクティベーションのみ。
線形アクティブ化と任意の数の非表示層を持つフィードフォワードニューラルネットワークは、非表示層がない線形ニューラルネットワークと同等です。たとえば、2つの非表示レイヤーがあり、アクティブ化されていないニューラルネットワークについて考えてみましょう。
y = h2 * W3 + b3
= (h1 * W2 + b2) * W3 + b3
= h1 * W2 * W3 + b2 * W3 + b3
= (x * W1 + b1) * W2 * W3 + b2 * W3 + b3
= x * W1 * W2 * W3 + b1 * W2 * W3 + b2 * W3 + b3
= x * W' + b'
複数の線形変換の組み合わせを1つの変換に置き換えることができ、複数のバイアス項の組み合わせは単一のバイアスに過ぎないため、最後のステップを実行できます。線形活性化を追加しても結果は同じです。
したがって、このニューラルネットを単一層のニューラルネットに置き換えることができますn
。これは層に拡張できます。これは、層を追加しても線形ニューラルネットの近似力がまったく増加しないことを示しています。非線形関数を近似するには非線形活性化関数が必要であり、現実世界のほとんどの問題は非常に複雑で非線形です。実際、活性化関数が非線形の場合、十分な数の隠れユニットを持つ2層ニューラルネットワークは、普遍的な関数近似器であることが証明できます。
「本論文では、Stone-Weierstrassの定理とGallantおよびWhiteのコサインスクワッシャーを利用して、基本的な多層フィードフォワードネットワークアーキテクチャが、任意の関数を任意の精度で近似できることを証明しています。ユニットが利用可能です。」(Hornik et al。、1989、Neural Networks)
スカッシング関数は、たとえば、シグモイドアクティベーション関数のように[0,1]にマッピングされる非線形アクティベーション関数です。
非線形アクティベーション関数の背後にあるロジックを理解するには、まずアクティベーション関数が使用される理由を理解する必要があります。一般に、現実世界の問題には、自明ではない非線形の解が必要です。したがって、非線形性を生成するためにいくつかの関数が必要です。基本的に、アクティベーション関数が行うことは、入力値を目的の範囲にマッピングしながら、この非線形性を生成することです。
ただし、線形アクティベーション関数は、線形回帰などの非表示レイヤーが不要な非常に限られたケースで使用できます。通常、このような問題に対してニューラルネットワークを生成しても意味はありません。これは、隠れ層の数に関係なく、このネットワークは1ステップで実行できる入力の線形結合を生成するためです。つまり、単一のレイヤーのように動作します。
連続微分可能性などの活性化関数には、さらにいくつかの望ましいプロパティがあります。逆伝播を使用しているため、生成する関数はいつでも微分可能でなければなりません。トピックをよりよく理解するために、ここからアクティブ化機能についてウィキペディアのページを確認することを強くお勧めします。
いくつかの良い答えがここにあります。クリストファー・M・ビショップの著書「パターン認識と機械学習」を指摘するのは良いことです。これは、MLに関連するいくつかの概念についての深い洞察を得るために参照する価値のある本です。229ページからの抜粋(セクション5.1):
ネットワーク内のすべての隠しユニットのアクティブ化関数が線形であるとすると、そのようなネットワークでは、隠しユニットのない同等のネットワークを常に見つけることができます。これは、連続する線形変換の構成自体が線形変換であるという事実から来ています。ただし、非表示ユニットの数が入力ユニットまたは出力ユニットのいずれかの数よりも少ない場合、ネットワークで生成できる変換は、入力から出力への最も一般的な可能な線形変換ではありません。隠しユニット。12.4.2節では、線形ユニットのネットワークが主成分分析を引き起こすことを示します。ただし、一般に、線形ユニットの多層ネットワークにはほとんど関心がありません。
できるだけ簡単に説明します。
ニューラルネットワークはパターン認識で使用されていますか?また、パターン検出は非常に非線形な手法です。
引数として、すべてのニューロンに線形活性化関数y = wX + bを使用し、if y> 0-> class 1 else class 0のように設定するとします。
これで、二乗誤差損失を使用して損失を計算し、それを逆伝播して、モデルが正しく学習できるようにしますか?
違う。
最後の非表示レイヤーの場合、更新された値はw {l} = w {l}-(alpha)* Xになります。
最後から2番目の非表示レイヤーの場合、更新される値はw {l-1} = w {l-1}-(alpha)* w {l} * Xになります。
最後のi番目の非表示レイヤーの場合、更新された値はw {i} = w {i}-(alpha)* w {l} ... * w {i + 1} * Xになります。
これにより、すべてのウェイトマトリックスが乗算され、結果として可能性が生じます。A)w {i}勾配の消失による変化はほとんどないB)w {i}勾配の爆発による劇的かつ不正確な変化C)w {i}の変化私たちに良い適合スコアを与えるのに十分です
Cが発生した場合、これはおそらく、分類/予測の問題が単純な線形/ロジスティックリグレッサーベースの問題であり、そもそもニューラルネットワークを必要としなかったことを意味します。
NNの堅牢性やハイパーチューニングに関係なく、線形アクティベーション関数を使用すると、非線形を必要とするパターン認識の問題に取り組むことができなくなります。
それは全く必要条件ではありません。実際、修正された線形活性化関数は、大規模なニューラルネットワークで非常に役立ちます。勾配の計算ははるかに速く、最小範囲を0に設定することでスパース性を誘導します。
詳細については、次を参照してください。https://www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks
編集:
整流された線形活性化関数を線形関数と呼ぶことができるかどうかについては、いくつかの議論がありました。
はい、x = 0の点では線形ではないため、技術的には非線形関数ですが、他のすべての点では線形であると言っても間違いはないので、ここで簡単に説明することはそれほど役に立ちません。
アイデンティティ関数を選択することもできましたが、それでも真実ですが、最近の人気のため、ReLUを例として選択しました。
f(x) = a*x
(つまりがある線形活性化関数の唯一のタイプであるため)である、無用活性化関数として(あなたは非線形活性化関数とそれを組み合わせるしない限り、 )。