順伝播型ネットワーク

0.章の概要

この章では、多層パーセプトロン、出力層と損失関数、活性化関数について詳しく説明します。これらの要素は、ニューラルネットワークの学習と推論において基盤となるものであり、ネットワークの性能を大きく左右します。今後学んでいくディープラーニング全ての基礎となる内容のため、必ず押さえておきましょう。

1.多層パーセプトロン

学習キーワード: 全結合層、重み、バイアス

概要

単純パーセプトロン(Simple Perceptron)は、最も基本的なニューラルネットワークのモデルであり、入力層と出力層の2層から構成され、各ニューロンは前の層の全てのニューロンと結合されます。一方、多層パーセプトロン(Multilayer Perceptron)は、単純パーセプトロンの拡張版で、複数の隠れ層を追加して構成されます。この追加された隠れ層により、多層パーセプトロンは単純パーセプトロンよりも複雑な関数の近似が可能になります。


全結合層
Fully_Connected_Layer

全結合層(Fully Connected Layer)は、各ニューロンが前の層の全てのニューロンに接続されている層です。この層では、入力ベクトルと重み行列の積にバイアスを加え、次の層へと伝播します。数式で表すと以下のようになります。

\[ z = W \cdot x + b \]

ここで、 \(z\) は出力、 \(W\) は重み行列、 \(x\) は入力ベクトル、 \(b\) はバイアスベクトルであり、この出力 \(z\) は次の層の入力となります。

ディープラーニングにおける学習の目的は、適切な重みやバイアスを見つけることです。これらのパラメータを最適化することで、モデルはより正確な予測や分類を行うことができます。


重み、バイアス

重み(Weights)は、各接続の重要度を示すパラメータであり、学習過程で更新されます。バイアス(Bias)は、出力を調整するためのパラメータで、各ニューロンに対して一つ存在します。重みとバイアスの更新は、誤差逆伝播法(※次章にて説明)を用いて行われ、モデルの性能を向上させます。


関連用語の補足
  • ニューラルネットワーク:一般的な用語で、ニューロンの層を持つ計算モデルを指します。これには、全結合層、畳み込み層、リカレント層など、さまざまな種類の層が含まれます。
  • ディープラーニング:隠れ層が2層以上のニューラルネットワークを指します。
  • ノード:ニューラルネットワークにおける情報処理の基本単位で、入力を受け取り、計算を行い、出力を生成するニューロンのことです。
  • 学習:たくさんのデータを用いて適切な重み、バイアスを決定する過程のことを指します。(具体的なアルゴリズムは次章「深層モデルのための最適化」にて解説あり)

2.出力層と損失関数

学習キーワード: 回帰、平均二乗誤差(MSE)、平均絶対誤差(MAE)、2値分類、クロスエントロピー誤差、バイナリクロスエントロピー、多クラス分類、ソフトマックス関数、one-hotベクトル、マルチラベル分類、順序回帰

概要

このセクションでは、さまざまなタスクにおける出力層と損失関数の種類について説明します。出力層は、ネットワークが出力する値の形式を決定し、損失関数は予測と実際のラベルの違いを評価するために使用されます。


回帰

回帰タスクでは、連続的な値を予測します。出力層では、恒等関数(Identity Function)が使用され、入力値をそのまま出力します。数式で表すと、以下のようになります。

identity_function
\[ \hat{y}_i = x_i \]

ここで、\(x_i\)は入力値、\(\hat{y}_i\)は出力値です。

※値が変わらないのならわざわざ式として表記する必要ないのでは?と思うかもしれませんが、他タスク(2値分類、多値分類など)とネットワーク構造を比較しやすくするために定義しています。(一般的なモデル表記の統一のためです。)あまり深く考えずに流しましょう。

損失関数として一般的に使用されるのが平均二乗誤差(MSE)です。MSEは、実際の値と予測値の差の二乗の平均を計算します。数式で表すと、以下のようになります。

\[ \text{MSE} = \frac{1}{2N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 \]

ここで、\(y_i\)は実際の値、\(\hat{y}_i\)は予測値、\(N\)はサンプル数です。

MSEの微分は、以下の式で表されます。

\[ \frac{\partial \text{MSE}}{\partial \hat{y}_i} = \frac{1}{N} (y_i - \hat{y}_i) \]

ほかには平均絶対誤差(MAE)があり、これは実際の値と予測値の差の絶対値の平均を計算します。数式で表すと、以下のようになります。

\[ \text{MAE} = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i| \]

ここで、\(y_i\)は実際の値、\(\hat{y}_i\)は予測値、\(N\)はサンプル数です。

平均絶対誤差(MAE)と平均二乗誤差(MSE)の違いは、MAEは予測値と実際の値の差の絶対値を取るため、外れ値の影響を受けにくいという点です。一方、MSEは差の二乗を取るため、大きな誤差がある場合にはその影響を受けやすいという特徴があります。


2値分類

2値分類タスクでは、結果が2つのクラスのいずれかに分類されます。出力層では、シグモイド関数(Sigmoid Function)が使用されます。シグモイド関数は、入力値を0から1の間に変換します。数式で表すと、以下のようになります。

sigmoid
\[ \hat{y}_i = \frac{1}{1 + e^{-x_i}} \]

ここで、\(x_i\)は入力値、\(\hat{y}_i\)は出力値です。

損失関数としてバイナリクロスエントロピーがよく使用されます。数式で表すと、以下のようになります。

\[ \text{Binary Cross Entropy} = -\frac{1}{N} \sum_{i=1}^{N} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] \]

