活性化関数¶
キーワード:シグモイド関数、温度パラメータ、勾配消失、ReLU、Leaky ReLU、GELU、tanh、双曲線関数
要点
- 層の間に非線形な関数を挟まないと、何層重ねても1つの線形変換にしかならない。活性化関数が非線形性を入れる。
- 逆伝播では層ごとに導関数 \(f'\) が掛かる。\(f'\) の形が、勾配の流れやすさ(学習のしやすさ)を決める。
- 流れは、シグモイド・tanh(飽和して勾配が消える)→ ReLU(勾配が保たれる)→ GELU・Swish(なめらかで dying ReLU が起きにくい)。
非線形性が必要な理由¶
\[
\mathbf{y}=\mathbf{W}_2(\mathbf{W}_1\mathbf{x}+\mathbf{b}_1)+\mathbf{b}_2=(\mathbf{W}_2\mathbf{W}_1)\,\mathbf{x}+(\mathbf{W}_2\mathbf{b}_1+\mathbf{b}_2)
\]
- 右辺は \(\mathbf{W}'\mathbf{x}+\mathbf{b}'\) の形で、1層の線形変換と同じ。層を増やしても表現力は増えない。
- 間に非線形な \(f\) を挟んだ \(\mathbf{W}_2 f(\mathbf{W}_1\mathbf{x}+\mathbf{b}_1)+\mathbf{b}_2\) はこのようにまとめられない。
主な活性化関数¶
\[
\begin{aligned}
&\text{Step} && f(x)=\begin{cases}1&(x>0)\\0&(x\le0)\end{cases} && f'(x)=0\ \ (x\ne0) \\[4mm]
&\text{Identity} && f(x)=x && f'(x)=1 \\[4mm]
&\text{Sigmoid} && f(x)=\sigma(x)=\dfrac{1}{1+e^{-x}} && f'(x)=f(x)\bigl(1-f(x)\bigr) \\[4mm]
&\text{tanh} && f(x)=\dfrac{e^{x}-e^{-x}}{e^{x}+e^{-x}} && f'(x)=1-f(x)^2 \\[4mm]
&\text{ReLU} && f(x)=\max(0,\,x) && f'(x)=\begin{cases}1&(x>0)\\0&(x\le0)\end{cases} \\[4mm]
&\text{Leaky ReLU} && f(x)=\max(\alpha x,\,x) && f'(x)=\begin{cases}1&(x>0)\\\alpha&(x\le0)\end{cases} \\[4mm]
&\text{ELU} && f(x)=\begin{cases}x&(x\ge0)\\\alpha(e^{x}-1)&(x<0)\end{cases} && f'(x)=\begin{cases}1&(x\ge0)\\f(x)+\alpha&(x<0)\end{cases} \\[4mm]
&\text{GELU} && f(x)=x\,\Phi(x) && f'(x)=\Phi(x)+x\,\phi(x) \\[4mm]
&\text{Swish (SiLU)} && f(x)=x\,\sigma(x) && f'(x)=\sigma(x)\bigl(1+x(1-\sigma(x))\bigr) \\[4mm]
&\text{Mish} && f(x)=x\tanh\bigl(\ln(1+e^{x})\bigr) &&
\end{aligned}
\]
- \(\Phi(x)\):標準正規分布の累積分布関数、\(\phi(x)\):その確率密度関数。\(\alpha\) は小さな正の定数。
- Softmax(出力層で使う)は、\(f_i(\mathbf{x})=\dfrac{e^{x_i}}{\sum_j e^{x_j}}\)。他の関数と違い、入力ベクトル全体から出力ベクトルを作る。そのため導関数はヤコビ行列になる。
\[
\frac{\partial f_i}{\partial x_j}=f_i(\mathbf{x})\bigl(\delta_{ij}-f_j(\mathbf{x})\bigr)\qquad(\delta_{ij}\text{:クロネッカーのデルタ})
\]
双曲線関数¶
\[
\sinh x=\frac{e^{x}-e^{-x}}{2},\qquad \cosh x=\frac{e^{x}+e^{-x}}{2},\qquad \tanh x=\frac{\sinh x}{\cosh x}=2\sigma(2x)-1
\]
- tanh はシグモイドを拡大・平行移動したもの。値域が \((-1,1)\) で、原点を通る(ゼロ中心)。
性質のまとめ¶
| 関数 | 値域 | \(f'\) の最大値 | 特徴 |
|---|---|---|---|
| Sigmoid | \((0,1)\) | \(0.25\)(\(x=0\)) | 出力が確率として扱える。ゼロ中心でない。飽和して勾配が消える |
| tanh | \((-1,1)\) | \(1\)(\(x=0\)) | ゼロ中心。飽和して勾配が消える(シグモイドよりまし) |
| ReLU | \([0,\infty)\) | \(1\) | 計算が軽く、\(x>0\) で勾配が減衰しない。\(x\le0\) で勾配が 0(dying ReLU) |
| Leaky ReLU | \((-\infty,\infty)\) | \(1\) | \(x\le0\) にも傾き \(\alpha\) が残り、dying ReLU が起きにくい |
| ELU | \((-\alpha,\infty)\) | \(1\) | 負側が \(-\alpha\) へなめらかに飽和する |
| GELU | 約 \((-0.17,\infty)\) | 1 をわずかに超える | なめらか。Transformer(BERT・GPTなど)で標準的 |
| Swish (SiLU) | 約 \((-0.28,\infty)\) | 1 をわずかに超える | \(x\,\sigma(x)\) の自己ゲート。EfficientNet などで使われる |
曲線を重ねて見る¶
関数を切り替え、\(x\) を動かして、値と傾きを同時に確かめます。実線が \(f(x)\)、破線が \(f'(x)\) です。
動かしてみる
- シグモイドは、破線(\(f'\))の山の高さが 0.25 しかありません。\(x\) を \(\pm4\) に近づけると、\(f'\) は 0 に近づきます(飽和)。
- tanh は山の高さが 1 で、原点を通ります。シグモイドと違って出力が負にもなります。
- ReLU の \(f'\) は 0 か 1 の2値です。Leaky ReLU に切り替えて \(\alpha\) を動かすと、\(x<0\) 側に傾き \(\alpha\) が残ります(ELUでも \(\alpha\) が負側の形を決めます)。
- GELUと Swish は、\(x<0\) で \(f\) がいったん負に下がってから 0 へ戻ります(単調ではない)。
温度パラメータ¶
シグモイドとソフトマックスは、入力を温度 \(T\) で割ると、出力の鋭さを変えられる。
\[
\sigma_T(x)=\frac{1}{1+e^{-x/T}},\qquad
\mathrm{softmax}_T(\mathbf{z})_i=\frac{e^{z_i/T}}{\sum_j e^{z_j/T}}
\]
- \(T>1\):出力がなだらかになり、確率が均される。\(T<1\):最大の要素に確率が集中する。
- \(T\to0\):最大の要素だけが 1 の one-hot(argmax)に近づく。\(T\to\infty\):すべて \(1/K\) の一様分布に近づく。
- \(T=1\) が通常のソフトマックス。蒸留(教師モデルの出力をなだらかにする)や、言語モデルの生成(多様さの調整)で使う。
動かしてみる
- \(T\) を 0.1 まで下げると、\(z_1\) のクラスがほぼ 1 になります。5 まで上げると、3つとも \(1/3\) に近づきます。
- \(z_1,z_2,z_3\) をすべて同じ値にすると、\(T\) に関係なく \(1/3\) ずつになります。
- 3つの \(z\) を同じだけずらしても、確率は変わりません(ソフトマックスは定数の加算に対して不変)。実装では最大値を引いてから指数をとり、オーバーフローを防ぎます。
勾配消失と dying ReLU¶
- 逆伝播では \(f'\) が層の数だけ掛かる。シグモイドは \(f'\le0.25\) なので、\(L\) 層で最大でも \(0.25^{L}\) になり、勾配が急速に消える(誤差逆伝播法 の動く図で確認できる)。
- tanh は \(x=0\) 付近では \(f'\approx1\) だが、\(|x|\) が大きいと飽和して \(f'\to0\) になる。
- ReLU は \(x>0\) で \(f'=1\) のため減衰しない。一方で \(x\le0\) に入り続けたユニットは勾配が 0 のまま更新されず、出力が 0 に固定される(dying ReLU)。
- Leaky ReLU・ELU・GELU・Swish は \(x\le0\) 側にも小さな勾配が残るため、dying ReLU が起きにくい。
試験の着眼点¶
- シグモイドの微分は \(f(1-f)\) で最大 0.25(\(x=0\))。tanh の微分は \(1-f^2\) で最大 1(\(x=0\))。どちらも出力だけから計算できる。
- \(\tanh x=2\sigma(2x)-1\)。tanh はゼロ中心で、シグモイドはそうではない。
- ReLU は \(x=0\) での微分を 0 とする実装が多い。dying ReLU は Leaky ReLU などで緩和する。
- GELUは \(x\,\Phi(x)\)(Transformer)、Swish は \(x\,\sigma(x)\)(EfficientNet)。
- ソフトマックスのヤコビ行列は \(f_i(\delta_{ij}-f_j)\)。交差エントロピーと組み合わせると、出力層のデルタは \(\mathbf{y}-\mathbf{t}\) になる。
- 温度が高いほど確率がなだらか(一様に近い)、低いほど鋭い(one-hot に近い)。