活性化関数
浅川伸一[asakawa@ieee.org](asakawa@ieee.org)
ロジスティック関数:
In [24]:
#!/bin/env python
from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
In [31]:
a = []
for x in np.linspace(-4,4,300):
a.append(1./(1.+np.exp(-x)))
plt.plot(a)
plt.axis([0, 300, -1, 1])
plt.title('logistic function $sigma(x)$')
plt.show()
σ (x)
σ (x)
d
dx
=
1
1 + exp(−x)
= x (1 − x)
4
ハイパータンジェント:
In [35]:
a = []
for x in np.linspace(-4,4,300):
a.append(np.tanh(x))
plt.plot(a)
plt.axis([0, 300, -1, 1])
plt.title('tanh(x)')
plt.show()
整流線形ユニットReLU (Rectified Linear Unit):
ReLU は厳密には微分可能な関数ではない。ReLU では原点 において劣微分
subdifferential を考える。原点 での勾配が計算できないが,ReLU は下に凸であるの
で における勾配はある範囲内に納まる。これを劣勾配subgradient と呼び
である。すなわち劣勾配は値が定まるのではなく勾配の範囲を定め
る。
tanh(x)
tanh(x)
d
dx
=
exp(x) − exp(−x)
exp(x) + exp(−x)
= 1 − x
2
ReLU (x)
ReLU (x)
d
dx
= max (0, x)
= max (0, 1)
x = 0
x = 0
x = 0
dReLU (0) /dx = [0, 1]
5
In [36]:
def relu(x):
return x * (x > 0)
a = []
for x in np.linspace(-4,4,300):
a.append(relu(x))
plt.plot(a)
plt.axis([0, 300, -1, max(a)])
plt.title('relu(x)')
plt.show()
ソフトプラス:
ソフトプラスはReLU を微分可能な関数で近似したと見做すことができる。
softplus (x)
log(1 + exp(x))
d
dx
= log(1 + exp(x))
=
1
1 + exp(−x)
6
In [39]:
def softplus(x):
return np.log(1. + np.exp(x))
def dsoftplus(x, delta=1e-05):
a = softplus(x+delta)
b = softplus(x-delta)
return (a-b)/(2.* delta)
a = []
for x in np.linspace(-4,4,300):
a.append([softplus(x), dsoftplus(x), relu(x)])
plt.plot(a)
plt.axis([0, 300, -1, 4])
plt.title('softplus and dsoftplus, and relu')
plt.show()
ソフトマックス:
ここで はクロネッカーのデルタである:
softmax ( )xi
softmax ( )
∂
∂xi
xi
=
exp( )xi
exp( )∑
j
xj
= ( − )xi
δij
xi
δij
=
{
δij
1
0
(i = j)
(i ≠ j)
7
In [2]:
#!/bin/env python
from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
def relu(x):
return x * (x > 0)
def softplus(x):
return np.log(1. + np.exp(x))
def dsoftplus(x, delta=1e-05):
a = softplus(x+delta)
b = softplus(x-delta)
return (a-b)/(2.* delta)
a = []
for x in np.linspace(-4,4,300):
a.append([1./(1.+np.exp(-x)), np.tanh(x), softplus(x), dsoftplus(x),
relu(x)])
plt.plot(a)
plt.show()
8
1 正規分布を積分すると 1 になることの証明
1.1 ガウス積分
I =
∫ ∞
0
{−
1
2
x2
dx =
√
2π (1)
を証明する。
I を求めるかわりにその自乗である I2
を考える
I2
=
∫ ∞
−∞
e− 1
2 x2
dx
∫ ∞
−∞
e− 1
2 y2
dy (2)
=
∫ ∞
−∞
e− 1
2 x2
− 1
2 y2
dx dy (3)
ここで,x と y とを極座標に変換する:
x = r cos θ (4)
y = r sin θ (5)
x と y とを積分するかわりに変数変換した r と θ について積分することを 置換積分 という。
行列表現すれば
(
x
y
)
=
(
r cos θ
r sin θ
)
(6)
2 ヤコビアン Jacobian
関数行列の行列式をヤコビアンという。この場合,ヤコビアンは
J =
∂J/∂r, ∂J/∂θ
∂J/∂r, ∂J/∂θ
= r (7)
となるので
I2
=
∫ ∞
0
∫ 2π
0
e− 1
2 r2
rdrdθ (8)
I2
= 2π
∫ ∞
0
∫ 2π
0
e− 1
2 r2
r dθ dr (9)
= 2π
∫ ∞
0
e−r2
rdr (10)
= 2π
[
−
1
2
e− 1
2 r2
]∞
r=0
(11)
= 2π (12)
したがって I はその開平であるから I =
∫ ∞
−∞
e− 1
2 x2
dx は
√
2π である。
9