- この記事は,PyTorch公式チュートリアル,"DEEP LEARNING WITH PYTORCH"の"Non-Linearities"から抜粋して要約したもの.
なぜReLUみたいな非線形関数が必要なのか?
- 次の2つのアフィン変換があったとする
\begin{align}
f(x) &= Ax + b \\
g(x) &= Cx + d
\end{align}
- これらの合成,$f(g(x))$を計算するとどうなるか?
\begin{align}
f(g(x)) &= A(Cx + d) + b \\
& = ACx + (Ad +b)
\end{align}
- ここで,$AC$は行列.$Ad+b$はベクトル
- つまり,アフィン変換の合成が1つのアフィン変換で書けたことになる
- ニューラルネットを作るときに大量のアフィン変換の合成を行うわけだが,このやり方だと,それらの操作は1つのアフィン変換と同じ効果しかもたらさない
- 非線形関数をアフィンレイヤの間に導入すれば,このようなことは起きない
- ニューラルネットを作るときに大量のアフィン変換の合成を行うわけだが,このやり方だと,それらの操作は1つのアフィン変換と同じ効果しかもたらさない
- つまり,アフィン変換の合成が1つのアフィン変換で書けたことになる
なぜReLUを使うのか
- よく使われる非線形関数に,$tanh(x)$, $\sigma(x)$, $ReLU(x)$がある
- 非線形関数はこの他にいくらでもあるが,これらを使う理由は勾配の計算が簡単だから
- シグモイドの微分:
- $\frac{d\sigma}{dx} = \sigma(x)(1-\sigma(x))$
- シグモイドの微分:
- 非線形関数はこの他にいくらでもあるが,これらを使う理由は勾配の計算が簡単だから
- ReLUがよく使われる理由の一つが,$\sigma(x)$は引数xの絶対値が大きくなると勾配が急速に消失するから
- 勾配が消失すると学習が困難になる