web-dev-qa-db-ja.com

バックプロパゲーションニューラルネットワークで非線形活性化関数を使用する必要があるのはなぜですか?

私はニューラルネットワークに関するいくつかのことを読んでおり、単層ニューラルネットワークの一般的な原理を理解しています。追加レイヤーの必要性を理解していますが、なぜ非線形活性化関数が使用されるのですか?

この質問の後に、次の質問が続きます: 逆伝播で使用される活性化関数の派生物は何ですか?

119
corazza

アクティブ化機能の目的は、ネットワークに非線形性を導入することです

次に、これにより、説明変数で非線形に変化する応答変数(ターゲット変数、クラスラベル、またはスコア)をモデル化できます。

non-linearは、入力の線形結合から出力を再現できないことを意味します(これは、直線にレンダリングされる出力とは異なります- -この言葉はaffine)です。

それを考える別の方法:ネットワークのnonlinearアクティベーション関数なしでは、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])

Backpropで使用される一般的なアクティベーション関数(双曲線正接)-2から2まで評価:

enter image description here

151
doug

ただし、非常に限られた場合に限り、線形アクティベーション関数を使用できます。実際、活性化関数をよりよく理解するには、通常の最小二乗法または単に線形回帰を調べることが重要です。線形回帰の目的は、入力と組み合わせたときに、説明変数とターゲット変数間の垂直効果が最小になる最適な重みを見つけることです。つまり、期待される出力が以下に示すように線形回帰を反映している場合、線形活性化関数を使用できます(上図)。ただし、下の2番目の図のように、線形関数では目的の結果が得られません(中央の図)。ただし、以下に示すような非線形関数は、望ましい結果を生成します:(下図) enter image description here

線形アクティベーション関数を備えたニューラルネットワークは、アーキテクチャの複雑さに関係なく、1層のみ有効であるため、アクティベーション関数を線形にすることはできません。通常、ネットワークへの入力は線形変換(入力*重み)ですが、現実世界と問題は非線形です。入力データを非線形にするために、アクティベーション関数と呼ばれる非線形マッピングを使用します。活性化機能は、特定の神経機能の存在を判断する意思決定機能です。 0と1の間でマッピングされます。0は機能がないことを意味し、1はその存在を意味します。残念ながら、重みで発生する小さな変化は、0または1のいずれかしか取ることができないため、アクティベーション値に反映できません。したがって、非線形関数は連続的で、この範囲で微分可能でなければなりません。ニューラルネットワークは-infinityから+ infiniteの入力を取得できる必要がありますが、場合によっては{0,1}または{-1,1}の範囲の出力にマッピングできる必要があります。アクティベーション機能が必要です。ニューラルネットワークでの目的は、重みと入力の非線形の組み合わせを介して非線形の決定境界を生成することであるため、活性化関数では非線形性が必要です。

39
chibole

ニューラルネットワークで線形活性化関数のみを許可する場合、出力は入力の 線形変換 になりますが、これは ユニバーサル関数近似 を形成するのに十分ではありません。そのようなネットワークは単に行列の乗算として表すことができ、そのようなネットワークから非常に興味深い動作を取得することはできません。

同じことは、すべてのニューロンがアフィン活性化関数(つまり、f(x) = a*x + c形式の活性化関数、ここでaおよびcは定数であり、線形活性化の一般化である場合にも当てはまります。関数)、入力から出力への アフィン変換 になりますが、これもあまり刺激的ではありません。

ニューラルネットワークには、出力層などの線形活性化関数を持つニューロンが非常によく含まれていますが、これらにはネットワークの他の部分に非線形活性化関数を持つニューロンの会社が必要です。

注:興味深い例外は、DeepMindの 合成勾配 です。この場合、小さなニューラルネットワークを使用して、逆伝播の勾配を予測します。アクティベーション値を渡して渡すと、隠れ層がなく、線形アクティベーションのみのニューラルネットワークを使用して逃げることができることがわかります。

20
HelloGoodbye

「本論文では、Stone-Weierstrass定理とGallant and Whiteのコサインスカッシャーを使用して、abritraryスカッシュ関数を使用する標準的な多層フィードフォワードネットワークアーキテクチャが、実質的にあらゆる関数を任意の所望の精度に近づけることができることを確立しています。ユニットが利用可能です。」 ( Hornik et al。、1989、Neural Networks

スカッシュ関数は、たとえば、シグモイド活性化関数のように[0,1]にマッピングされる非線形活性化関数です。

4
alfa

純粋に線形のネットワークが有用な結果をもたらす場合があります。形状(3,2,3)を持つ3つの層のネットワークがあるとします。中間層を2次元のみに制限することにより、元の3次元空間で「最適な平面」である結果が得られます。

ただし、NMF、PCAなど、この形式の線形変換を見つける簡単な方法があります。ただし、これは、多層ネットワークが単一層パーセプトロンと同じように動作しない場合です。

3
markemus

線形活性化と任意の数の隠れ層を備えたフィードフォワードニューラルネットワークは、隠れ層を持たない単なる線形ニューラルニューラルネットワークと同等です。たとえば、2つの隠れ層を持ち、活性化しない図のニューラルネットワークを考えてみましょう enter image description here

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層ニューラルネットワークは、汎用関数近似法であることが証明できます。

2
xashru

非線形 アクティベーション関数 の背後にあるロジックを理解するには、まずアクティベーション関数が使用される理由を理解する必要があります。一般に、現実世界の問題には、自明ではない非線形解が必要です。したがって、非線形性を生成するにはいくつかの関数が必要です。基本的に、アクティベーション関数は、入力値を目的の範囲にマッピングしながらこの非線形性を生成します。

ただし、線形回帰などの非表示のレイヤーが不要な非常に限られた場合に、線形アクティベーション関数を使用できます。通常、この種の問題に対してニューラルネットワークを生成することは無意味です。なぜなら、このネットワークは、隠れた層の数に関係なく、わずか1ステップで実行できる入力の線形結合を生成するからです。つまり、単一のレイヤーのように動作します。

また、連続微分可能性など、アクティベーション関数に望ましいプロパティがいくつかあります。バックプロパゲーションを使用しているため、生成する関数はどの時点でも微分可能でなければなりません。トピックの理解を深めるために、ウィキペディアのページで here のアクティベーション機能を確認することを強くお勧めします。

複数のニューロンの階層化されたNNを使用して、線形に不可分な問題を学習できます。たとえば、XOR関数は、ステップアクティブ化関数を含む2つのレイヤーで取得できます。

1
david

私が覚えているように-シグモイド関数が使用されるのは、BPアルゴリズムに適合する微分が計算が簡単で、f(x)(1-f(x))のような単純なものだからです。私は正確に数学を覚えていません。実際には、導関数を持つ任意の関数を使用できます。

1
Anton

できるだけ簡単に説明させてください。

ニューラルネットワークは正しいパターン認識で使用されますか?また、パターン検出は非常に非線形な手法です。

引数のために、すべてのニューロンに対して線形活性化関数y = wX + bを使用し、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}勾配の消失による変化はほとんどありません。良いスコアを与えるのに十分

ケースCが発生した場合、分類/予測の問題はおそらく線形/ロジスティック回帰に基づいた単純な問題であり、そもそもニューラルネットワークを必要としなかったことを意味します。

NNの堅牢性やハイパーチューニングに関係なく、線形アクティベーション関数を使用すると、パターン認識の問題を必要とする非線形に取り組むことができなくなります

0
Kaustubh J