课程回顾
逻辑回归
在上节课中我们介绍了逻辑,回归线性回归模型产生的预测值是连续的实数值不适合直接处理分类任务,为了实现分类,可以利用广义线性回归的思想,在线性模型之上再增加一个sigmoid函数,把线性模型的输出映射到0~1之间,输出一个概率值,并根据这个概率值实现分类。
平方损失函数
为了衡量模型的优劣,需要使用损失函数,在线性回归模型中通常使用平方损失函数,这是逻辑回归的平方损失函数。
采用梯度下降法来更新W和B时需要计算损失函数对W和B的偏导数,这分别是损失函数对W和B的偏导数。
可以看到,在计算偏导数时都需要对sigmoid函数求导数。
这个Y的函数在大部分的时候都非常的平坦,在这些地方它的导数非常接近于0,这就会使得损失函数对W和B的偏导数也非常小,导致迭代更新W和B的步长非常小,更新非常缓慢。
另外在线性回归中平方损失函数是一个凸函数,只有一个极小值点,但是在逻辑回归中它的平方损失函数是复杂的非凸函数,有多个局部极小值点,使用梯度下降法就有可能会陷入局部极小值中。
交叉熵损失函数
交叉熵损失函数
为了解决这些问题,在逻辑回归中通常采用交叉熵损失函数来代替平方损失函数,这是交叉熵损失函数的表达式。
其中
y
i
y_i
yi是第i个样本的标记,
y
^
i
\hat{y}_i
y^i是sigmoid函数的输出,是第i个样本的预测概率。
要注意这里是对
y
^
\hat{y}
y^和
1
−
y
^
1-\hat{y}
1−y^求对数,千万不要搞反了,写成这种形式。
这是因为在二分类问题中标签值是0或者1。当标签值Y=0时,lny没有意义,当y等于1时,1-y没有意义,而
y
^
\hat{y}
y^是sigmoid函数的输出,它只会无限接近于0或者1,永远都不会等于0或者1,因此不存在这个问题。
平均交叉熵损失函数
这个函数是所有样本的交叉熵损失之和除以样本总数就可以得到平均交叉熵损失函数。
对于某个样本来说,当他的真实标签y=1时,1-y=0,这个损失就是第1项,
−
l
n
y
^
-ln\hat{y}
−lny^
这是它对应的函数曲线。
当他的真实标签y=0时,1-y=,这个损失就是第2项,
−
l
n
(
1
−
y
^
)
-ln(1-\hat{y})
−ln(1−y^)。
这是它对应的函数曲线。
我们知道作为损失函数,需要具备两个性质
- 非负性
这是为了保证不同样本的误差,不会相互抵消。
可以看到交叉熵损失函数中的每一项都是正的,满足非负性的要求。 - 一致性
函数的值应该和误差的变化趋势一致。当样本标签和模型输出越接近时,损失函数的值应该越接近于0。
可以看到在交叉熵损失当标签值为1时,预测值越接近于1损失的值越小,当标签值为0时,预测值越接近于0损失的值越小.
交叉熵损失函数不仅具备作为损失函数的两条基本性质,而且它还有更多的优点。
这是交叉熵损失函数对模型参数W和B的偏导数。
可以看到,它不需要对sigmoid函数求导数,因此它能够有效的克服平方损失函数应用于逻辑回归时更新模型参数过慢的问题,这个偏导数的值只受到预测值和真实值之间的误差的影响。
当误差比较大时,偏导数也比较大,模型参数的更新速度就比较快,当误差比较小的时候,更新速度也就比较慢,这也符合我们训练模型的要求。
除此之外,交叉熵损失函数是凸函数,因此使用梯度下降法得到的极小值,就是全局最小值。
下面我们来看一个例子,假设这是一个逻辑回归任务的训练集。
样本 | 标记 | 预测值 | 结果判断 |
---|---|---|---|
样本1 | 0 | 0.1 | 正确 |
样本2 | 0 | 0.2 | 正确 |
样本3 | 1 | 0.8 | 正确 |
样本4 | 1 | 0.99 | 正确 |
其中有4个样本,这分别是每个样本的标记,这是模型预测出的概率,可以使用准确率来评价一个分类器的性能,准确率是正确分类的样本与样本总数之比。
显然这个模型对所有样本的概率预测都和标签的类别是一致的,能够正确的分类,因此它的准确率是100%。
我们来计算它的交叉熵损失。
这是第1个样本的损失,这是它的标记,这是预测的概率,这是1-标记值,这是1-预测的概率。
采用同样的方法可以计算出所有样本的损失,这是所有样本的交叉熵损失之和和平均交叉。
模型A
样本 | 标记 | 预测值 | 结果判断 |
---|---|---|---|
样本1 | 0 | 0.1 | 正确 |
样本2 | 0 | 0.2 | 正确 |
样本3 | 1 | 0.8 | 正确 |
样本4 | 1 | 0.49 | 错误 |
假设这个模型对最后一个样本的预测概率是0.49,那么这个样本就会被归为第0类,出现分类错误。现在这个模型的准确率是75%。
模型B
样本 | 标记 | 预测值 | 结果判断 |
---|---|---|---|
样本1 | 0 | 0.49 | 正确 |
样本2 | 0 | 0.45 | 正确 |
样本3 | 1 | 0.51 | 正确 |
样本4 | 1 | 0.1 | 错误 |
假设还有一个模型B,这是它对这个训练集的预测结果,可以看到也出现了一个错误,这个模型的准确率也是75%。
比较这两个模型:
- 模型A对于前三个样本的判断非常准确,对于样本4,虽然判断错误,但是也没有错的太离谱,这个概率如果超过0.5就可以正确分类了
- 模型B虽然也只是预测错了一个,但是这三个预测正确的也都比较悬,正好在阈值附近,而这个错误的错的非常离谱。
显然在这两个模型中模型A的表现更好,但是它们的分类准确率都是75%,可见仅仅通过准确率是无法细分出模型的优劣的,下面我们来计算它们的交叉熵损失。
可以看到模型A的损失明显低于模型B。交叉商损失函数能够很好的反映出概率之间的误差是训练分类器时的重要依据。