活性化関数はなぜ必要なのか?|ニューラルネットワークに非線形性が必要な理由

AI

はじめに

前回の記事では、人工ニューロンが「重み付きの足し算 → バイアスによる調整 → 活性化関数による変換」という流れで出力を計算することを説明しました。

人工ニューロンの計算は、次の式で表せます。

$$
y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)
$$

ここで、ひとつ疑問が生まれます。なぜ、重み付きの足し算とバイアスだけではダメなのでしょうか。なぜ、わざわざ活性化関数を通す必要があるのでしょうか。

実は、活性化関数を使わずにニューロンを何層も重ねても、ニューラルネットワークの表現力は本質的には増えません。

活性化関数の重要な役割は、ニューラルネットワークに「非線形性」を与えることです。非線形性があることで、ニューラルネットワークは単純な直線では表せない複雑な関係を表現できるようになります。

この記事では、「非線形とは何か?」というところから、なぜニューラルネットワークに活性化関数が必要なのかを順番に見ていきます。

この記事でわかること

この記事では、次の内容の理解を目指します。

  • 活性化関数が何をしているのか
  • 線形と非線形の違い
  • 活性化関数がないと何が起こるのか
  • 層を重ねても1つのアフィン変換になってしまう理由
  • 非線形性によって何ができるようになるのか
  • 代表的な活性化関数には何があるのか

1.活性化関数とは何か?

まず、前回の記事で説明した人工ニューロンの計算を振り返ってみましょう。入力を \(\boldsymbol{x}\)、重みを \(\boldsymbol{w}\)、バイアスを \(b\) とすると、まず次の計算を行います。

$$
z=\boldsymbol{w}\cdot\boldsymbol{x}+b
$$

そして、この \(z\) を活性化関数 \(f\) に入力して、\(y=f(z)\) という出力を求めます。

たとえば、ReLU関数では、入力が正ならその値をそのまま出力し、\(0\) 以下なら \(0\) を出力します。

$$
f(z)=\max(0,z)
$$

したがって、\(z=3\) なら出力は \(3\)、\(z=-2\) なら出力は \(0\) です。活性化関数によって、重みとバイアスで計算した値を、そのまま次のニューロンへ渡すのではなく、別の規則に従って変換できます。

活性化関数は、重み付き和とバイアスによって求めた値を変換し、ニューロンの出力を決める関数です。

しかし、活性化関数の役割は、単に値を変換することだけではありません。

2.「線形」と「非線形」とは何か?

活性化関数が必要な理由を理解するには、「線形」と「非線形」の違いを知る必要があります。

2.1.線形な関係とは?

まず、簡単な例として \(y=2x\) という関数を考えてみましょう。グラフにすると、原点を通る直線になります。

ニューラルネットワークではバイアスも使うため、\(y=2x+1\) のような形もよく現れます。これは厳密には「アフィン変換」と呼ばれ、線形変換とは区別されます。

この記事では、重みとバイアスによる計算を「アフィン変換」と呼び、活性化関数によって生まれる非線形な関係との違いを考えていきます。

2.2.非線形な関係とは?

一方で、世の中の関係がすべて直線で表せるわけではありません。たとえば、\(y=x^2\) は曲線になります。

また、ReLU関数も、次のように途中で折れ曲がるため、1本の直線では表せません。

$$
f(x)=\max(0,x)
$$

線形な関係と非線形な関係の違いを、グラフで比較してみましょう。直線で表せる関係と、途中で折れ曲がるReLU関数の違いがわかります。

線形関数と非線形関数の比較

非線形な関係とは、1つのアフィン変換では表せない関係です。グラフが曲がる場合だけでなく、ReLU関数のように途中で折れ曲がる場合も含まれます。ニューラルネットワークでは、この非線形性が複雑な関係を表現するために重要になります。

では、活性化関数を使わず、アフィン変換だけを何層も重ねるとどうなるのでしょうか。

3.活性化関数がないと何が起こるのか?

ここが今回の記事で最も重要なポイントです。簡単にするため、入力 \(x\) を1つだけ持つニューラルネットワークを考えてみましょう。

1層目で、次の計算をするとします。

$$
z_1=w_1x+b_1
$$

そして、活性化関数を使わず、その結果をそのまま2層目に入力します。

$$
y=w_2z_1+b_2
$$

ここに、1層目の \(z_1\) を代入してみます。

$$
\begin{aligned}
y
&=w_2(w_1x+b_1)+b_2\\
&=w_2w_1x+w_2b_1+b_2
\end{aligned}
$$

ここで、\(W=w_2w_1\)、\(B=w_2b_1+b_2\) とまとめると、次のようになります。

$$
y=Wx+B
$$

2層の計算をしたはずなのに、結局は「重み \(W\) とバイアス \(B\) を使った1回の変換」と同じ形になってしまいました。

