AIの表現力が爆発!「活性化関数」とシグモイド関数の役割とは?
こんにちは。ゆうせいです。
前回は、AIの計算力を支える「行列の積」についてお話ししました。
データをまとめて計算する、いわば「工場のベルトコンベア」のような役割でしたね。
しかし、実はこのベルトコンベア(行列計算)を並べただけでは、AIは賢くなれないという衝撃的な事実をご存知でしょうか。
どんなに高性能なGPUを使って何百層ものネットワークを作っても、それだけでは「ただの掛け算」になってしまうのです。
そこで登場するのが、今回解説する「活性化関数(かっせいかかんすう)」です。
これこそが、AIに複雑な思考能力を与え、人間のような柔軟な判断を可能にする「魔法のスパイス」なのです。
「関数」と聞いて身構える必要はありません。
入力されたデータを「次へ通すか、通さないか」を決める、門番のような役割だと思ってください。
今回はその中でも、歴史的にも重要な「シグモイド関数」を例に、その仕組みを紐解いていきましょう。
活性化関数ってなに?
一言で言うと、ニューロン(神経細胞)が「興奮するかどうか」を決めるスイッチのことです。
人間の脳の中では、ニューロン同士が電気信号を送り合っています。
でも、入ってきた信号をすべてそのまま次のニューロンに送っているわけではありません。
「これは重要な情報だ!」と判断したときだけ、ビビッと強く反応して信号を送ります。逆にどうでもいい情報は無視したり、弱めたりします。
この「メリハリ」をつける役割を、数式で表現したのが活性化関数です。
もし活性化関数がなかったら?
ここが一番のポイントです。
前回までの「行列の積」は、数学的には「線形変換」と呼ばれます。
これは、グラフで言うと「直線を引く」とか「平面を回転させる」といった、素直な変形しかできません。
もし活性化関数がないと、どんなに複雑なニューラルネットワークを作っても、結局は「入力に大きな数字を掛け算しただけ」という単純な式に変形できてしまいます。
これでは、猫の画像の複雑な曲線や、言葉の微妙なニュアンスといった「一筋縄ではいかないデータ」を表現することができません。
そこで、活性化関数という「非線形(直線ではない動き)」を間に挟むことで、AIはぐにゃぐにゃと曲がった複雑な境界線を引けるようになるのです。
代表選手「シグモイド関数」
活性化関数にはいろいろな種類がありますが、まずは基本中の基本である「シグモイド関数」を見てみましょう。
どんな形?
シグモイドとは「S字形」という意味です。
その名の通り、グラフにすると滑らかなS字カーブを描きます。
この関数の最大の特徴は、どんなに大きな数字も、どんなに小さな数字も、必ず から
の間に押し込めてしまうことです。
- ものすごく大きな数字
ほぼ
になる
- ものすごく小さな数字(マイナス)
ほぼ
になる
くらいの数字
ちょうど
くらいになる
数式を見てみよう
数式は少し複雑に見えますが、形だけ眺めてみてください。
ここで出てくる は「ネイピア数」と呼ばれる数学の定数(約2.718)です。
分母に があるおかげで、入力
が大きくなると分母が
に近づき、全体が
になります。
逆に がマイナスに大きくなると、分母が巨大になり、全体が
に近づくのです。
なぜシグモイド関数が使われるの?
1. 確率として扱える
出力が必ず から
の間に収まるというのは、とても便利です。
なぜなら、これを「確率」として解釈できるからです。
例えば、AIが「この画像は犬ですか?」という問いに対して、 という数字を出したとします。
これは「80%の確率で犬だよ!」と言っているのと同じです。
なら「たぶん違う(10%)」という判断になります。
この性質のおかげで、シグモイド関数は最終的な判定を行う出力層でよく使われます。
2. 微分ができる(学習に必要)
AIが賢くなる(学習する)ためには、「微分(びぶん)」という計算が欠かせません。
シグモイド関数は、カクカクしていない滑らかな曲線なので、どこでもきれいに微分ができます。
これにより、「どのくらいパラメータを修正すればいいか」を数学的に計算することができるのです。
メリットとデメリット
完璧に見えるシグモイド関数ですが、弱点もあります。
メリット
先ほど述べたように、出力を確率( )に変換できるため、結果が人間に分かりやすいです。また、自然界の現象(生物の反応など)に近い滑らかな動きを表現できます。
デメリット
最大の弱点は「勾配消失(こうばいしょうしつ)問題」の原因になりやすいことです。
入力が極端に大きかったり小さかったりすると、グラフの傾き(勾配)がほぼ になってしまいます。
こうなると、AIは「これ以上どう修正していいかわからない」状態になり、学習がストップしてしまうのです。
そのため、現在の中間層(隠れ層)では、よりシンプルな「ReLU(レル)関数」というものが主流になっています。
Pythonで確認してみよう
Pythonでシグモイド関数を計算してみましょう。
自分でも実装できますが、数式通りに書くだけです。
import numpy as np
# シグモイド関数の定義
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# データを入力してみる
input_data = np.array([-10.0, -1.0, 0.0, 2.0, 10.0])
output_data = sigmoid(input_data)
print(output_data)
# 出力結果のイメージ(丸めています)
# [0.000045, 0.2689, 0.5, 0.8807, 0.99995]
見てください。
はほぼ
に、
はほぼ
に変換されましたね。
そして はきれいに
になっています。
どんな数字が来ても、この範囲にギュッと収めてくれるのがシグモイド関数の仕事です。
まとめ
いかがでしたか。
活性化関数とは、入力信号の強さを調整し、AIに「非線形」という表現力を与えるためのフィルターでした。
その中でもシグモイド関数は、データを から
の確率に変換してくれる、とても直感的な関数です。
「ただの計算機」だったAIが、この関数を通すことで、少しだけ「生き物のような判断」ができるようになる。そう考えるとワクワクしませんか。
さて、ニューラルネットワークの形(順伝播)については大体わかってきました。
次はいよいよ、AIが「間違いを直して賢くなる」プロセスに入ります。
次回は、学習の羅針盤となる「損失関数(そんしつかんすう)」について解説します。
AIはどうやって「自分の答えが間違っている」と気づくのでしょうか。
その秘密に迫ります。楽しみにしていてくださいね!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。