活性化関数:ニューラルネットワークに非線形性を与える
ニューラルネットワークの各神経細胞が使う活性化関数を学びます。基礎層では、活性化関数が果たす役割、つまり「まっすぐな関係しか表せない計算に、曲がりを持ち込む」ことをつかみます。深掘り層では、シグモイド関数・tanh関数・ReLU関数・Leaky ReLU関数・ソフトマックス関数のそれぞれの形と使い分けを数式も交えて説明できるようになります。
ねらい
このレッスンでは、ニューラルネットワークの各神経細胞が使う活性化関数(かっせいかかんすう)を学びます。
基礎
「活性化関数は、まっすぐな関係しか表せない計算に、曲がりを持ち込む役目を果たす」という全体像をつかみます。
1. 活性化関数は、計算に「曲がり」を持ち込みます
活性化関数の役割を一言でいうと、計算にまっすぐでない要素を持ち込むことです。
重みをかけて足し合わせるだけの計算は、まっすぐな関係しか表せません。入力を2倍にすれば出力も比例して変わる、というような素直な関係です。このまっすぐな関係を線形(せんけい)といいます。
もし活性化関数を使わず、まっすぐな計算だけを何層重ねても、全体はやはり一つのまっすぐな計算にまとまってしまいます。層を深くした意味がなくなるのです。そこで、各層の計算のあとに、まっすぐでない関数を一つはさみます。まっすぐでない性質を非線形(ひせんけい)といいます。活性化関数が非線形性を持ち込むおかげで、層を重ねた効果が生まれ、複雑なパターンを表せるようになります。
身近なたとえでいうと、まっすぐな計算は「入れた分だけ比例して出てくる自動販売機」のようなものです。活性化関数は、そこに「ある量を超えたら強く反応する」「マイナスは受け付けない」といった、素直でない反応を加える部品にあたります。この素直でなさが、豊かな判断を生みます。
ポイント
活性化関数は、まっすぐな計算に非線形性を持ち込みます。これがなければ、層をいくら重ねても一つのまっすぐな計算にまとまってしまい、深くした意味がなくなります。
ここまでの要点
- 重みをかけて足し合わせるだけの計算は、まっすぐな関係しか表せません。
- 活性化関数がまっすぐでない性質を持ち込むおかげで、層を重ねた効果が生まれ、複雑なパターンを表せます。
まずは全体像をつかめれば十分という人は、ここで区切って大丈夫です。「活性化関数は計算に曲がりを持ち込む部品」と押さえられていれば、この先の深掘りに進む土台はできています。
発展
ここからは、代表的な活性化関数の形と使い分けを数式も交えて見ます。
2. シグモイド関数と tanh 関数
はじめに、初期からよく使われてきた二つの関数を見ます。
シグモイド関数は、どんな入力もなめらかに0から1のあいだの値へ押し込める関数です。式で書くと、シグモイド関数(入力)= 1 ÷ ( 1 + ネイピア数の「マイナス入力」乗 )となります。
読み下すと、シグモイド関数の出力は、1を1に「ネイピア数のマイナス入力乗」を足したもので割った値です。ネイピア数とは、およそ2.718の決まった数です。入力が大きなプラスのときは出力が1に近づき、大きなマイナスのときは0に近づき、入力が0のときはちょうど0.5になります。グラフはなめらかなS字の形を描きます。0から1に収まるため、出力を「その度合い」として読み取りやすいのが利点です。
tanh関数(ハイパボリックタンジェント関数)は、シグモイド関数と似たS字ですが、出力の範囲がマイナス1からプラス1になります。入力が0のとき出力も0になり、原点を中心とした形になります。出力の中心が0にそろうため、シグモイド関数より学習が進みやすい場面があります。
ただし、シグモイド関数とtanh関数には共通の弱点があります。入力が大きくプラスやマイナスに振れた領域では、グラフがほぼ平らになり、変化がとても小さくなります。この平らな領域が、層を深くしたときに学習が進みにくくなる原因になります。これを勾配消失問題(こうばいしょうしつもんだい)といい、後の誤差逆伝播法を学ぶレッスンでくわしく扱います。ここでは、平らな領域が学習をさまたげることがある、とだけ押さえてください。
理解の確認
シグモイド関数は入力を0から1へ、tanh関数はマイナス1からプラス1へ、なめらかに押し込めるS字の関数です。どちらも入力が大きく振れた領域では平らになり、学習が進みにくくなる原因を持ちます。
3. ReLU 関数と Leaky ReLU 関数
シグモイド関数やtanh関数の弱点を受けて、より広く使われるようになったのがReLU関数(レルーかんすう)です。
ReLU関数は、とても単純な関数です。入力がプラスのときはそのまま出力し、入力がマイナスのときは0を出力します。式で書くと、ReLU関数(入力)= 0 と 入力 のうち大きいほう、となります。入力と0を見くらべて大きいほうを選ぶ、という意味です。プラスの領域では出力が入力にまっすぐ比例するため、その領域では平らにならず、シグモイド関数のような勾配消失問題が起こりにくくなります。計算も単純で速いため、多くのネットワークで標準的に使われます。
ただしReLU関数にも弱点があります。入力がマイナスの領域では出力がつねに0になるため、一度その領域に入り込んだ神経細胞が、学習の途中でまったく反応しなくなることがあります。
この弱点をやわらげたのがLeaky ReLU関数(リーキーレルーかんすう)です。「リーキー」は「わずかに漏れる」という意味です。Leaky ReLU関数は、入力がマイナスのときも0にはせず、ごくわずかな傾きをつけて、少しだけ値を通します。マイナス側でも完全には反応が止まらないため、神経細胞が反応しなくなる問題を起こしにくくなります。
理解の確認
ReLU関数は、プラスの入力はそのまま、マイナスの入力は0にする単純な関数で、勾配消失問題が起こりにくく計算も速いのが利点です。Leaky ReLU関数は、マイナス側でもわずかに値を通すことで、神経細胞が反応しなくなる問題をやわらげた改良版です。
動かして確かめる
4つの関数を、下のトレーナーで実際に切り替えて確かめてみましょう。シグモイドとtanhは入力を端まで 動かすと平らになり傾きを失います。ReLUはマイナス側で傾きがちょうど0になりますが、Leaky ReLUは マイナス側でもわずかに傾きが残ります。
スタディード / G検定 / 動く解説
端まで振れると、S字は平らになって傾きを失う。
関数を切り替え、入力値を動かして、出力の形とその場所の傾き(勾配)がどう変わるか確かめてください。
4. ソフトマックス関数
ここまでの関数は、一つ一つの神経細胞の出力を決めるものでした。最後に見るソフトマックス関数は、少し性質が違います。
ソフトマックス関数は、出力層で複数の答えの候補があるとき、それぞれの候補の数値を合計するとちょうど1になる割合へ変換する関数です。たとえば「犬・猫・鳥」のどれかを当てる問題では、三つの候補それぞれに数値が出ますが、そのままでは大小しか分かりません。ソフトマックス関数を通すと、たとえば犬が0.7、猫が0.2、鳥が0.1のように、合計が1になる割合へそろえられます。
この割合は、それぞれの候補である度合いとして読み取れます。大きい数値ほど大きな割合になり、候補どうしの差が強調されます。そのため、いくつかの中から一つを選ぶ多クラス分類の出力層で、ソフトマックス関数がよく使われます。
理解の確認
ソフトマックス関数は、出力層で複数の候補の数値を合計が1になる割合へ変換します。いくつかの中から一つを選ぶ多クラス分類の出力で使われ、各候補である度合いとして読み取れます。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。