活性化関数を使わずに重みとバイアスによる変換を何層重ねても、最終的には1つのアフィン変換にまとめられます。

3.1.3層、4層と増やしても同じ

では、さらに層を増やしたらどうでしょうか。3層にすると、次のように計算します。

$$
\begin{aligned}
z_1&=w_1x+b_1\\
z_2&=w_2z_1+b_2\\
y&=w_3z_2+b_3
\end{aligned}
$$

この場合も、式を展開すれば最終的には \(y=Wx+B\) という形にまとめられます。

4層、5層、100層と増やしても同じです。つまり、活性化関数がなければ、ネットワークを深くしても1つのアフィン変換で表せるため、非線形な関係を表現できません。

この関係を図で確認してみましょう。活性化関数がなければ、複数の層を通して計算しても、最終的には1回のアフィン変換と同じ結果になることがわかります。

活性化関数なしの場合はまとめられる

このように、層を増やすだけでは、複雑な関係を表現できるようになるとは限りません。重要なのは、層と層の間に非線形な変換を加えることです。

4.活性化関数を入れると何が変わるのか?

そこで、各層の間に非線形な活性化関数を入れます。たとえば、1層目では次のように計算します。

$$
\begin{aligned}
z_1&=w_1x+b_1\\
h_1&=f(z_1)
\end{aligned}
$$

2層目では、1層目の出力 \(h_1\) を受け取って計算します。

$$
\begin{aligned}
z_2&=w_2h_1+b_2\\
y&=f(z_2)
\end{aligned}
$$

これを1つの式にすると、次のようになります。

$$
y=f\left(w_2f(w_1x+b_1)+b_2\right)
$$

途中に非線形な活性化関数 \(f\) が入ったため、先ほどのように単純な \(y=Wx+B\) の形には、一般にはまとめられません。つまり、非線形な活性化関数を組み込むことで、1つのアフィン変換では表せない関係も表現できるようになります。

実際にどの程度複雑な関係を表現できるかは、層の数やニューロンの数、活性化関数の種類などによって変わります。

各層の間に非線形な活性化関数を入れることで、ネットワーク全体を単純な1つのアフィン変換では表せないようにできます。これによって、複雑な関係を表現する能力が生まれます。

5.非線形性があると何ができるのか?

では、非線形性を持つことで、ニューラルネットワークは何を表現できるようになるのでしょうか。たとえば、2種類のデータを分類する問題を考えてみます。

5.1.直線で分けられる場合

○と×のデータがきれいに分かれている場合は、1本の直線を境界として引けば、2種類のデータを分けられます。このような問題であれば、重みとバイアスによる計算結果にしきい値を設けることで、分類できます。

ただし、これは分類のためにしきい値で判定しているのであって、重みとバイアスによる変換そのものが非線形になったわけではありません。

5.2.直線では分けられない場合

一方、データがもっと複雑に分布している場合を考えてみましょう。たとえば、○のデータを×のデータが取り囲んでいるような分布では、1本の直線だけで両者をきれいに分けることはできません。

この2つの場合を図で比較してみましょう。直線で分けられるデータと、曲がった境界が必要になるデータの違いがわかります。

直線で分類できるかどうか

このような問題では、曲がった境界や複雑な境界を表現する必要があります。非線形な活性化関数を使い、複数の層を組み合わせることで、ニューラルネットワークはこのような複雑な関係を表現できるようになります。

非線形な活性化関数を使うことで、ニューラルネットワークは直線や平面だけでは表せない複雑な関係を表現できるようになります。

6.では、どんな活性化関数を使うのか?

ここまで、ニューラルネットワークに非線形な活性化関数が必要な理由を見てきました。では、実際にはどのような活性化関数が使われているのでしょうか。

代表的なものには、次のような関数があります。

  • ステップ関数:ある値を境界に、出力を切り替える
  • シグモイド関数:出力を \(0\) から \(1\) の範囲に変換する
  • tanh関数:出力を \(-1\) から \(1\) の範囲に変換する
  • ReLU関数:\(0\) 以下を \(0\)、正の値をそのまま出力する
  • ソフトマックス関数:複数の出力を、合計が \(1\) になる非負の値に変換する

これらはすべて同じ目的で使われるわけではありません。ニューラルネットワークのどの層で使うのか、どのような問題を解くのかによって、適した関数が異なります。

なお、ソフトマックス関数は複数の値をまとめて変換する関数で、主に多クラス分類の出力層で使われます。その出力は確率分布として扱われますが、必ずしも実際の正解確率と一致するわけではありません。

活性化関数にはさまざまな種類があり、目的や層の役割に応じて使い分けます。それぞれの仕組みや特徴については、このシリーズで後ほど詳しく見ていきます。

7.活性化関数はどこに入るのか?

