参考:

1 The Maximum Likelihood Principle

定义

假设现在我们有数据集极大似然估计 - 图1和参数极大似然估计 - 图2, 假设我们的参数极大似然估计 - 图3代表的是抛掷硬币朝上的概率,极大似然估计 - 图4是连续的抛掷硬币的独立事件的结果序列, 比如HHTTHH, 我们想要通过这个数据集极大似然估计 - 图5来估算出参数极大似然估计 - 图6的大小

我们引入极大似然估计的概念, 也就是我们要求的: 极大似然估计 - 图7 由贝叶斯定理,我们有极大似然估计 - 图8
分母极大似然估计 - 图9极大似然估计 - 图10无关,也就是和我们的优化参数无关,我们不看它 分子上的极大似然估计 - 图11是先验概率,也就是自然界中存在的不同的硬币(fair or not)抛掷之后正面朝上的概率为极大似然估计 - 图12的可能性,我们无从得知,所以我们可以把它看做和我们要优化的极大似然估计 - 图13无关, 也可以不看 最后我们的优化目标变成了: 极大似然估计 - 图14, 我们称这个最大的概率为似然

例子

假设极大似然估计 - 图15已知, 表示硬币抛掷之后朝上的概率,极大似然估计 - 图16是一个随机变量, 描述了硬币抛掷极大似然估计 - 图17之后的朝上朝下的序列,比如HHTTHH 假设我们连续抛掷硬币,其中有极大似然估计 - 图18次朝上,极大似然估计 - 图19次朝下,假设事件极大似然估计 - 图20则我们有极大似然估计 - 图21

:::info 假设极大似然估计 - 图22HHHTHTTHHHHHT, 极大似然估计 - 图23,我们有极大似然估计 - 图24, 我们试图求其最大值, 画图可知: :::

  1. %matplotlib inline
  2. import torch
  3. from d2l import torch as d2l
  4. theta = torch.arange(0, 1, 0.001)
  5. p = theta**9 * (1 - theta)**4.
  6. d2l.plot(theta, p, 'theta', 'likelihood')

image.png :::info 我们也可以对这个目标函数求导:
image.png
因为极大似然估计 - 图27, 所以极大似然估计 - 图28 :::

2 Negative Log-Likelihood

由来

:::info 承接刚刚的例子,假设事件极大似然估计 - 图29实际上是由极大似然估计 - 图30个独立的硬币抛掷事件的序列,假设事件极大似然估计 - 图31可以拆分成极大似然估计 - 图32个独立的事件序列极大似然估计 - 图33, 所以我们有:极大似然估计 - 图34
假设极大似然估计 - 图35, 则极大似然估计 - 图36此时因为极大似然估计 - 图37, 所以如果序列很长的话,极大似然估计 - 图38会非常小,所以计算机的精度可能无法完整记录,于是我们想: 有没有一个映射函数,在不改变原函数的递增性质的同时, 能够将这些概率信息以正数的形式保存成下来,于是Negative Log-LikeLihood的概念应运而生 :::

我们定义Negative Log-Likelihood极大似然估计 - 图39 于是之前的似然函数就会变成: 极大似然估计 - 图40

  1. # Set up our data
  2. n_H = 8675309
  3. n_T = 25624
  4. # Initialize our paramteres
  5. theta = torch.tensor(0.5, requires_grad=True)
  6. # Perform gradient descent
  7. lr = 0.00000000001
  8. for iter in range(10):
  9. loss = -(n_H * torch.log(theta) + n_T * torch.log(1 - theta))
  10. loss.backward()
  11. with torch.no_grad():
  12. theta -= lr * theta.grad
  13. theta.grad.zero_()
  14. # Check output
  15. theta, n_H / (n_H + n_T)
  16. # (tensor(0.5017, requires_grad=True), 0.9970550284664874)

定义

**Negative Log Likelihood**的出现除了防止浮点数溢出,还有简化运算的目的,上面的程序涉及到对极大似然估计 - 图41求偏导的运算,使用**Negative Log Likelihood**能够极大幅度地简化导数运算

:::danger 看一下原来的式子:
在独立性假设的前提下: 极大似然估计 - 图42, 如果我们想对极大似然估计 - 图43求导, 我们使用链式法则:
image.png
可以看到,这里有极大似然估计 - 图45次乘法运算和极大似然估计 - 图46次加法运算, 非常花时间 ::: :::success 使用Negative Log-Likelihood之后,我们有: 极大似然估计 - 图47
极大似然估计 - 图48求偏导算极值:
image.png
这里只用到了极大似然估计 - 图50次除法运算和极大似然估计 - 图51次求和运算,节省运算资源 ::: :::success 同时,Negative Log-likelihood还可以和信息论做结合image.png :::

总结

使用Negative Log-likelihood有三大优点

  • 简化浮点数信息,稳定数值
  • 简化求导运算,将乘法转变为加法
  • 和信息论紧密结合

3 Maximum Likelihood for Continuous Variables

推导和定义

image.png