ここで、\(\hat{y}_i\)はクラス1に属する確率を表し、\(y_i\)は実際の値、\(N\)はサンプル数を表します。

バイナリクロスエントロピーの微分は、以下の式で表されます。

\[ \frac{\partial \text{Binary Cross Entropy}}{\partial \hat{y}_i} = \frac{1}{N} \left( \frac{\hat{y}_i - y_i}{\hat{y}_i (1 - \hat{y}_i)} \right) \]

多クラス分類タスクでは、one-hotベクトルが使用されることがあります。one-hotベクトルは、クラス数と同じ次元を持ち、正解のクラスに対応する要素が1で、それ以外の要素が0であるベクトルの事を指します。例えば、3クラスの分類タスクで、サンプルがクラス2に属する場合、one-hotベクトルは [0, 1, 0] のようになります。


多クラス分類

多クラス分類では、3つ以上のクラスが存在します。出力層では、ソフトマックス関数(Softmax Function)が使用され、入力値を各クラスの確率に変換します。数式で表すと、以下のようになり、各クラスの値を合計すると1になります。

\[ \hat{y}_j = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}} \]

ここで、\(z_j\)は出力層の第\(j\)ニューロンの出力、\(K\)はクラス数です。

ソフトマックス関数の微分は、以下の式で表されます。

\[ \frac{\partial \hat{y}_j}{\partial z_i} = \begin{cases} \hat{y}_j (1 - \hat{y}_j) & (i = j) \\ -\hat{y}_i \hat{y}_j & (i \neq j) \end{cases} \]

損失関数としてクロスエントロピー誤差が使用されます。クロスエントロピー誤差は、予測と実際のラベルの違いを評価します。数式で表すと、以下のようになります。

\[ \text{Cross Entropy Loss} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{K} y_{ij} \log(\hat{y}_{ij}) \]

ここで、\(y_{ij}\)はサンプル\(i\)のラベル\(j\)の確率、\(\hat{y}_{ij}\)は予測値です。

クロスエントロピー誤差の微分は、以下の式で表されます。

\[ \frac{\partial \text{Cross Entropy Loss}}{\partial \hat{y}_{ij}} = -\frac{y_{ij}}{\hat{y}_{ij}} \]

マルチラベル分類

マルチラベル分類では、各サンプルが複数のクラスに属する可能性があります。この場合、損失関数としては、各クラスに対してバイナリクロスエントロピー損失を計算し、合計します。数式で表すと、以下のようになります。

\[ \text{Total Loss} = \sum_{j=1}^{K} \text{Binary Cross Entropy}_j \]

ここで、\(\text{Binary Cross Entropy}_j\)は、クラス\(j\)に対するバイナリクロスエントロピー損失、\(K\)はクラス数を表します。

例えば、画像認識タスクで、画像が複数のオブジェクト(例えば、車と人)を含んでいる場合、各オブジェクトに対してバイナリクロスエントロピー損失を計算し、全ての損失を合計して最終的な損失を計算します。


順序回帰

順序回帰は、順序のあるカテゴリ(例えば、1, 2, 3など)を予測するタスクで、損失関数として順位相対エントロピーが良く使用されます。数式は以下の通りです。

\[\text{Ranking Loss} = -\frac{1}{N} \sum_{i=1}^{N} \log \frac{1}{\text{rank}_i}\]

ここで、\(\text{rank}_i\)は、正解ラベルの順位を表し、\(N\)はサンプル数を表します。

3.活性化関数

学習キーワード: シグモイド関数、温度パラメータ、勾配消失、ReLU、Leaky ReLU、GELU、tanh、双曲線関数

概要

活性化関数は、ニューラルネットワークの出力を非線形に変換するための関数です。非線形性を導入することで、ニューラルネットワークはより複雑なパターンを学習できるようになります。活性化関数がなければ、ただ足し算や掛け算を繰り返すだけで、1層のネットワークと同じ表現力しか持たず、層を重ねる意味がありません。


シグモイド関数

シグモイド関数は、以下のように定義されるS字型の関数です。

sigmoid
\[ \sigma(x) = \frac{1}{1 + e^{-x}} \]

この関数は出力が0と1の間に収束し、微分の計算も簡単であるため活性化関数として採用されましたが、勾配消失問題を引き起こすことが問題となっていました。特に、入力が大きく(または小さく)なりすぎると勾配が小さくなり、学習が困難になります。

シグモイド関数の微分は、自身を用いて以下の式で表されます。

