前の演習で、ネットワークに隠れ層を追加するだけでは非線形性を表現するのに十分ではないことを確認しました。線形演算に対して実行される線形演算は、依然として線形です。
値間の非線形関係を学習するようにニューラルネットワークを構成するにはどうすればよいでしょうか?モデルに非線形数学演算を挿入する方法が必要です。
もしこれがどこかで見たことがあるように思えるなら、それはこのコースの前半で、線形モデルの出力に非線形数学演算を適用したからです。ロジスティック回帰モジュールでは、線形回帰モデルの出力をシグモイド関数に渡すことで、0から1までの連続値(確率を表す)を出力するようにモデルを改良しました。
同じ原理をニューラルネットワークにも適用できます。先ほどの演習2で使用したモデルをもう一度見てみましょう。今回は、各ノードの値を出力する前に、まずシグモイド関数を適用します。
再生ボタンの右側にある「>| 」ボタンをクリックして、各ノードの計算をステップ実行してみましょう。グラフの下の「計算」パネルで、各ノードの値を計算するために実行された数学演算を確認できます。各ノードの出力は、前のレイヤーのノードの線形結合のシグモイド変換になり、出力値はすべて0と1の間に収まっていることに注意してください。
ここで、シグモイドはニューラル ネットワークの活性化関数として機能し、値がニューラル ネットワークの次の層の計算に入力として渡される前に、ニューロンの出力値を非線形変換します。
活性化関数を追加したので、層を追加することによる効果は大きくなります。非線形性を非線形性の上に重ねることで、入力と予測出力の間の非常に複雑な関係をモデル化できます。簡単に言うと、各層は生の入力に対して、より複雑で高次の関数を効果的に学習していることになります。この仕組みについてより深く理解したい場合は、 Chris Olahの優れたブログ記事をご覧ください。
一般的な活性化関数
活性化関数として一般的に使用される 3 つの数学関数は、シグモイド、tanh、ReLU です。
シグモイド関数(上記で説明)は入力$x$に対して次の変換を実行し、0〜1の出力値を生成します。
\[F(x)=\frac{1} {1+e^{-x}}\]
この関数のプロットは次のようになります。

tanh(「双曲線正接」の略)関数は入力$x$を変換して-1から1の間の出力値を生成します。
\[F(x)=tanh(x)\]
この関数のプロットは次のようになります。

修正線形ユニット活性化関数 (略してReLU ) は、次のアルゴリズムを使用して出力を変換します。
- 入力値 $x$ が 0 未満の場合、0 を返します。
- 入力値 $x$ が 0 以上の場合は、入力値を返します。
ReLU は、max() 関数を使用して数学的に表すことができます。
この関数のプロットは次のようになります。

ReLUは、ニューラルネットワークの学習中に勾配消失問題の影響を受けにくいため、シグモイド関数やtanh関数などの滑らかな関数よりも活性化関数として適していることが多いです。また、ReLUはこれらの関数よりも計算がはるかに簡単です。
その他の活性化関数
実際には、あらゆる数学関数が活性化関数として機能します。 \(\sigma\) 活性化関数を表します。ネットワーク内のノードの値は次の式で与えられます。
Kerasは多くの活性化関数をすぐに使える形でサポートしています。とはいえ、まずはReLUから始めることをお勧めします。
まとめ
次のビデオでは、ニューラル ネットワークの構築方法についてこれまでに学習した内容をすべて要約します。
これで、私たちのモデルには、ニューラル ネットワークについて言及するときに通常意味する標準的なコンポーネントがすべて揃いました。
- ニューロンに類似した、層状に編成されたノードのセット。
- 各ニューラルネットワーク層とその下の層との間の接続を表す、学習された重みとバイアスのセット。下の層は、別のニューラルネットワーク層、または他の種類の層である場合があります。
- レイヤー内の各ノードの出力を変換する活性化関数。レイヤーごとに異なる活性化関数を持つ場合があります。
注意: ニューラル ネットワークは必ずしも特徴クロスよりも優れているわけではありませんが、ニューラル ネットワークは多くの場合にうまく機能する柔軟な代替手段を提供します。