🐻‍❄️

【活性化関数】03 活性化関数の重要ポイント

2024/03/04に公開

はじめに

前回までの内容で、活性化関数の概要と、種類について紹介してきました。

↓ Past... ↓
https://zenn.dev/nekoallergy/articles/ml-basic-act-02

今回は、活性化関数の注意点を解説していきます。

一言で言うと、活性化関数は、「どのような形のグラフになっているか」が非常に重要です。もっというと、活性化関数は、「非線形」な変換 である必要があります。

この「非線形」という用語について、詳しく、わかりやすく解説していきます。

  1. 線形と非線形のイメージ
  2. 線形と非線形って?
  3. 活性化関数は非線形変換

活性化関数は、ニューラルネットワークの性能を大きく左右する要素であり、非線形性がその鍵を握ります。

ぜひ最後までご覧ください。

↓ 動画でも視聴できます ↓
https://www.youtube.com/watch?v=AwkjpCbczzc

線形と非線形のイメージ

はじめに、非線形について簡単に紹介します。

簡単にいうと、線形=まっすぐ、非線形=グニャグニャ というイメージです。

活性化関数のグラフの形状を見てみましょう。グラフを見ると、まっすぐなグラフは無く、全部グニャグニャかカクカクなグラフになっていることがわかります。

これが、非線形なグラフという意味です。

線形と非線形って?

さて、非線形のイメージがなんとなく分かったところで、もう一つ重要なポイントを理解しましょう。それは、活性化関数は必ず、非線形なグラフでなければならない、という点です。

順を追って理解していきましょう。

ニューラルネットワークは入力された値をいろいろ変換(計算)して、最終的な出力の値を導き出します。この時に行う変換を詳しく紐解くと、線形変換と、非線形変換を組み合わせたもの、ということが分かります。

ニューラルネットワークの数字の変換は、前回述べたとおりです。

  • Step1:「重み」を掛け算する。
  • Step2:「ニューロンの値」を足し算する。
  • Step3:「活性化関数」による変換を行う。

この流れで進んでいきます。

この時の「重みがかけられる」という計算と「各ニューロンの足し合わせ」という計算は「線形」な計算にあたります。

たとえば、前ニューロンの値を X、次ニューロンの値を Y、重みを 2 とします。重みの掛け算は、Y = 2X  という式で表せます。値を2倍するという、単純な変換です。

これをグラフにすると、キレイな右肩上がりのまっすぐのグラフになります。つまり、入力と出力が「比例」しています。このように、入力と出力が比例の関係にあると、「線形」といえます。

一方で、入力と出力が比例していなかったら「非線形」と呼びます。

活性化関数は非線形変換

さて、以上を踏まえ、活性化関数は、非線形変換である必要があります。

理由は、「ニューラルネットワークの層を増やす(深くする)意味がなくなってしまうから」です。

簡単にいうと、

  • 「活性化関数を線形変換にすると、それって重みと同じ役割じゃん?」
  • 「線形変換はひとつにまとめて計算できるから、活性化関数の意味がなくなるよ?」

ということです。

何度もおさらいですが、ニューラルネットワークの数字の変換は3つのステップで進みます。そして、この処理が層の数だけ行われます。

たとえば、入力層ー中間層ー中間層ー中間層ー出力層 という ニューラルネットワークがあったとします。

この場合、数字の変換に着目すると、重みを掛け算 → 各ニューロンを足し算 → 活性化関数の変換 という処理が、4回繰り返されるということです。

さて、このとき、線形か、非線形か、に着目してみましょう。

  • 1 回目: 線形変換 → 線形変換 → 非線形変換
  • 2 回目: 線形変換 → 線形変換 → 非線形変換
  • 3 回目: 線形変換 → 線形変換 → 非線形変換
  • 4 回目: 線形変換 → 線形変換 → 非線形変換

ここで 1 つポイントがあります。

線形変換は、何度繰り返し変換しても、ひとつの線形変換で表現することができる、という点です。

たとえば、次のような数式を考えます。

Y = 2 \* (2 \* (4 \* (X) + 5) + 1) + 3

この式は、線形変換を 3 回行っています。

ぱっと見難しそうに見えますが、この式を計算していくと、

Y = 16 (X) + 25

というひとつの線形変換で事足りてしまいます。

つまりもし、活性化関数が線形変換だったら、ニューラルネットワークの層数を、10 層にしても、100 層にしても、1000 層にしても、1 層分にしかならない、ということです。

もう一つ、例を交えてみてみましょう。

たとえば、「入力の値を 5 倍にして出力する」という活性化関数があったとします。入力の値を 5 倍にして出力する関数とは、Y = 5X なので、線形な変換です。

つまり、活性化関数としては NG です。しかしここでは、あえて「入力の値を 5 倍にして出力する」という活性化関数を考えてみましょう。

こうすると、全ての処理が線形変換になってしまいます。つまり、さきほどの式と同じように、ひとつの式と同じ意味になってしまいます。

ディープラーニングは、ニューラルネットワークの層の数をたくさん増やす(層を深くする)ことで、精度が上がっていきます。

しかし、もし活性化関数が線形関数だった場合、ニューラルネットワークの層を増やす(深くする)意味がなくなってしまい、精度は上がりません。

これが、活性化関数は非線形でないとダメな理由です。

まとめ

活性化関数について、深く解説していきました。

活性化関数の役割や種類、重要性などが理解できたのではないでしょうか?

今回紹介したほかにも、活性化関数はたくさんの種類があり、日々進化しています。

興味がある方は、是非調べてみてください。

人工知能/AI/機械学習をもっと詳しく

https://zenn.dev/nekoallergy/books/904df952389317
ニューラルネットワークの基本を知りたいかたは、こちら ↑ の本も併せてご覧ください。


ねこアレルギーのAI

ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。



Created by NekoAllergy

Discussion