机器学习 | 分类算法原理——对数似然函数

Hi,大家好,我是半亩花海。接着上次的似然函数继续更新《白话机器学习的数学》这本书的学习笔记,在此分享对数似然函数这一分类算法原理。本章的分类算法原理基于《基于图像大小进行分类》项目,欢迎大家交流学习!

目录

一、对数似然函数概述

二、案例分析

1. 前期回顾

2. 对数似然函数的微分

3. 参数更新表达式


一、对数似然函数概述

对数似然(Log-Likelihood)是统计学中一种常用的方法,用于估计模型参数。在概率统计中,似然函数表示给定观测数据,关于模型参数的概率分布对数似然则是似然函数取对数后的结果

假设有一组观测数据 x_1, x_2, \ldots, x_n,它们来自一个概率分布,且这个概率分布有一些未知的参数 \theta 需要估计。似然函数 L(\theta) 表示在给定参数 \theta 下观测数据出现的概率。对数似然函数则是似然函数的对数形式 \log(L(\theta))


二、案例分析

1. 前期回顾

在上一节《机器学习 | 分类算法原理——似然函数-CSDN博客》当中我们知道似然函数的具体求法,即使目标函数 L(\theta) 最大化。有人可能会想直接对似然函数进行微分,求出参数 \theta 就行。不过直接对似然函数进行微分有点困难,在此之前要把函数变形。

变形的原因如下:

  • 首先它是联合概率概率都是 1 以下的数,所以像联合概率这种概率乘法的值会越来越小,编程时会出现精度问题。
  • 与乘法相比,加法的计算量要小得多。如果我们取似然函数的对数,如下所示在等式两边加上 \log 即可。

\begin{aligned} \log L(\boldsymbol{\theta}) & =\log \prod_{i=1}^n P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)^{y^{(i)}} P\left(y^{(i)}=0 \mid \boldsymbol{x}^{(i)}\right)^{1-y^{(i)}} \\ & = \sum_{i=1}^n\left(y^{(i)} \log f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)\right)\right) \end{aligned}

\log 是单调递增函数,图像如下。

图形一直向右上方延伸。单调递增函数是在 x_1 < x_2 时,f\left(x_1\right)<f\left(x_2\right) 的函数 f(x)\log \left(x_1\right)<\log \left(x_2\right) 也成立。所以我们现在考察的似然函数也是在 L\left(\boldsymbol{\theta}_1\right)<L\left(\boldsymbol{\theta}_2\right) 时,有 \log L\left(\boldsymbol{\theta}_1\right)<\log L\left(\boldsymbol{\theta}_2\right) 成立。也就是说,使 L(\boldsymbol{\theta}) 最大化等价于使 \log L(\boldsymbol{\theta}) 最大化。

接下来,将对数似然函数变形,如下所示。

\begin{aligned} \log L(\boldsymbol{\theta}) & =\log \prod_{i=1}^n P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)^{y^{(i)}} P\left(y^{(i)}=0 \mid \boldsymbol{x}^{(i)}\right)^{1-y^{(i)}} \\ & =\sum_{i=1}^n\left(\log P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)^{y^{(i)}}+\log P\left(y^{(i)}=0 \mid \boldsymbol{x}^{(i)}\right)^{1-y^{(i)}}\right) \\ & =\sum_{i=1}^n\left(y^{(i)} \log P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)+\left(1-y^{(i)}\right) \log P\left(y^{(i)}=0 \mid \boldsymbol{x}^{(i)}\right)\right) \\ & =\sum_{I=1}^n\left(y^{(i)} \log P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)\right)\right) \\ & =\sum_{i=1}^n\left(y^{(i)} \log f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)\right)\right) \end{aligned}

每一行的变形分别利用了下面这些特性

  • 第 2 行是 $\log (a b)=\log a+\log b$
  • 第 3 行是 $\log a^b=b \log a$
  • 第 4 行是 $P\left(y^{(i)}=0 \mid \boldsymbol{x}^{(i)}\right)=1-P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)$
  • 第 5 行是表达式 P(y=1 \mid \boldsymbol{x})=f_{\boldsymbol{\theta}}(\boldsymbol{x})

由上述特性可以看出,前两个是对数函数的特性。对于第 4 行,首先,现在我们考虑的只有 y = 1 和 y = 0 两种情况,所以应有 P\left(y^{(i)}=\right.\left.0 \mid \boldsymbol{x}^{(i)}\right)+P\left(y^{(i)}=1 \mid \boldsymbol{x}^{(i)}\right)=1,即所有情况的概率之和都是 1。


2. 对数似然函数的微分

总结上述内容就是:逻辑回归将这个下面这个对数似然函数用作目标函数

\log L(\boldsymbol{\theta})=\sum_{i=1}^n\left(y^{(i)} \log f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)\right)\right)

其中,f_{\boldsymbol{\theta}}(\boldsymbol{x}) 的表达式为:f_{\boldsymbol{\theta}}(\boldsymbol{x})=\frac{1}{1+\exp \left(-\boldsymbol{\theta}^{\mathrm{T}} \boldsymbol{x}\right)}

