ML3. 广义线性模型(Generalized Linear Models)

到目前为止,我们看过了回归的案例,也看了一个分类案例。在回归的案例中,我们得到的函数是 [公式];而分类的案例中,函数是 [公式],这里面的[公式]  [公式] 分别是 [公式]  [公式] 的某种函数。在本节,我们会发现这两种方法都是一个更广泛使用的模型的特例,这种更广泛使用的模型就叫做广义线性模型。我们还会讲一下广义线性模型中的其他模型是如何推出的,以及如何应用到其他的分类和回归问题上。

1. 指数族 (The exponential family)

ref: 维基百科

在概率和统计中,指数族是某种形式的概率分布的参数集,如下所述。选择这种特殊形式是为了数学上的方便,基于一些有用的代数性质,以及一般性,因为指数族在某种意义上是非常自然的分布集来考虑。术语“分布("distribution")”和“族(family)”经常被松散地使用:具体来说,指数族是一个集合分布,其中特定分布随参数而变化;然而,一个参数分布族通常被称为“一个分布”(如“正态分布”,意思是“正态分布族”),所有指数族的集合有时被松散地称为“那个”指数族。它们是不同的,因为它们具有各种理想的属性,最重要的是存在足够的统计量。

指数族的表达式为:

[公式]

其中:

  • [公式] 是数据,是标量
  • [公式] 是一个关于 [公式] 的非负标量 ,且与 [公式] 无关。
  • [公式] 是一个可以测量所有与 [公式] 相关的 [公式] 的向量。
  • [公式] 用于归一化,其表达式为:
    • [公式]
    • [公式] 是一个关于 [公式] 的测量式,用于在 [公式] 的域内求和。

指数族的表达式可以从正太分布推导出来:

关于 [公式] 对称的正太分布可以写成:

[公式]

这里将向量中的两个值转换为 [公式]:

[公式]

这样前面的式子转换成关于 [公式] 的函数:

[公式]

因此,外面就将关于 [公式]  [公式] 的正太分布,转化成了关于 [公式] 的表达式:

[公式]

写出指数族的形式为:

[公式]

其中 [公式], [公式]

指数组除了有上面的表达式外,还有其他的形式,下面的表达式在机器学习中更加常见:

[公式]

其中 [公式] 为数据,[公式] 为参数。

指数分布族里面还有很多其他的分布:

  • 例如多项式分布(multinomial),这个稍后我们会看到;
  • 泊松分布(Poisson),用于对计数类数据进行建模,后面再问题集里面也会看到;
  • 伽马和指数分布(the gamma and the exponential),这个用于对连续的、非负的随机变量进行建模,例如时间间隔;
  • 贝塔和狄利克雷分布(the beta and the Dirichlet),这个是用于概率的分布;
  • 还有很多,这里就不一一列举了。

指数分布族还有很多非常好的性质:

  • 分布的期望(expectation)为 [公式] 或者 [公式]
  • 幅度(variation)为 [公式] 或者 [公式]

2. 构建广义线性模型(Constructing GLMs)

设想一个分类或者回归问题,要预测一些随机变量 [公式] 的值,作为 [公式] 的一个函数。要导出适用于这个问题的广义线性模型 (Generalized Linear Model,缩写为 GLM),就要对我们的模型、给定 [公式]  [公式] 的条件分布来做出以下三个假设:

  • [公式] ——假设1

即给定 [公式]  [公式] 的分布属于指数分布族,是一个参数为 [公式] 的指数分布。

  • 假设函数[公式]  [公式] ——假设2

给定 [公式],目的是要预测对应这个给定 [公式]  [公式] 的期望值。咱们的例子中绝大部分情况都是 [公式],这也就意味着我们的学习假设 [公式] 输出的预测值 [公式] 要满足 [公式]

  • [公式],如果 [公式] 是向量,则有[公式]。——假设3

自然参数 [公式] 和输入值 [公式] 线性相关的。

以上的三个假设,在 GLMs 中通常作为 设计选择 design choice 

2.1 普通最小二乘法(Ordinary Least Squares)

这个就是我们最开始做的线性回归问题,使用的分布为高斯分布。带入指数族的概念即为,对于输入量 [公式] 来说 [公式]

即:

[公式]

第一行的等式是基于假设2;第二个等式是基于定理当 [公式],则 [公式] 的期望就是 [公式] ;第三个等式是基于假设1,以及之前我们此前将高斯分布写成指数族分布的时候推导出来的性质 [公式];最后一个等式就是基于假设3。

2.2 逻辑回归(Logistic Regression)

逻辑回归即二值问题,服从伯努利分布。因此在建模时就有 [公式],其数学期望 [公式][公式]。那么其假设函数为:

[公式]

这里也解释了为什么之前会选择 [公式] Sigmoid 函数作逻辑回归了。

再解释一点术语,这里给出分布均值的函数 [公式] 是一个关于自然参数的函数,[公式],这个函数也叫做规范响应函数(canonical response function), 它的反函数 [公式] 叫做规范链接函数(canonical link function)。 因此,对于高斯分布来说,它的规范响应函数正好就是识别函数(identify function);而对于伯努利分布来说,它的规范响应函数则是逻辑函数(logistic function)。

Softmax 回归

此部分内容观看 Youtube | Softmax Function Explained In Depth with 3D Visuals 视频会有一个比较直观的理解。

依然是讨论分类问题,但现在要分超过两类的标签,我们依然可以借用之前二值逻辑回归的思想。先直观的理解一下,首先假设我们有3个类 {A,B,C}。我们分别对这个三个类进行二值逻辑回归,即 [公式], 这时我们得到的分类图类似下图中 Binary 的情况,类之间可能出现重叠。

这时,我们就需要使用 Softmax 函数对其进行处理。首先对结果进行指数化 ([公式])将所有类的结果都转换成正数,然后归一化(Normalize, [公式]),让所有结果加起来等于1。其过程大致如下图所示:

正式讲解其数学原理:

要对一个可能有 [公式] 个不同输出值的多项式进行参数化,就可以用 [公式] 个参数 [公式] 来对应各自输出值的概率。不过这么多参数可能太多了,形式上也太麻烦,他们也未必都是互相独立的(比如对于任意一个[公式]中的值来说,只要知道其他的 [公式] 个值,就能知道这最后一个了,因为总和等于[公式],也就是[公式])。所以咱们就去掉一个参数,只用 [公式] 个:[公式] 来对多项式进行参数化,其中[公式]。为了表述起来方便,我们还要设 [公式],但一定要注意,这个并不是一个参数,而是完全由其他的 [公式] 个参数来确定的。

要把一个多项式表达成为指数组分布,还要按照下面的方式定义一个 [公式]:

[公式]

这次和之前的样例都不一样了,就是不再有 [公式];然后,[公式] 现在是一个 [公式] 维的向量,而不是一个实数了。向量 [公式] 中的第 [公式] 个元素写成[公式] 

现在介绍一种非常有用的记号。指示函数(indicator function)[公式],如果参数为真,则等于[公式];反之则等于[公式][公式])。例如[公式], 而[公式]。所以我们可以把[公式]  [公式] 的关系写成 [公式]。(往下继续阅读之前,一定要确保你理解了这里的表达式为真!)在此基础上,就有了[公式]

现在一切就绪,可以把多项式写成指数族分布了。写出来如下所示:

[公式]

其中:

[公式]

这样咱们就把多项式方程作为一个指数族分布来写了出来。

 [公式]对应的链接函数为:

[公式]

为了方便起见,我们再定义 [公式]。对链接函数取反函数然后推导出响应函数,就得到了下面的等式:

[公式]

这就说明了[公式],然后可以把这个关系代入回到等式[公式],这样就得到了响应函数:

[公式]

上面这个函数从[公式] 映射到了[公式],称为 Softmax 函数。

要完成我们的建模,还要用到前文提到的假设3,也就是 [公式] 是一个 [公式] 的线性函数。所以就有了 [公式],其中的 [公式] 就是我们建模的参数。为了表述方便,我们这里还是定义[公式],这样就有 [公式],跟前文提到的相符。因此,我们的模型假设了给定 [公式]  [公式] 的条件分布为:

[公式]

这个适用于解决 [公式] 的分类问题的模型,就叫做 Softmax 回归。 这种回归是对逻辑回归的一种扩展泛化。

假设(hypothesis) [公式] 则如下所示:

[公式]

也就是说,我们的假设函数会对每一个 [公式] ,给出 [公式] 概率的估计值。(虽然咱们在前面假设的这个 [公式] 只有 [公式] 维,但很明显 [公式] 可以通过用 [公式] 减去其他所有项目概率的和来得到,即[公式]。)

最后,咱们再来讲一下参数拟合。和我们之前对普通最小二乘线性回归和逻辑回归的原始推导类似,如果咱们有一个有 [公式] 个训练样本的训练集 [公式],然后要研究这个模型的参数 [公式] ,我们可以先写出其似然函数的对数:

[公式]

要得到上面等式的第二行,要用到等式[公式]中的设定 [公式]。现在就可以通过对 [公式] 取最大值得到的 [公式] 而得到对参数的最大似然估计,使用的方法就可以用梯度上升法或者牛顿法了。

本文使用 Zhihu On VSCode 创作并发布