逻辑回归

  • 1、逻辑回归模型
  • 2、逻辑回归的代价函数
  • 3、梯度下降


1、逻辑回归模型

逻辑回归是一种针对二分类问题的算法。在二分类算法中,标签 y 往往都等于 0 或者 1,以此表示某个样本是否属于某个类别。比如在一个针对猫的二分类任务中,y=0 表示这张图片不是猫,y=1 表示这张图片是猫。

对于输入的 x,逻辑回归算法能够输出一个预测值,我们称之为 三分类逻辑回归 逻辑回归二分类三要素_代价函数,这代表对真实标签 Y 的估计。准确的说 三分类逻辑回归 逻辑回归二分类三要素_代价函数 是当给定输入特征 x 时,预测标签 y 为 1 的概率。

一般来说 x 是一个 n 维的向量,表示一个样本包含 n 个特征。约定逻辑回归的参数是 w 和 b,w 也是一个 n 维的向量,b 是一个实数。给定一个 x 以及参数 w 和 b, 如何产生输出 三分类逻辑回归 逻辑回归二分类三要素_代价函数 呢?线性回归 三分类逻辑回归 逻辑回归二分类三要素_代价函数_04 可以吗。显然这对于二分类并不是一个好的算法,因为我们希望 三分类逻辑回归 逻辑回归二分类三要素_代价函数 能够输出 y 为 1 的概率,所以 三分类逻辑回归 逻辑回归二分类三要素_代价函数 的值应该在0和1之间。而线性回归 三分类逻辑回归 逻辑回归二分类三要素_损失函数_07 可能会比1大很多或者是一个负,这对于概率就失去了意义。

所以这里我们采用逻辑回归,而逻辑回归就只是在线性回归的基础上加入了 sigmoid 激活函数。如何实现逻辑回归呢?根据刚刚的描述,我们先创建一个线性回归模型

三分类逻辑回归 逻辑回归二分类三要素_深度学习和神经网络_08

接着再将线性回归的输出传入 sigmoid 函数

三分类逻辑回归 逻辑回归二分类三要素_代价函数_09

这样就使线性模型转变成了一个非线性的模型。我们可以用下图来描述逻辑回归的结构。

三分类逻辑回归 逻辑回归二分类三要素_线性回归_10


根据 sigmoid 函数的表达式,可以描绘出它的曲线:

三分类逻辑回归 逻辑回归二分类三要素_损失函数_11


通过 sigmoid 曲线可以看到,不管 z 取到何值,sigmoid 函数总能巧妙的把 z 映射到 0 到 1 的范围内,这样就能很好的表示样本属于某个类别的概率。sigmoid 函数是使逻辑回归成为一个非线性模型的关键,所以往往又把 sigmoid 函数叫做逻辑函数。

给定包含 m 个样本的数据集,假设每个样本包含一个 n 维的特征向量 x 和 一个标签 y,则可以表示为:

三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_12

则对于数据集中的第 i 个样本:

三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_13

我们希望逻辑回归模型的预测值接近于样本的真实标签,即 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_14

2、逻辑回归的代价函数

为了优化逻辑回归模型的参数 w 和 b,需要定义一个代价函数。在讨论代价函数之前,先学习一下损失函数。损失函数(Loss function) 用来计算对单个样本的预测值 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_15 和期望输出 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_16

在线性回归中,损失函数为平方差函数,其是凸函数,执行梯度下降算法时,loss 能很好地收敛,从而得到更优的参数。理论上来说,我们也可以在逻辑回归中使用平方差函数为损失函数,但因为逻辑回归中存在 sigmod 函数,最终得到的损失函数并不能保证是凸函数,存在许多局部最优解,这对于梯度下降是不利的。所以逻辑回归模型需要定义新的损失函数。
参考链接:

逻辑回归使用交叉熵作为损失函数。以下是它的定义:

三分类逻辑回归 逻辑回归二分类三要素_深度学习和神经网络_17

三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_16 = 1 时,三分类逻辑回归 逻辑回归二分类三要素_代价函数_19,此时 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_15 越靠近 1,三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_21 越小。在学习过程中,我们要使 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_21 越来越小,使需要让 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_15 逐渐靠近 1。 当 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_16 = 0 时,三分类逻辑回归 逻辑回归二分类三要素_线性回归_25,此时 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_15 越靠近 0,三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_21 越小。在学习过程中,我们要使 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_21 越来越小,使需要让 三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_15

代价函数(Cost function) 用来计算模型在整个训练集中所有样本的损失的平均值。与损失函数不同的是,它体现的是整体的误差,通过整体误差的高低也可以判断模型性能的好坏。代价函数的定义如下:

三分类逻辑回归 逻辑回归二分类三要素_代价函数_30


逻辑回归的本质是最大似然估计,其代价函数的详细推导可参考:

3、梯度下降

需要注意的是,逻辑回归模型的自变量是样本的特征向量 x,因变量是预测结果 三分类逻辑回归 逻辑回归二分类三要素_代价函数。而代价函数是用来评估这个模型的性能,从它的定义也可以看出它的自变量为模型的参数 w 和 b,它的因变量为模型在整个训练集上的误差。对于不同的 w 和 b,损失函数输出的整体误差也不尽相同。学习的目的就是找到使代价函数达到最小的参数 w 和 b,换句话说就是找到使整体误差最小的参数 w 和 b,而梯度下降算法刚好可以达到这个目的。

三分类逻辑回归 逻辑回归二分类三要素_线性回归_32


模型参数 w 与 x 的维度一样,都是 n 维的向量。但是为了更好地绘图,在这里定义 w 和 b 都是单一实数。代价函数 J(w,b) 是在 水平轴 w 和 b 上的曲面 因此曲面的高度就是 J(w,b)在某一点的值。理想的代价函数是一个凸函数,这样就存在一个全局最优值(最小值),同时它也是梯度下降想要到达的位置,它位于图中最底下的红点处。

对于逻辑回归,几乎所有的初始化方法都有效,通常用 0 来进行初始化。随机初始化也有效,但是对于逻辑回归通常不这么做。但是因为函数是凸函数,无论在哪里初始化,应该达到同一点或大致相同的点。梯度下降算法从初始点开始,每到达一点,都会先找到最陡的下坡方向,然后朝着这个方向向下移动到一个新的位置并且更新参数 w 和 b,重复这两个步骤,最终可以到达至曲面的最低点附近。而这个最低点对应的 w 和 b,就是我们想要得到的 w 和 b。

在数学上,这个最陡的下坡方向可以用代价函数对参数 w 和 b 的偏导来体现。则通过刚刚的描述,我们可以把梯度下降定义为:

重复以下步骤 {三分类逻辑回归 逻辑回归二分类三要素_深度学习和神经网络_33 三分类逻辑回归 逻辑回归二分类三要素_深度学习和神经网络_34 }

其中 三分类逻辑回归 逻辑回归二分类三要素_线性回归_35 被称为 学习率(learning rate),它可以用来控制梯度下降每一步移动的大小,从而控制训练的时间。如果我们令三分类逻辑回归 逻辑回归二分类三要素_三分类逻辑回归_36

三分类逻辑回归 逻辑回归二分类三要素_深度学习和神经网络_37 三分类逻辑回归 逻辑回归二分类三要素_深度学习和神经网络_38