文章目录
  1. 1. Logistic Regression
    1. 1.1. sigmoid 函数
    2. 1.2. 逻辑回归
    3. 1.3. 参数求解
    4. 1.4. 工程技巧
    5. 1.5. 总结
    6. 1.6. 参考

Logistic Regression

逻辑回归是一种常见的分类模型,可以支持很高的特征维度,但是效率依然很高,而逻辑回归也是其他许多算法的基础,所以这里重点介绍一下,并总结一些 trick。

sigmoid 函数

sigmoid 函数是神经网络中常用的激活函数之一,其定义为:

sigmoid function

该函数的定义域为 ${(-\infty,+\infty)}$,值域为 ${(0,1)}$,可以理解为将 分数 压缩成 概率。其导函数具有如下的形式:

那么,函数 ${\log \sigma(x)}$ 和 ${\log (1 - \sigma(x))}$ 的导函数为:

逻辑回归

逻辑回归是针对线性可分问题的一种易于实现而且性能优异的分类模型,是使用最为广泛的分类模型之一。假设某件事发生的概率为 ${p}$,那么这件事不发生的概率为 ${1-p}$,我们称 ${\frac{p}{1-p}}$ 为这件事情发生的几率。取这件事情发生几率的对数,定义为 ${\operatorname{logit}(p)}$。

对于二分类问题,我们将事件发生看成是分类器判别样本为正例的概率,将事件未发生看成是分类器判别样本负例的概率。利用 ${sigmoid}$ 函数,对于样本 ${X = (x_1, x_2, \cdots, x_n)^T}$,可以将二分类问题的 hypothesis 函数写成:

也可以用极大似然估计的方式来看到这个问题,即 ${p(y|x) = \hat{y} = h_{\theta}(\mathrm{x})}$,那么式子可以化简为:

同时,也可以取一个对数,可以发现 logloss 是一种特殊的交叉熵:

那么单个样本的代价函数/损失函数为:

那么逻辑回归在整体的样本上的损失为:

参数求解

逻辑回归模型的参数为 ${\theta}$,是一个向量,由于 ${J(\theta)}$ 是一个凸函数,那么可以采取梯度下降的策略来求解。

对于 ${\theta}$ 的单个维度,那么梯度更新的策略为:

$
\frac{\partial}{\partial\theta_{j}}J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}\frac{1}{h_{\theta}\left(\mathrm{x}^{(i)}\right)}\frac{\partial}{\partial\theta_{j}}h_{\theta}\left(\mathrm{x}^{(i)}\right)-\left(1-y^{(i)}\right)\frac{1}{1-h_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)}\frac{\partial}{\partial\theta_{j}}h_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)\right)
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}\frac{1}{g\left(\theta^{T}x^{(i)}\right)}-\left(1-y^{(i)}\right)\frac{1}{1-g\left(\theta^{T}x^{(i)}\right)}\right)\frac{\partial}{\partial\theta_{j}}g\left(\theta^{T}x^{(i)}\right)
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}\frac{1}{g\left(\theta^{T}x^{(i)}\right)}-\left(1-y^{(i)}\right)\frac{1}{1-g\left(\theta^{T}x^{(i)}\right)}\right)g\left(\theta^{T}x^{(i)}\right)\left(1-g\left(\theta^{T}x^{(\mathrm{i})}\right)\right)
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}\left(1-g\left(\theta^{T}x^{(i)}\right)\right)-\left(1-y^{(i)}\right)g\left(\theta^{T}x^{(i)}\right)\right)x_{j}^{(i)}
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{m}\sum_{i=1}^{m}\left(y^{i}-g\left(\theta^{T}x^{(i)}\right)\right)x_{j}^{(i)}
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}-h_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)\right)x_{j}^{(\mathrm{i})}
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{1}{m}\sum_{i=1}^{m}\left(h_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)-y^{(i)}\right)x_{j}^{(\mathrm{i})}
$

对于每一个维度都是一样形式,那么可以采取向量化或者并行化来加速。

工程技巧

sigmoid 函数在 ${x = 0}$ 附近变化剧烈,往两边逐渐趋于平缓,当 ${x < -6}$ 或者 ${x > 6}$ 时,函数值就基本不变了,前者趋近于 ${0}$,后者趋近于 ${1}$。如果在某种应用场景中需要大量计算不同 ${x}$ 所对应的的 ${\sigma(x)}$,而且对 ${\sigma(x)}$ 值的精确度不是非常的严格,那么就可以采取一种近似的算法。

将区间 ${[-6, 6]}$ 等间距划分成 ${K}$ 等分,剖分结点分别记为 ${x_0, x_1, \cdots, x_K}$,它们可以表示为 ${x_i = x_0 + ih}$,其中 ${x_0 = -6}$,步长 ${h = \frac{12}{K}}$。

事先将 ${\sigma(x_i)}$ 的值计算好保存起来(放在内存/缓存里面),计算时,可以采用近似方法。

其中,${k}$ 等于 ${\frac{x-x_0}{h}}$ 对小数点后第一位四舍五入的整数值(即 ${x_k}$ 表示与 ${x}$ 距离最近的剖分点),或者更简单地可以直接对 ${\frac{x-x_0}{h}}$ 的向上或者向下取整。

采用查表的方式提高效率的原因在于,计算机在计算 ${\sigma(x)}$ 的时候,涉及到指数计算 ${\exp(z)}$ 时,使用了泰勒展开:

取其中的前 ${n}$ 项做近似的计算,其优点在于当 ${z}$ 比较小的时候(${|z| < 1}$)时,${n}$ 较小时就可以取得很不错的近似,速度可以很快,但是当 ${z}$ 比较大的时候,展开项比较多,${n}$ 较大的时候才可以得到比较好的近似。然而查表是一次性计算好一大批结点的值,以后只需要进行匹配查询就可以了。

总结

逻辑斯谛函数将原本输出结果从范围 ${(-\infty,+\infty)}$,将 ${(-\infty,+\infty)}$ 映射到 ${(0,1)}$,从而完成概率的估测。

同时,将多个因素要用一个统一的数学模型来描述的方式。好处在于,把各种信号组合起来,无论组合成多大或者多小的值,最后依然能够得到一个概率分布。

逻辑回归函数其实是一个一层的神经网络,如果需要训练的参数量不多,那么反向传播/梯度下降算法都是可以使用的,但是,在搜索广告领域的点击率预估问题中,对于参数 ${\theta}$,需要训练的参数有上百万维,因此需要又更有效的方法。然而,${f(z) = \frac{e^z}{e^z + 1} = \frac{1}{1 + e^{-z}}}$ 在形态上,跟最大熵函数,在函数值和形态上有着共性。

参考

  1. Word2Vec中的数学原理详解
  2. 彻底搞懂逻辑斯蒂回归
  3. 《数学之美》吴军
  4. Logistic回归和梯度下降总结
  5. Logistic回归Cost函数和J(θ)的推导(二)——梯度下降算法求解最小值
文章目录
  1. 1. Logistic Regression
    1. 1.1. sigmoid 函数
    2. 1.2. 逻辑回归
    3. 1.3. 参数求解
    4. 1.4. 工程技巧
    5. 1.5. 总结
    6. 1.6. 参考