diff_sigmoid
\[ \sigma'(x) = \sigma(x) \cdot (1 - \sigma(x)) \]

現在では、ReLUの登場により、シグモイド関数は活性化関数としてはあまり使われません。ただし、リカレントニューラルネットワーク(RNN)や出力層など、特定の領域ではまだ使用されています。

一般的なシグモイド関数の式は以下の通りであり、出力を調整するための温度パラメータ\(T\)が1の場合、上記で示した標準的なシグモイド関数になります。

\[\sigma(x) = \frac{1}{1 + e^{-x/T}}\]

ここで、\(\sigma(x)\)はシグモイド関数の出力、\(x\)は入力、\(T\)は温度パラメータを表します。


ReLU(Rectified Linear Unit)

ReLUは、最も広く使われる活性化関数の一つで、次のように定義されます。

relu
\[ \text{ReLU}(x) = \max(0, x) \]

ReLU関数は、微分値が定数なので、計算量を圧倒的に減らすことができ、計算速度を向上させるというメリットがあります。以下に微分した際のグラフを示します。

diff_relu
\[ \text{ReLU}'(x) = \begin{cases} 1 & (x > 0) \\ 0 & (x \leq 0) \end{cases} \]

この式から、ReLU関数の微分値は、入力が0より大きい場合は1、0以下の場合は0になります。

上図のように、出力が0以上の場合は微分値が1となり、勾配消失せずに逆伝播することができます。これによりシグモイド関数で問題であった勾配消失問題が軽減し、学習が効率よく進むようになりました。ただし、ReLU関数では負の入力に対しては出力が0になるため、学習中にニューロンが"死んで"しまうことがあります。


Leaky ReLU(Leaky Rectified Linear Unit)

Leaky ReLUは、ReLUの変種であり、負の入力に対して小さな勾配を持たせています。

leaky_relu
\[ \text{Leaky ReLU}(x) = \begin{cases} x & (x > 0) \\ \alpha x & (x \leq 0) \end{cases} \]

ここで、\(\alpha\)は小さな定数で通常は0.01を用います。

Leaky ReLUは、ReLUの"死んだ"ニューロン問題を解決し、学習速度を向上させるというメリットがあります。ただし、精度が上がることもあるが、必ず上がるわけではなく、モデルやデータセットによっては、ReLUと大差ない場合もあります。


GELU(Gaussian Error Linear Unit)

GELUは、ReLUと似た活性化関数ですが、より滑らかで非線形な特性を持っています。GELUは、以下の式で定義されます。

gelu
\[ \text{GELU}(x) = x \cdot \Phi(x) \]

ここで、\(\Phi(x)\)は標準正規分布の累積分布関数です。

GELUは、ReLUと比べて、負の入力に対する勾配が消失しないため、学習がより安定します。また、GELUはReLUよりも非線形な特性を持つため、モデルの表現力が向上します。

現在、GELUは主に自然言語処理や画像認識などの領域で使用されています。


tanh(hyperbolic tangent)

tanh関数は双曲線関数で、出力が-1から1の間に収束します。定義は次の通りです。

tanh
\[ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]

tanh関数はシグモイド関数に比べて勾配消失問題が起きにくいとされています。これは、シグモイド関数の微分値の最大値(入力が0の場合)が0.25であったのに対して、tanh関数は最大値が1になり、勾配が消失しにくいためです。

tanh関数の微分は、自身を用いて以下の式で表されます。

diff_tanh
\[ \tanh'(x) = 1 - \tanh^2(x) \]

現在、tanh関数は主に自然言語処理、画像認識、音声認識などの領域で使われています。


双曲線関数(Hyperbolic functions)

双曲線関数(Hyperbolic functions)は、双曲線に関連する数学的な関数で、三角関数の双曲線版と考えることができます。主に以下の2つの基本的な双曲線関数があります。

ハイパボリックサイン(sinh)
\[ \sinh(x) = \frac{e^x - e^{-x}}{2} \]
ハイパボリックコサイン(cosh)
\[ \cosh(x) = \frac{e^x + e^{-x}}{2} \]

これらの関数は、双曲線の方程式に基づいており、三角関数と同様の性質を持っています。例えば、以下の恒等式が成り立ちます。

\[ \cosh^2(x) - \sinh^2(x) = 1 \]

双曲線関数は、物理学や工学、特に相対性理論や波動方程式などの分野で重要な役割を果たしますが、ニューラルネットワークにおいては、活性化関数としてtanhがよく使用されています。


関連用語の補足
  • PReLU(Parametric ReLU):PReLU(Parametric ReLU)は、Leaky ReLUにおける \(α\) を学習可能なパラメータとして扱う活性化関数です。PReLUでは、負の入力に対する傾きをデータに基づいて最適化することができます。

キーワードまとめ

全結合層、重み、バイアス、回帰、平均二乗誤差(MSE)、平均絶対誤差(MAE)、2値分類、クロスエントロピー誤差、バイナリクロスエントロピー、多クラス分類、ソフトマックス関数、one-hotベクトル、マルチラベル分類、順序回帰、シグモイド関数、温度パラメータ、勾配消失、ReLU、Leaky ReLU、GELU、tanh、双曲線関数