ちびのはてな

「ちび(猫)」と「キノコ」から生まれた「ちびキノコ」。ドラゴンボール最強!純粋なサイヤ人のように生きたいと思っているモノ作りを楽しむ人です。IT技術で少しでも多くの人が笑顔になってくれたらいいなと。

活性化関数メモ

これは、G検定のための個人的なメモであり、公式テキストから引用しながら自分の言葉でまとめているものである。

活性化関数とは

層の間をどのように電気信号を伝播させるかを調整する関数
あるニューロンから次のニューロンへと出力する際に、あらゆる入力値を別の数値に変換して出力する関数である

活性化関数の種類

活性化関数 特徴 備考
ステップ関数 入力値が0未満の場合には常に出力値が0、入力値が0以上の場合には常に出力値が1となるような関数である パーセプトロンで使われていた
シグモイド関数 あらゆる入力値を0.0~1.0の範囲の数値に変換して出力する関数である バックプロパゲーションの登場によりステップ関数ではなくこちらが使われるようになった
ReLU*1 関数への入力値が0以下の場合には出力値が常に0、入力値が0より大きい場合には出力値が入力値と同じ値となる関数である DNNの登場により、シグモイド関数では勾配消失問題が発生するため最近ではこちらがよく使われるようになった
tanh*2 関数 あらゆる入力値を-1.0~1.0の範囲の数値に変換して出力する関数である シグモイド関数の拡張版とも言える
恒等関数*3 あらゆる入力値を全く同じ数値に変換して(= そのまま)出力する関数である 回帰問題における出力層の活性化関数として用いられる
ソフトマックス関数*4 複数の出力値の合計が1.0(= 100%)になるように変換して出力する関数である。各出力値の範囲は0.0~1.0となる 主に分類問題における出力層の活性化関数として用いられる。損失関数には交差エントロピーが使用される事が多い
Swish 関数*5 入力値が0以下の場合には出力値がほぼ0、0より大きい場合には出力値が入力値とほぼ同じ値となる関数である ReLU の派生形
ソフトプラス関数 あらゆる入力値を0.0以上という正の数値に変換して出力する関数である ReLU 登場前に使われることもあった。入力値が-3.0以下など小さくなればなるほど出力値が0に近づいていき、入力値が3.0以上など大きくなればなるほど出力値が入力値と同じ値に近づいていくのが特徴的
Mish 関数 入力値が0以下の場合には出力値がほぼ0(最小値は約-0.31)、入力値が0より大きい場合には出力値が入力値とほぼ同じ値となる関数である 最近注目されている ReLU の派生形。Swish 関数に酷似しており、Swish 関数と比較するとさらにReLUに近い曲線を描くという特徴がある
Leaky-ReLU 入力値が0より低い場合には出力値が入力値をα倍*6した値、入力値が0以上の場合には出力値が入力値と同じ値となる関数である ReLU の派生系
Parametric-ReLU 入力値が0より小さい場合には出力値が入力値をα倍*7した値、入力値が0以上の場合には出力値が入力値と同じ値となる関数である ReLU の派生系で Leaky-ReLU の派生系
ELU(Exponential-LU) 入力値が0以下の場合には出力値が「0.0」~「-α*8*9の間の値になり、入力値が0より大きい場合には出力値が入力値と同じ値となる関数 ReLU の派生系で Leaky-ReLU や Parametric-ReLU の派生系
SELU(Scaled-ELU) 入力値が0以下の場合には出力値が「0.0」~「-λ*10α*11*12の間の値になり、入力値が0より大きい場合には出力値が入力値をλ倍した値となる関数 ReLU の派生系で ELU の派生系

*1:Rectified Linear Unitの略。ランプ関数ともいう

*2:ハイパボリックタンジェントの略。双曲線正接関数ともいう

*3:線形関数ともいう

*4:正規化指数関数(Normalized exponential function)ともいう

*5:SiLU(Sigmoid-weighted LU) ともいう

*6:αの値は基本的に0.01

*7:αの値は学習によって決まる

*8:αの値はは基本的に1.0

*9:つまり、-αは-1.0である

*10:λの値は基本的に約1.0507009873554804934193349852946

*11:αの値が基本的に約1.6732632423543772848170429916717

*12:つまり、約-1.7580993408473768599402175208123