最後に、ニューラルネットワーク全体の中で活性化関数がどこに入るのかを整理しておきましょう。ニューロンでは、まず入力に重みを掛け、バイアスを加えて \(z=\boldsymbol{w}\cdot\boldsymbol{x}+b\) を計算します。

そして、活性化関数を通して \(y=f(z)\) という出力を求めます。この出力が、次の層のニューロンへの入力になります。

つまり、ニューラルネットワークでは、次の計算を層から層へと順番に繰り返していきます。

入力 → 重み付き和+バイアス → 活性化関数 → 次の層

この「入力から出力へ向かって順番に計算していく処理」を、順伝播(forward propagation)と呼びます。次回は、この順伝播について、複数のニューロンを持つニューラルネットワークを使って具体的に見ていきます。

まとめ

今回、見てきたことをまとめます。

  • 活性化関数は、重み付き和とバイアスによって求めた値を変換する
  • 線形変換やアフィン変換だけでは、表現できる関係に限界がある
  • アフィン変換を何層重ねても、1つのアフィン変換にまとめられる
  • 非線形な活性化関数を挟むことで、層を重ねる意味が生まれる
  • 非線形性によって、直線や平面だけでは表せない複雑な関係を表現できる
  • 活性化関数にはReLUやシグモイドなどさまざまな種類がある

活性化関数が必要なのは、ニューラルネットワークに非線形性を与えるためです。活性化関数がなければ、どれだけ層を重ねても1つのアフィン変換にまとめられてしまいます。

非線形な活性化関数を各層に入れることで、ニューラルネットワークは層を重ねながら複雑な関係を表現できるようになります。

では、実際のニューラルネットワークでは、入力された値が複数の層をどのように通って出力まで計算されるのでしょうか。次回は、「ニューラルネットワークの順伝播とは?」というテーマで、入力から出力までの計算を具体的に見ていきます。

関連記事

▶ 前回:ニューロンは何を計算しているのか?|重み・バイアス・活性化関数の役割
ニューロンは何を計算しているのか?|重み・バイアス・活性化関数の役割
ニューラルネットワークのニューロンは何を計算しているのでしょうか?重み・バイアス・活性化関数の役割を、具体的な計算例と図を使ってわかりやすく解説。人工ニューロンの仕組みから、学習によって重みとバイアスを調整する基本的な考え方まで理解できます。
▶ 前々回:ニューラルネットワークとは何か?|人間の脳をヒントにしたAIの仕組み
ニューラルネットワークとは何か?|人間の脳をヒントにしたAIの仕組み
ニューラルネットワークとは何か?人間の脳をヒントにしたAIの仕組みを初心者向けに解説。入力層・隠れ層・出力層の役割から、重み・バイアス・活性化関数による計算、学習の基本的な仕組みまで、図と具体例を使ってわかりやすく説明します。
▶ 次回:ニューラルネットワークの順伝播とは?|入力から出力までの計算を理解する
ニューラルネットワークの順伝播とは?|入力から出力までの計算を理解する
ニューラルネットワークの順伝播とは何か?入力層・中間層・出力層の役割から、重み・バイアス・活性化関数を使った計算の流れまで、具体的な数値例と図でわかりやすく解説します。ReLUによる値の変化や、順伝播と学習の違いも紹介。AI初心者でも仕組みを理解できます。

シリーズ全体を理解する

▶ ディープラーニングの基礎からCNNまでを体系的に学びたい

(準備中)

Phase 1|ニューラルネットワークの基礎をまとめて理解する

▶ ニューラルネットワークの仕組みを基礎から理解したい
ニューラルネットワークの仕組みを基礎から理解する|ニューロン・活性化関数・順伝播
ニューラルネットワークの仕組みを初心者向けに図解。ニューロンの重み・バイアス、活性化関数の役割、順伝播の計算、行列による表現まで、ディープラーニングの基礎を具体例とともにわかりやすく解説します。

関連書籍

活性化関数やニューラルネットワークの仕組みをさらに詳しく学びたい方には、次の書籍がおすすめです。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 | 斎藤 康毅 |本 | 通販 | Amazon
Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...
Pythonによるディープラーニング (Compass Booksシリーズ) | François Chollet, 巣籠悠輔, 株式会社クイープ |本 | 通販 | Amazon
AmazonでFrançois Chollet, 巣籠悠輔, 株式会社クイープのPythonによるディープラーニング (Compass Booksシリーズ)。アマゾンならポイント還元本が多数。François Chollet, 巣籠悠輔, ...
物体・画像認識と時系列データ処理入門 [TensorFlow2/PyTorch対応第2版] NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング | チーム・カルポ |本 | 通販 | Amazon
Amazonでチーム・カルポの物体・画像認識と時系列データ処理入門 NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング。アマゾンならポイント還元本が多数。チーム・カルポ作品ほか、お急ぎ便対象商品は当...

コメント

タイトルとURLをコピーしました