似然函数
总是被论文中各种各样奇怪的损失函数折磨,干脆就抽半天专门看看这东西
似然函数
似然函数是一种关于模型中参数的函数。“似然性likehood”和概率词义相近,但统计学上是完全不同的含义:
-
概率用于在已知参数的情况下,预测接下来的观测结果
-
似然性用于根据一些观测结果,估计给定模型的参数可能值
似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
负对数似然
先从熟悉的两点分布说起,对应二分类问题,其分布律为:
P
(
X
=
x
∣
p
)
=
p
x
(
1
−
p
)
1
−
x
=
{
p
if
x
=
1
1
−
p
if
x
=
0
P(X=x \mid p)=p^{x}(1-p)^{1-x}= \begin{cases}p & \text { if } x=1 \\ 1-p & \text { if } x=0\end{cases}
P(X=x∣p)=px(1−p)1−x={p1−p if x=1 if x=0
对于多分类问题,只需将其扩展到多项分布,假设X有
K
K
K 种可能的取值:
P
(
X
=
x
∣
p
1
,
p
2
,
…
,
p
k
)
=
∏
i
=
1
K
p
i
x
i
∑
i
=
1
K
p
i
=
∑
i
=
1
K
x
i
=
1
,
x
i
∈
{
0
,
1
}
\begin{aligned} &P\left(X=x \mid p_{1}, p_{2}, \ldots, p_{k}\right)=\prod_{i=1}^{K} p_{i}^{x_{i}} \\ &\sum_{i=1}^{K} p_{i}=\sum_{i=1}^{K} x_{i}=1, x_{i} \in\{0,1\} \end{aligned}
P(X=x∣p1,p2,…,pk)=i=1∏Kpixii=1∑Kpi=i=1∑Kxi=1,xi∈{0,1}
其中,
p
i
p_{i}
pi 表示X属于各类别的概率,
x
x
x 是用one_hot向量表示的类别。
现在假设分类器输出了一组预测概率
y
pred
=
(
p
1
,
p
2
,
…
,
p
k
)
y_{\text {pred }}=\left(p_{1}, p_{2}, \ldots, p_{k}\right)
ypred =(p1,p2,…,pk) ,我们想知道: 如果以这组概率 为多项分布的参数,观测到对应
y
true
=
(
x
1
,
x
2
,
…
,
x
k
)
y_{\text {true }}=\left(x_{1}, x_{2}, \ldots, x_{k}\right)
ytrue =(x1,x2,…,xk) 的概率是多少。如果观测到
y
true
y_{\text {true }}
ytrue 的 概率大,表示模型预测的精准。这就是似然函数:
L
(
y
true
∣
y
pred
)
=
∏
i
=
1
K
y
pred
(
i
)
y
true
(
i
)
L\left(y_{\text {true }} \mid y_{\text {pred }}\right)=\prod_{i=1}^{K} y_{\text {pred }}(i)^{y_{\text {true }}(i)}
L(ytrue ∣ypred )=i=1∏Kypred (i)ytrue (i)
在预测序列为 y p r e d y_{pred} ypred情况下,真实序列 y t r u e y_{true} ytrue出现的可能性越大,表示 y p r e d y_{pred} ypred预测的越靠谱,或者说,真实序列 y t r u e y_{true} ytrue出现时, y p r e d y_{pred} ypred表示的是其预测的靠谱程度
我们要做的,就是在 y p r e d y_{pred} ypred的取值范围内,**找到能使得 L ( y true ∣ y pred ) L\left(y_{\text {true }} \mid y_{\text {pred }}\right) L(ytrue ∣ypred ) 能够取得最大值(就是在这个 y p r e d y_{pred} ypred下,正确序列出现的概率最高)的 y p r e d ^ \hat{y_{pred}} ypred^,**由于 y p r e d ^ \hat{y_{pred}} ypred^使得似然函数取值达到最大,因此 y p r e d ^ \hat{y_{pred}} ypred^,就是参数 y p r e d y_{pred} ypred的极大似然估计
未知参数 y p r e d y_{pred} ypred取估计值 y p r e d ^ \hat{y_{pred}} ypred^,时,获取的到真实序列 y t r u e y_{true} ytrue的可能性比其他任何情况下都大
如何获得极大似然估计?
问题其实转换为一个求最值的问题,可以对似然函数求导,使得导数为0的 y p r e d y_{pred} ypred的取值,就是我们要找的极大似然估计 y p r e d ^ \hat{y_{pred}} ypred^
但①连乘函数求导比较复杂②由于函数 g ( x ) g(x) g(x) 和 ln ( g ( x ) ) \ln (g(x)) ln(g(x)) 的单调性是保持一致的。
因此我 们可以选择把似然函数
L
(
x
)
L(x)
L(x) 转化为
ln
(
L
(
x
)
)
\ln (L(x))
ln(L(x)) ,这样连乘就变成了连加:
L
(
y
true
∣
y
pred
)
=
∑
i
=
1
K
y
true
(
i
)
log
(
y
pred
(
i
)
)
L\left(y_{\text {true }} \mid y_{\text {pred }}\right)=\sum_{i=1}^{K} y_{\text {true }}(i) \log \left(y_{\text {pred }}(i)\right)
L(ytrue ∣ypred )=i=1∑Kytrue (i)log(ypred (i))
此时再对他进行求导就变得容易了,如果方程有唯一解,且是极大值点,那么我们就求得了极大似 然估计值。
负对数似然函数和交叉熵损失函数
图像为 − log ( L ( y true ∣ y pred ) ) -\log(L\left(y_{\text {true }} \mid y_{\text {pred }}\right)) −log(L(ytrue ∣ypred )),损失函数的目的是使得 y p r e d y_{pred} ypred预测的跟 y t r u e y_{true} ytrue越来越接近,
用负对数似然的原理来解释,就是 L ( y true ∣ y pred ) L\left(y_{\text {true }} \mid y_{\text {pred }}\right) L(ytrue ∣ypred )取值尽可能大,(但不用找到最大似然估计)
用损失函数的思想,最小化 − log ( L ( y true ∣ y pred ) ) -\log(L\left(y_{\text {true }} \mid y_{\text {pred }}\right)) −log(L(ytrue ∣ypred ))的结果是,使得 L L L越来越接近1,即使得 y p r e d y_{pred} ypred预测的跟 y t r u e y_{true} ytrue越来越接近
最小化交叉熵函数的本质就是对数似然函数的最大化。
通常机器学习都是最小化损失函数的,所以我们给
log
(
L
)
\log (L)
log(L) 加上负号,变成负对数似然。最小化 负对数似然等价于最大化似然函数,即交叉熵:
CrossEntropy
(
y
true
,
y
pred
)
=
−
log
(
L
)
=
−
∑
i
=
1
K
y
true
(
i
)
log
(
y
pred
(
i
)
)
\operatorname{CrossEntropy}\left(y_{\text {true }}, y_{\text {pred }}\right)=-\log (L)=-\sum_{i=1}^{K} y_{\text {true }}(i) \log \left(y_{\text {pred }}(i)\right)
CrossEntropy(ytrue ,ypred )=−log(L)=−i=1∑Kytrue (i)log(ypred (i))
参考资料
https://www.zhihu.com/question/54082000
https://zhuanlan.zhihu.com/p/268171298
https://blog.csdn.net/silver1225/article/details/88914652