接下来,我们需要对各个参数 \theta_j 求微分,类似于复合函数的偏微分求法,最终需要导出参数更新表达式

\frac{\partial \log L(\boldsymbol{\theta})}{\partial \theta_j}=\frac{\partial}{\partial \theta_j} \sum_{i=1}^n\left(y^{(i)} \log f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)\right)\right)

这个表达式有点复杂,我们可以仿照回归的求法,把似然函数也换成下面这样的复合函数的形式, 然后依次求微分。

\begin{aligned} & u=\log L(\boldsymbol{\theta}) \\ & v=f_{\boldsymbol{\theta}}(\boldsymbol{x}) \end{aligned}

则 \frac{\partial \log L(\boldsymbol{\theta})}{\partial \theta_j} 表达式可以写成下述样式,接下来我们只需要计算 \frac{\partial u}{\partial v} 和 \frac{\partial v}{\partial \theta_j} 即可。


(1)首先从第1项 \frac{\partial u}{\partial v} 开始计算。

\begin{aligned} \frac{\partial u}{\partial v} & =\frac{\partial}{\partial v} \sum_{i=1}^n\left(y^{(i)} \log (v)+\left(1-y^{(i)}\right) \log (1-v)\right) \\ & =\sum_{i=1}^n\left(\frac{y^{(i)}}{v}-\frac{1-y^{(i)}}{1-v}\right) \end{aligned}


(2)接下来是最重要的 v\theta_j 的微分。

这个看上去有点麻烦,不过其实我们已经知道了 sigmoid 函数的微分如下,所以用这个应该就可以计算。

现在 f_{\boldsymbol{\theta}}(x) 本身就是 sigmoid  函数,所以这个微分表达式可以直接使用。 是呀。设 z=\boldsymbol{\theta}^{\mathrm{T}} \boldsymbol{x},然后再一次使用复合函数的微分会比较好。

\begin{aligned} & z=\boldsymbol{\theta}^{\mathrm{T}} \boldsymbol{x} \\ & v=f_{\boldsymbol{\theta}}(\boldsymbol{x})=\frac{1}{1+\exp (-z)} \\ & \frac{\partial v}{\partial \theta_j}=\frac{\partial v}{\partial z} \cdot \frac{\partial z}{\partial \theta_j} \end{aligned}


1)v 对 z 微分 \frac{\partial v}{\partial z} 的部分也就是 sigmoid 函数的微分,如下。

2)z\theta_j 的微分 \frac{\partial z}{\partial \theta_j} 相对简单,如下。

\begin{aligned} \frac{\partial z}{\partial \theta_j} & =\frac{\partial}{\partial \theta_j} \boldsymbol{\theta}^{\mathrm{T}} \boldsymbol{x} \\ & =\frac{\partial}{\partial \theta_j}\left(\theta_0 x_0+\theta_1 x_1+\cdots+\theta_n x_n\right) \\ & =x_j \end{aligned}


然后\frac{\partial v}{\partial z} 与 \frac{\partial z}{\partial \theta_j} 结果相乘、展开、约分,得到 \frac{\partial v}{\partial \theta_j}

\begin{aligned} \frac{\partial v}{\partial \theta_j} & =\frac{\partial v}{\partial z} \cdot \frac{\partial z}{\partial \theta_j} \\ & =v(1-v) \cdot x_j \end{aligned}


最后,将 \frac{\partial u}{\partial v} 与 \frac{\partial v}{\partial \theta_j} 相乘,得到 \frac{\partial u}{\partial \theta_j}

\begin{aligned} \frac{\partial u}{\partial \theta_j} & =\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_j} \\ & =\sum_{i=1}^n\left(\frac{y^{(i)}}{v}-\frac{1-y^{(i)}}{1-v}\right) \cdot v(1-v) \cdot x_j^{(i)} \\ & =\sum_{i=1}^n\left(y^{(i)}(1-v)-\left(1-y^{(i)}\right) v\right) x_j^{(i)} \\ & =\sum_{i=1}^n\left(y^{(i)}-y^{(i)} v-v+y^{(i)} v\right) x_j^{(i)} \\ & =\sum_{i=1}^n\left(y^{(i)}-v\right) x_j^{(i)} \\ & =\sum_{i=1}^n\left(y^{(i)}-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)\right) x_j^{(i)} \end{aligned}


3. 参数更新表达式

计算过程比较复杂,不过最后的结果还挺简单的。 接下来要做的就是从这个表达式导出参数更新表达式。不过现在是以最大化为目标,所以必须按照与最小化时相反的方向移动参数(ps:也就是说,最小化时要按照与微分结果的符号相反的方向移动,而最大化时要与微分结果的符号同向移动)。

\theta_j:=\theta_j+\eta \sum_{i=1}^n\left(y^{(i)}-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)\right) x_j^{(i)}

为了与回归时的符号保持一致,也可以将表达式调整为下面这样(ps:\eta 之前的符号和 \Sigma 中的符号反转了)。

\theta_j:=\theta_j-\eta \sum_{i=1}^n\left(f_{\boldsymbol{\theta}}\left(\boldsymbol{x}^{(i)}\right)-y^{(i)}\right) x_j^{(i)}

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值