最小二乘
L
o
s
s
=
1
m
∑
i
=
1
m
(
f
(
x
i
)
?
y
i
)
2
Loss=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2
Loss=m1?i=1∑m?(f(xi?)?yi?)2
极大似然估计法如何做损失函数?
什么是极大似然估计法?
似然值是指真实的情况已经发生,我们假设事件有很多概率模型,然后根据概率模型计算真实情况发生的概率。这个概率就叫似然值。
假设投硬币事件,现实世界投十次硬币,7正三反。我们假设理念世界有三个概率模型,分别为
根据这三个概率模型,我们计算现实世界7正3反发生的概率。
-
0.
1
7
?
0.
9
3
0.1^7·0.9^3
0.17?0.93
-
0.
7
7
?
0.
3
3
0.7^7·0.3^3
0.77?0.33
-
0.
8
7
?
0.
2
3
0.8^7·0.2^3
0.87?0.23
上面这三个值就是似然值。
总结
所以当我们知道事情发生的结果,去反推产生这个结果的概率模型的时候,往往就会用到极大似然估计法。所以极大似然估计法就是在计算神经网络里面的概率模型的似然值。
公式推导
根据上述的投硬币的例子,可以用公式表示
P
(
C
1
C
2
C
3
,
.
.
.
,
C
10
∣
θ
)
P(C_1C_2C_3,...,C_{10}|\theta)
P(C1?C2?C3?,...,C10?∣θ),其中
C
i
C_i
Ci?是现实投一次硬币事件。
θ
\theta
θ是我们假设的概率模型。现在我们将其对应于神经网络
P
N
N
=
P
(
y
1
,
y
2
,
y
3
,
.
.
.
,
y
m
∣
W
,
b
)
P_{NN}=P(y_1,y_2,y_3,...,y_m|W,b)
PNN?=P(y1?,y2?,y3?,...,ym?∣W,b)
这表示在
W
,
b
W,b
W,b概率模型下,现实事件
y
1
,
.
.
.
,
y
m
y_1,...,y_m
y1?,...,ym?发生的概率。所以:
P
N
N
=
∏
i
=
1
m
P
(
y
i
∣
W
,
b
)
P_{NN}=\prod_{i=1}^mP(y_i|W,b)
PNN?=i=1∏m?P(yi?∣W,b)
举个例子,如果此时有一个神经网络用来判断某张照片是不是猫。假设有五张照片,现实我们判断三张是猫二张不是。那上述的公式,就是来表示在
W
,
b
W,b
W,b的情况下,发生三张是猫二张不是的概率。这个结果就是该神经网络的似然值。当这个似然值最大的时候,我们就可以认定W,b确定的概率模型就是"完美神经网络"的本来的概率模型(这里的完美是指跟人脑一样能够完美判断是否是猫的)
我们知道
W
,
b
W,b
W,b可以判断输入的张片是否是猫的概率,我们假设神经模型输出的值为
y
i
^
\hat{y_i}
yi?^?。则
P
N
N
=
∏
i
=
1
m
P
(
y
i
∣
y
i
^
)
P_{NN}=\prod_{i=1}^mP(y_i|\hat{y_i})
PNN?=i=1∏m?P(yi?∣yi?^?)
其次,我们知道
y
i
y_i
yi?要么是0,要么是1。也就是说
y
i
y_i
yi?符合伯努利分布:
f
(
x
)
=
p
x
(
1
?
p
)
1
?
x
=
{
p
,
x
=
1
1
?
p
,
x
=
0
f(x)=p^x(1-p)^{1-x}=\begin{dcases} p, \enspace x=1 \\ 1-p \enspace, x=0 \end{dcases}
f(x)=px(1?p)1?x={p,x=11?p,x=0?
所以我们能将
P
N
N
P_{NN}
PNN?展开为
P
N
N
=
∏
i
=
1
m
y
i
^
y
i
(
1
?
y
i
^
1
?
y
i
)
P_{NN}=\prod_{i=1}^m\hat{y_i}^{y_i}(1-\hat{y_i}^{1-y_i})
PNN?=i=1∏m?yi?^?yi?(1?yi?^?1?yi?)
最后,我们习惯上喜欢连加(也有可能是求导方便)。我们对
P
N
N
P_{NN}
PNN?求对数(log不改变单调性)
l
o
g
P
N
N
=
∑
i
=
1
m
l
o
g
(
y
i
^
y
i
(
1
?
y
i
^
1
?
y
i
)
)
=
∑
i
=
1
m
(
y
i
?
l
o
g
y
i
^
+
(
1
?
y
i
)
l
o
g
1
?
y
i
^
)
logP_{NN}=\sum_{i=1}^mlog(\hat{y_i}^{y_i}(1-\hat{y_i}^{1-y_i}))\\=\sum_{i=1}^m(y_i·log^{\hat{y_i}}+(1-y_i)log^{1-\hat{y_i}})
logPNN?=i=1∑m?log(yi?^?yi?(1?yi?^?1?yi?))=i=1∑m?(yi??logyi?^?+(1?yi?)log1?yi?^?)
回到原本,我们的目的是求似然值最大,所以我们只要求得
max
?
l
o
g
P
N
N
\max logP_{NN}
maxlogPNN?。但是在计算的时候我们更习惯求最小值(优化问题),我们会加个负号,求最小值。
min
?
l
o
g
P
N
N
=
min
?
?
∑
i
=
1
m
(
y
i
?
l
o
g
y
i
^
+
(
1
?
y
i
)
l
o
g
1
?
y
i
^
)
\min logP_{NN}=\min -\sum_{i=1}^m(y_i·log^{\hat{y_i}}+(1-y_i)log^{1-\hat{y_i}})
minlogPNN?=min?i=1∑m?(yi??logyi?^?+(1?yi?)log1?yi?^?)
到这里是不是就非常眼熟了?这就是为什么会有极大似然估计法作为损失函数的原因。
交叉熵如何做损失函数?
看这一部分时,需要前置知识。
交叉熵
H
(
P
,
Q
)
=
∑
i
=
1
n
p
i
?
(
?
l
o
g
2
q
i
)
=
∑
i
=
1
n
y
i
?
(
?
l
o
g
2
y
i
^
)
H(P,Q) \\=\sum_{i=1}^np_i·(-log_2^{q_i})\\=\sum_{i=1}^ny_i·(-log_2^{\hat{y_i}})
H(P,Q)=i=1∑n?pi??(?log2qi??)=i=1∑n?yi??(?log2yi?^??)
其中,有一点要知道
y
i
y_i
yi?的取值是有两种的:
1
o
r
0
1 \enspace or \enspace 0
1or0,所公式可以继续演变成
=
?
∑
i
=
1
m
(
y
i
?
l
o
g
2
y
i
^
+
(
1
?
y
i
)
l
o
g
2
1
?
y
i
^
)
=-\sum_{i=1}^m(y_i·log_2^{\hat{y_i}}+(1-y_i)log_2^{1-\hat{y_i}})
=?i=1∑m?(yi??log2yi?^??+(1?yi?)log21?yi?^??)
其中,左半部分是模型判断整例时候的损失,右半部分是判断反例的时候的损失。因为
l
o
g
2
y
i
^
log_2^{\hat{y_i}}
log2yi?^??是模型判断样本
x
i
x_i
xi?是正例的信息量,所以
l
o
g
2
1
?
y
i
^
log_2^{1-\hat{y_i}}
log21?yi?^??就是模型判断
x
i
x_i
xi?是反例的信息量了。
|