昨日训练一个二分类的神经网络,最后一层忘记加sigmoid,发现自己一直做回归的任务,对分类这块还真不太熟练,因此写下这篇博文作为回顾。
定义
KL散度
KL散度是机器学习中常用的一个指标,用于衡量两个概率分布之间的距离,其必须拥有相同的支集,定义为 K L ( P ∣ ∣ Q ) = E x ∼ P [ l o g P ( x ) Q ( x ) ] KL(P||Q)=\mathbb{E}_{x\sim P}[log \frac{P(x)}{Q(x)}] KL(P∣∣Q)=Ex∼P[logQ(x)P(x)]。
交叉熵
交叉熵定义为: H [ P , Q ] = H [ P ] + K L ( P ∣ ∣ Q ) = − E x ∼ P l o g Q ( x ) H[P,Q]=H[P]+KL(P||Q)=-\mathbb{E}_{x \sim P}logQ(x) H[P,Q]=H[P]+KL(P∣∣Q)=−Ex∼PlogQ(x)
最大似然估计
学习的基本原则就是最大似然估计,学习的其实是概率分布
p
m
o
d
e
l
(
x
;
θ
)
p_{model}(x;\theta)
pmodel(x;θ),记数据为
X
=
{
x
1
,
x
2
,
⋯
,
x
n
}
X=\{x_1, x_2, \cdots, x_n\}
X={x1,x2,⋯,xn},则最大似然估计表示为:
θ
=
arg max
p
m
o
d
e
l
(
X
;
θ
)
\theta = \argmax p_{model}(X;\theta)
θ=argmaxpmodel(X;θ)
从贝叶斯的角度考虑,这等价于均匀先验下的最大后验估计。将上式改写为对数似然的形式,是:
θ
=
arg max
∑
i
=
1
n
l
o
g
p
m
o
d
e
l
(
x
i
;
θ
)
\theta = \argmax \sum_{i=1}^{n}logp_{model}(x_i;\theta)
θ=argmaxi=1∑nlogpmodel(xi;θ)
在等式前乘以常数的行为并不影响最大化过程,因此:
θ
=
arg max
1
n
∑
i
=
1
n
l
o
g
p
m
o
d
e
l
(
x
i
;
θ
)
\theta = \argmax \frac{1}{n}\sum_{i=1}^{n}logp_{model}(x_i;\theta)
θ=argmaxn1i=1∑nlogpmodel(xi;θ)
这等价于:
θ
=
arg max
E
x
∼
p
^
d
a
t
a
l
o
g
p
m
o
d
e
l
(
x
i
;
θ
)
\theta = \argmax \mathbb{E}_{x\sim \hat{p}_{data}}logp_{model}(x_i;\theta)
θ=argmaxEx∼p^datalogpmodel(xi;θ)
与交叉熵的公式对比,会发现最大似然估计实际上在最小化交叉熵。进一步的,最小化了KL散度,也就是:
θ
=
arg min
E
x
∼
p
^
d
a
t
a
[
−
l
o
g
p
m
o
d
e
l
(
x
i
;
θ
)
d
a
t
a
+
p
^
d
a
t
a
(
x
;
θ
)
]
\theta = \argmin \mathbb{E}_{x\sim \hat{p}_{data}}[-logp_{model}(x_i;\theta)data+\hat{p}_{data}(x;\theta)]
θ=argminEx∼p^data[−logpmodel(xi;θ)data+p^data(x;θ)]
这是由于第二项与
θ
\theta
θ无关,在最小化的过程中可以忽略。
二分类问题
对于二分类问题,我们实际上在最小化数据经验分布和伯努利分布之间的交叉熵,也就是
p
m
o
d
e
l
(
x
;
θ
)
=
θ
x
(
1
−
θ
)
1
−
x
,
x
∈
{
0
,
1
}
,
θ
∈
[
0
,
1
]
p_{model}(x;\theta)=\theta^x(1-\theta)^{1-x}, x\in\{0,1\}, \theta \in [0,1]
pmodel(x;θ)=θx(1−θ)1−x,x∈{0,1},θ∈[0,1]
则最小化交叉熵表示为:
θ
=
arg max
E
x
∼
p
^
d
a
t
a
[
x
l
o
g
θ
+
(
1
−
x
)
l
o
g
(
1
−
θ
)
]
=
a
r
g
m
a
x
1
n
∑
i
=
1
n
[
x
i
l
o
g
θ
+
(
1
−
x
i
)
l
o
g
(
1
−
θ
)
]
\theta = \argmax \mathbb{E}_{x\sim \hat{p}_{data}}[xlog\theta+(1-x)log(1-\theta)]\\ =argmax \frac{1}{n}\sum_{i=1}^{n}[x_ilog\theta+(1-x_i)log(1-\theta)]
θ=argmaxEx∼p^data[xlogθ+(1−x)log(1−θ)]=argmaxn1i=1∑n[xilogθ+(1−xi)log(1−θ)]
神经网络在这里起到的作用实际上是提供参数
θ
\theta
θ,也就是
θ
=
f
(
x
;
w
)
\theta = f(x;w)
θ=f(x;w)
因此,我们对于二分类问题,实际的优化是:
θ
=
arg max
1
n
∑
i
=
1
n
[
x
i
l
o
g
f
(
x
;
w
)
+
(
1
−
x
i
)
l
o
g
(
1
−
f
(
x
;
w
)
)
]
\theta = \argmax \frac{1}{n}\sum_{i=1}^{n}[x_ilogf(x;w)+(1-x_i)log(1-f(x;w))]
θ=argmaxn1i=1∑n[xilogf(x;w)+(1−xi)log(1−f(x;w))]
伯努利分布中的参数 θ \theta θ代表的含义是 x = 1 x=1 x=1的概率,因此是一个介于 ( 0 , 1 ) (0,1) (0,1)之间的数字。因此,在设计神经网络结构的时候,需要在最后加上一个sigmoid激活函数,使神经网络的输出值归一化。而在损失函数的选择上,我们选择所谓的交叉熵。实际上,回归问题的损失函数也是交叉熵,只不过可以推导出均方损失。