摘要

本周周报基于机器学习课程第五至七讲内容,围绕分类问题、逻辑回归模型与深度学习展开梳理。明确分类任务与回归的本质差异,引出逻辑回归作为基础分类模型。通过最大似然估计推导交叉熵损失函数,逐步完成梯度计算的链式求导,并简要介绍了激活函数的非线性作用和反向传播的梯度计算思想。

Abstract

This week's report is based on the content of lectures five to seven in the machine learning course, focusing on classification problems, logistic regression models, and deep learning. It clarifies the fundamental differences between classification tasks and regression, introducing logistic regression as a basic classification model. Through maximum likelihood estimation, it derives the cross-entropy loss function, step-by-step completes the chain rule for gradient calculation, and briefly introduces the nonlinear role of activation functions and the concept of gradient computation in backpropagation.

一、分类问题

前面几周学习处理回归任务——输入一个特征向量\mathbf{x},输出一个连续的数值 y(例如预测宝可梦的 CP 值)。但现实中大量问题不是求数值,而是判断归属,如:

  1. 这封邮件是正常邮件还是垃圾邮件?

  2. 这张图片里是猫还是狗?

  3. 一个宝可梦属于水系还是火系?

这类任务称为分类。以二分类为例,标签 y 只能取 0 或 1。需要找一个函数 f,把输入映射到标签,但直接用回归的线性模型加均方误差会产生输出可能远大于 1 或远小于 0,数值无法解释为概率的严重问题,因此,学习发现分类需要专门的模型与损失函数。

二、逻辑回归

2.1 模型定义

逻辑回归的第一步是对输入特征做一个线性加权求和

z = \mathbf{w}^T \mathbf{x} + b

但 z 可以取任意实数,而我们希望输出一个 0 到 1 之间的概率。于是引入 sigmoid 函数:

\sigma(z) = \frac{1}{1 + e^{-z}}

模型输出为:

\hat{y} = \sigma(z) = \frac{1}{1 + e^{-(\mathbf{w}^T \mathbf{x} + b)}}

\hat{y} 被解释为给定输入 \mathbf{x} 时,样本属于正类(y=1)的后验概率

P(y=1\mid \mathbf{x})

sigmoid 函数的重要性质:

\begin{aligned} \sigma'(z) &= \frac{d}{dz}(1+e^{-z})^{-1} = -(1+e^{-z})^{-2} \cdot (-e^{-z}) \\ &= \frac{e^{-z}}{(1+e^{-z})^2} = \frac{1}{1+e^{-z}} \cdot \frac{e^{-z}}{1+e^{-z}} \\ &= \sigma(z) \left(1 - \frac{1}{1+e^{-z}}\right) \\ &= \sigma(z)(1-\sigma(z)) \end{aligned}

于是有

{\sigma'(z) = \hat{y}(1-\hat{y})}

这个性质将在梯度计算中带来巨大便利。

2.2 损失函数

有训练样本

\{(\mathbf{x}^i, y^i)\}_{i=1}^Ny^i \in \{0,1\}

逻辑回归假设每个样本的标签服从伯努利分布:

当y=1时,概率为 \hat{y};当y=0,概率为 1-\hat{y}

P(y^i \mid \mathbf{x}^i; \mathbf{w}, b) = (\hat{y}^i)^{y^i} (1-\hat{y}^i)^{1-y^i}

假设样本独立同分布,整个训练集的似然函数为:

L(\mathbf{w}, b) = \prod_{i=1}^{N} (\hat{y}^i)^{y^i} (1-\hat{y}^i)^{1-y^i}

我们希望找到参数 \mathbf{w}, b 使这个似然最大。由于对数函数单调,最大化 L 等价于最大化对数似然:

\ln L = \sum_{i=1}^{N} \left[ y^i \ln \hat{y}^i + (1-y^i) \ln(1-\hat{y}^i) \right]

它衡量了两个概率分布(真实标签与预测概率)之间的差异。

为什么不用均方误差?
如果用均方误差  \frac{1}{N}\sum (\hat{y}^i - y^i)^2,当我们对参数求导时,梯度会包含因子 \hat{y}(1-\hat{y})。当预测概率趋近于 0 或 1,该因子接近 0,导致梯度消失,参数几乎无法更新。而交叉熵与 sigmoid 配合,这个因子会被消掉,梯度模型数据健康。

2.3 梯度计算推导

对单个样本 (\mathbf{x}, y),忽略常数 1/N,其损失为:

l = -\left[ y \ln \hat{y} + (1-y) \ln(1-\hat{y}) \right]

其中 \hat{y} = \sigma(z),\; z = \mathbf{w}^T \mathbf{x} + b

我们需要求 \frac{\partial l}{\partial \mathbf{w}}\frac{\partial l}{\partial b},使用链式法则。

\frac{\partial l}{\partial \hat{y}} = -\left( \frac{y}{\hat{y}} - \frac{1-y}{1-\hat{y}} \right) = -\frac{y(1-\hat{y}) - (1-y)\hat{y}}{\hat{y}(1-\hat{y})} = \frac{\hat{y} - y}{\hat{y}(1-\hat{y})}

\frac{\partial \hat{y}}{\partial z} = \sigma'(z) = \hat{y}(1-\hat{y})

\frac{\partial z}{\partial \mathbf{w}} = \mathbf{x}, \qquad \frac{\partial z}{\partial b} = 1

合成:

\frac{\partial l}{\partial \mathbf{w}} = \frac{\partial l}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z} \cdot \frac{\partial z}{\partial \mathbf{w}} = \frac{\hat{y} - y}{\hat{y}(1-\hat{y})} \cdot \hat{y}(1-\hat{y}) \cdot \mathbf{x} = (\hat{y} - y)\,\mathbf{x}

