sigmoid函数
Sigmoid函数是一个在生物学中常见的S型函数,将值映射到(0,1)之间,常用于神经元的激活函数。
σ
(
x
)
=
1
1
+
e
−
x
\sigma(x)=\frac{1}{1+e^{-x}}
σ(x)=1+e−x1
画出函数图像
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
x=np.arange(-10,10,0.1)
y=1/(np.exp(-x)+1)
#print(y)
plt.title("sigmoid")
plt.plot(x,y)
plt.show()
显然:
lim
x
→
+
∞
=
1
\lim\limits_{x\to+\infty}=1
x→+∞lim=1 ,
lim
x
→
−
∞
=
0
\lim\limits_{x\to-\infty}=0
x→−∞lim=0 ,函数平滑、易于求导。
σ
′
(
x
)
=
e
−
x
(
1
+
e
−
x
)
2
=
1
1
+
e
−
x
−
1
(
1
+
e
−
x
)
2
=
σ
(
x
)
(
1
−
σ
(
x
)
)
\sigma'(x)=\frac{e^{-x}}{(1+e^{-x})^2} =\frac{1}{1+e^{-x}}-\frac{1}{(1+e^{-x})^2}=\sigma(x)(1-\sigma(x))
σ′(x)=(1+e−x)2e−x=1+e−x1−(1+e−x)21=σ(x)(1−σ(x))
因此sigmoid可用于二分类问题,输出p代表为1的概率。
二元交叉熵损失函数
y
=
1
y=1
y=1时,
p
(
y
=
1
∣
x
)
=
p
p(y=1|x)=p
p(y=1∣x)=p
y
=
0
y=0
y=0时,
p
(
y
=
0
∣
x
)
=
1
−
p
p(y=0|x)=1-p
p(y=0∣x)=1−p
可将上式合并得
p
(
y
∣
x
)
=
p
y
(
1
−
p
)
1
−
y
p(y|x)=p^y(1-p)^{1-y}
p(y∣x)=py(1−p)1−y
为方便计算两边取对数得到
log
p
(
y
∣
x
)
=
y
log
p
+
(
1
−
y
)
log
(
1
−
p
)
\log p(y|x)=y\log p +(1-y)\log (1-p)
logp(y∣x)=ylogp+(1−y)log(1−p)
损失应取正值故添加负号
L
=
−
[
y
log
p
+
(
1
−
y
)
log
(
1
−
p
)
]
L=-[y\log p +(1-y)\log (1-p)]
L=−[ylogp+(1−y)log(1−p)]
假设m个样本独立同分布,最大似然可得
P
=
∏
i
=
1
m
p
(
y
i
∣
x
i
)
P=\prod_{i=1}^m p(y^i|x^i)
P=i=1∏mp(yi∣xi)
log
P
=
∑
i
=
1
m
log
p
(
y
i
∣
x
i
)
\log P=\sum_{i=1}^m\log p(y^i|x^i)
logP=i=1∑mlogp(yi∣xi)
log
P
=
−
∑
i
=
1
m
L
\log P=-\sum_{i=1}^mL
logP=−i=1∑mL
所以样本的平均误差可以定义为
J
=
1
m
∑
i
=
1
m
L
(
p
,
y
)
J=\frac{1}{m}\sum_{i=1}^mL(p,y)
J=m1i=1∑mL(p,y)