\frac{\partial l}{\partial b} = \frac{\partial l}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z} \cdot \frac{\partial z}{\partial b} = \frac{\hat{y} - y}{\hat{y}(1-\hat{y})} \cdot \hat{y}(1-\hat{y}) \cdot 1 = \hat{y} - y

通过学习发现:梯度形式与线性回归的均方误差梯度完全相同(回归中也是 (\hat{y}-y)\mathbf{x})。 \hat{y}(1-\hat{y}) 完美消去,梯度不会消失。

对整个训练集求平均,最终的参数更新公式为:

{\mathbf{w} \leftarrow \mathbf{w} - \eta \frac{1}{N}\sum_{i=1}^{N} (\hat{y}^i - y^i)\,\mathbf{x}^i}

{b \leftarrow b - \eta \frac{1}{N}\sum_{i=1}^{N} (\hat{y}^i - y^i)}

2.4 逻辑回归的局限性

逻辑回归的决策边界是 \mathbf{w}^T\mathbf{x}+b = 0,在二维平面上就是一条直线。这意味着它只能解决线性可分的问题。
经典的反例是异或问题,四个样本点 (0,0), (1,1) 为正类,(0,1), (1,0) 为负类,无法用一条直线分开。这表明单个逻辑回归的表达能力有限,需要更强的模型——这就催生了深度学习。

三、深度学习简介

3.1 神经网络

既然一个逻辑回归只能画直线,能否用多个逻辑回归组合出复杂的曲线?早期的做法是人工特征变换,将原始特征\mathbf{x}映射到新空间\phi(\mathbf{x}),使得新空间中数据线性可分(例如把 (x_1, x_2)扩充为(x_1, x_2, x_1x_2)解决异或问题)。但这样的设计全靠人类经验,面对图像、语音等复杂数据几乎不可行。所以神经网络的核心思想是让模型自己学习变换\phi。一个神经元做的事情与逻辑回归完全一样:

a = \sigma(\mathbf{w}^T \mathbf{x} + b)

多个神经元并行组成一层,这一层的输出可以视为自动学到的“新特征”,如下步骤:

第一层:输入 \mathbf{x},输出 \mathbf{a}^{(1)}(学到的初级特征)
第二层:以 \mathbf{a}^{(1)} 为输入,输出 \mathbf{a}^{(2)}(更抽象的特征)
第一层:输出预测值(分类时接 sigmoid 或 softmax)

将这样的层堆叠起来,这种结构就是多层感知机(MLP),也叫全连接神经网络。当层数很多时,就称为深度学习。

3.2 激活函数的作用与选择

每个神经元的输出必须经过一个非线性激活函数。如果没有激活函数,那么多层网络等价于单层线性模型,堆叠再多层也无意义。激活函数引入了非线性,使得网络能够逼近任意复杂函数。sigmoid 是早期常用的激活函数,但有一个缺陷:当输入绝对值较大时,梯度趋于零(饱和区),导致深层网络训练困难。

\text{ReLU}(z) = \max(0, z)

它的导数在正半轴恒为 1,不会饱和,能有效缓解梯度消失,且计算简单。

3.3 反向传播

神经网络参数量巨大,要计算每个参数对损失函数的偏导数,直接暴力计算不现实。反向传播 正是解决这一问题的算法,其本质是链式法则的高效实现。

前向传播:输入 \mathbf{x} 沿网络逐层计算,得到预测值\hat{y},并记录中间结果。
反向传播:从输出层的损失开始,利用链式法则将误差“梯度”逐层往回传递。
损失对输出层权重的梯度:

\frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(2)}} = \frac{\partial \mathcal{L}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z^{(2)}} \cdot \frac{\partial z^{(2)}}{\partial \mathbf{W}^{(2)}} = (\hat{y} - y) \cdot \mathbf{a}^{(1)}

损失对隐藏层权重的梯度:

\frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(1)}} = \left( (\hat{y} - y) \mathbf{W}^{(2)} \right) \odot \sigma'(z^{(1)}) \cdot \mathbf{x}

其中\odot 表示逐元素乘积,\sigma'为激活函数导数。可以看到,梯度被一层层“反传”回去,每一层只需处理本层的局部导数,整个过程高效且模块化。

四、总结

本周在学习过程中认识到,逻辑回归是深度学习的根本,损失函数的概率视角为模型选择提供了依据,而神经网络的层级结构并非复杂晦涩,其核心仍是梯度下降与链式法则的组合,这为后续学习更复杂的网络训练奠定了坚实基础。接下来将了解激活函数的优缺点,并进行代码实操。

更多推荐