# 从样本中学习

# 线性回归

线性回归模型旨在找到一个线性函数 y=wTx+by = w^T x + b 来拟合数据,其中 ww 为权重向量,bb 为偏置项。

# 损失函数(MSE)

均方误差(Mean Squared Error, MSE)是常用的损失函数,它度量了预测值与真实值之间的平均平方差:

L(w,b)=1ni=1n(yiwTxib)2L(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - w^T x_i - b)^2

# 模型求解

  • 解析解

    当数据特征矩阵 XX 和标签向量 yy 已知时,可以通过以下矩阵运算直接求解最优参数 (b,wT)T(b, w^T)^T

    X=[111x1x2xn]T(b,wT)T=(XTX)1XTyX = \begin{bmatrix} 1 & 1 & \cdots & 1 \\ x_{1} & x_{2} & \cdots & x_{n} \end{bmatrix}^T \\ (b, w^T)^T = (X^T X)^{-1} X^T y

  • 梯度下降

    通过迭代更新参数来最小化损失函数。学习率 η\eta 控制了每次更新的步长:

    w=wηL(w,b)wb=bηL(w,b)bw = w - \eta \frac{\partial L(w, b)}{\partial w} \\ b = b - \eta \frac{\partial L(w, b)}{\partial b}

# 向量求导公式

在梯度下降中,会用到向量和矩阵的求导。以下是一些常用公式:

aba=bT,aTba=babb=aT,abTb=aaTaa=2a,aaTa=2aaTXbX=abT,xTAxx=(A+AT)x\frac{\partial ab}{\partial a} = b^T, \quad \frac{\partial a^T b}{\partial a} = b \\ \frac{\partial ab}{\partial b} = a^T, \quad \frac{\partial a b^T}{\partial b} = a \\ \frac{\partial a^T a}{\partial a} = 2a, \quad \frac{\partial a a^T}{\partial a} = 2a \\ \frac{\partial a^TXb}{\partial X} = ab^T, \quad \frac{\partial x^TAx}{\partial x} = (A + A^T)x

# 极大似然估计与高斯噪声

假设模型的预测误差 ϵ\epsilon 服从均值为0、方差为 σ2\sigma^2 的高斯分布,即 y=wTx+b+ϵy = w^T x + b + \epsilonϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2)。此时,最小化均方误差(MSE)等价于对线性模型进行最大似然估计。

P(yx)=12πσ2exp((ywTxb)22σ2)P(y | x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y - w^T x - b)^2}{2\sigma^2}\right)

对数似然函数为:

logP(yx;w,b)=i=1n(yiwTxib)22σ2+n2log2πσ2-\log P(y | x; w, b) = \sum_{i=1}^{n} \frac{(y_i - w^T x_i - b)^2}{2\sigma^2} + \frac{n}{2} \log 2\pi\sigma^2

# 多项式回归

多项式回归通过引入多项式特征来拟合非线性关系,其模型形式为 y^=i=0dwixi\hat y = \sum_{i=0}^{d} w_i x^i。在使用 MSE 损失函数时,其解析解与线性回归类似,但特征矩阵 XX 包含了多项式项。

X=[111x1x2xnx1dx2dxnd]T(w0,w1,,wd)T=(XTX)1XTyX = \begin{bmatrix} 1 & 1 & \cdots & 1 \\ x_{1} & x_{2} & \cdots & x_{n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{1}^d & x_{2}^d & \cdots & x_{n}^d \end{bmatrix}^T \\ (w_0, w_1, \cdots, w_d)^T = (X^T X)^{-1} X^T y

# 正则化

正则化通过在损失函数中增加一个惩罚项来避免模型过拟合。

  • L2 正则化(岭回归)

    L2 正则化项为 R=12w22R = \frac{1}{2} ||w||_2^2。它对较大的权重向量进行惩罚,倾向于使所有特征的权重均匀减小,从而提高模型的稳定性。在梯度下降中,L2 正则化项会使权重更新时额外乘以一个小于1的因子,因此也被称为权重衰减(weight decay)

    w=wα(L(w,b)w+λR(w)w)=wα(L(w,b)w+λw)=(1αλ)wαL(w,b)w\begin{aligned} w &= w - \alpha(\frac{\partial L(w, b)}{\partial w} + \lambda \frac{\partial R(w)}{\partial w}) \\ &= w - \alpha(\frac{\partial L(w, b)}{\partial w} + \lambda w) \\ &= (1 - \alpha \lambda) w - \alpha \frac{\partial L(w, b)}{\partial w} \end{aligned}

  • L1 正则化(Lasso 回归)

    L1 正则化项为 R=w1R = ||w||_1。它倾向于使不重要的特征权重变为0,因此常用于特征选择

  • 无穷范数

    无穷范数取向量中元素绝对值的最大值,即 w=maxiwi||w||_{\infty} = \max_i |w_i|

# 从线性分类器到多层感知机

# 二分类问题

# 线性分类器

线性分类器使用一个线性函数进行分类,并通过阶跃函数将结果映射到类别标签。

fW,b(X)=g(WTX+b)=g(z)={1,z00,z<0f_{W, b}(X) = g(W^T X + b) = g(z) = \begin{cases} 1, & z \geq 0 \\ 0, & z < 0 \end{cases}

# 损失函数

  • 0-1 损失函数

    0-1 损失函数直接度量分类错误的样本数量,但由于其不连续和非凸的特性,难以用梯度下降进行优化。

    L(y,y^)={0,y=y^1,yy^=Iyy^L=1ni=1nI(yiy^i)L(y, \hat y) = \begin{cases} 0, & y = \hat y \\ 1, & y \neq \hat y \end{cases} = \mathbb{I}_{y \neq \hat y} \\ L = \frac{1}{n} \sum_{i=1}^{n} \mathbb{I}(y_i \neq \hat y_i)

  • 线性回归损失

    将线性回归的损失函数用于分类问题,当模型以高置信度作出正确预测时,损失反而会变高。

    y^=WTX+b,L(y,y^)=12(yy^)2\hat y = W^T X + b, \quad L(y, \hat y) = \frac{1}{2} (y - \hat y)^2

  • 使用 Logistic 激活函数与平方损失

    引入 Sigmoid (Logistic) 激活函数 σ(z)=11+exp(z)\sigma(z) = \frac{1}{1 + \exp(-z)},并结合平方损失。当模型作出高置信度的错误预测时,梯度会趋于零,导致梯度消失问题。

    L(y,z)=(yσ(z))2L(y, z) = (y - \sigma(z))^2

  • 交叉熵损失函数

    交叉熵损失函数克服了梯度消失问题,是二分类问题中常用的损失函数。

    L(y,y^)=ylog(y^)(1y)log(1y^)L(y, \hat y) = -y \log(\hat y) - (1 - y) \log(1 - \hat y)

# Logistic 回归

Logistic 回归结合了 Sigmoid 激活函数和交叉熵损失函数,形成一个完整的二分类模型。

y^=σ(WTX+b),L(y,y^)=ylog(y^)(1y)log(1y^)\hat y = \sigma(W^T X + b), \quad L(y, \hat y) = -y \log(\hat y) - (1 - y) \log(1 - \hat y)

# 多分类问题

# Softmax 函数

Softmax 函数将线性模型的输出 zz 转换为一个概率分布,使得所有类别的概率之和为1。

y^i=softmax(zi)=exp(zi)j=1nexp(zj)\hat y_i = \text{softmax}(z_i) = \frac{\exp(z_i)}{\sum_{j=1}^{n} \exp(z_j)}

Softmax 梯度

y^jzi={y^i(1y^i),i=jy^iy^j,ij\frac{\partial \hat y_j}{\partial z_i} = \begin{cases} \hat y_i (1 - \hat y_i), & i = j \\ -\hat y_i \hat y_j, & i \neq j \end{cases}

# 损失函数

  • 交叉熵损失

    多分类问题的交叉熵损失函数是二分类的泛化形式。当真实标签 yiy^{i} 为 one-hot 向量时,该损失函数只计算真实类别对应的对数概率。

    L(yi,y^i)=j=1num_classesyjilog(y^ji)L=i=1nj=1num_classesyjilog(y^ji)L(y^{i}, \hat y^{i}) = -\sum_{j=1}^{\text{num\_classes}} y_j^{i} \log(\hat y_j^{i}) \\ L = -\sum_{i=1}^{n} \sum_{j=1}^{\text{num\_classes}} y_j^{i} \log(\hat y_j^{i})

  • 支持向量机(SVM)损失

    SVM 的目标是找到一个最优超平面,使得不同类别的样本点到该超平面的距离最大化。

    • 样本点到超平面的距离

      r=wTx+bwr = \frac{|w^T x + b|}{||w||}

    • 二分类损失函数

      也被称为“Hinge Loss”。

      Li=max(0,1yi(wTxi+b))L_i = \max(0, 1 - y^{i} (w^T x^{i} + b))

    • 多分类损失函数

      该损失函数旨在确保正确类别的分数比所有其他类别的分数至少高出 δ\delta

      Li=jyinum_classesmax(0,WjTxiWyiTxi+δ)L^i = \sum_{j \neq y^{i}}^{\text{num\_classes}} \max(0, W_j^T x^{i} - W_{y^{i}}^T x^{i} + \delta)

    • 完整 SVM 损失

      完整的损失函数包含损失项和 L2 正则化项。

      L=i=1njyinum_classesmax(0,WjTxiWyiTxi+δ)+λ2W2L = \sum_{i=1}^{n} \sum_{j \neq y^{i}}^{\text{num\_classes}} \max(0, W_j^T x^{i} - W_{y^{i}}^T x^{i} + \delta) + \frac{\lambda}{2} ||W||^2

# 多层感知机(MLP)

多层感知机由多个神经元层组成,层与层之间通过激活函数连接。

# 常见激活函数

激活函数 f(z)f(z) f(z)f'(z) 备注
Sigmoid 11+ez\frac{1}{1+e^{-z}} ez(1+ez)2\frac{e^{-z}}{(1+e^{-z})^2} 1. 非零中心;<br>2. 饱和区域梯度消失;<br>3. 通常用于二分类的输出层。
Tanh ezezez+ez\frac{e^z-e^{-z}}{e^z+e^{-z}} 4e2z(1+ez)2\frac{4e^{-2z}}{(1+e^{-z})^2} 1. 零中心;<br>2. 饱和区域梯度消失;<br>3. 在RNN中应用较多。
ReLU max(0,z)\max(0,z) {1z>00z<0\begin{cases} 1 & z > 0 \\ 0 & z < 0 \end{cases} 1. 解决了正值区域的梯度消失问题;<br>2. 非零中心;<br>3. 负值部分梯度为零,可能导致神经元“死亡”(dead neurons)。
Leaky ReLU {zz>0αzz0\begin{cases} z & z > 0 \\ \alpha z & z \le 0 \end{cases} {1z>0αz<0\begin{cases} 1 & z > 0 \\ \alpha & z < 0 \end{cases} 通过在负值区域引入一个小斜率 α\alpha 来部分解决“死亡神经元”问题。

# 损失函数

多层感知机的完整损失函数通常由数据损失项和正则化项组成。

L=1ni=1nL(yi,y^i)+λR(W)L = \frac{1}{n} \sum_{i=1}^{n} L(y^{i}, \hat y^{i}) + \lambda R(W)

# 矩阵求导公式

  • 展开形式

    矩阵求导的通用定义为:(yx)ij=yjxi(\frac{\partial y}{\partial x})_{ij} = \frac{\partial y_j}{\partial x_i},即结果矩阵的行索引对应分母向量的索引,列索引对应分子向量的索引。

  • 常用公式

    xAx=AT,xxTA=AxxTAx=Ax+ATxXaTXb=abT,XaTXXTb=X(abT+baT)Adet(A)=det(A)AT,Atr(AB)=BT,Atr(A1B)=ATBTATAF2=tr(ATA)\nabla_x Ax = A^T, \quad \nabla_x x^TA = A \\ \nabla_x x^TAx = Ax + A^Tx \\ \nabla_X a^TXb = ab^T, \quad \nabla_X a^TXX^Tb=X(ab^T+ba^T) \\ \nabla_A \det(A) = \det(A)A^{-T}, \quad \nabla_A tr(AB) = B^T, \quad \nabla_A tr(A^{-1}B) = -A^{-T}B^T A^{-T} \\ ||A||_F^2 = tr(A^TA)

  • 激活函数梯度

    由于激活函数通常是按元素操作,其梯度通常是对角矩阵。

    tanhx=diag(1tanh2x)\nabla \tanh x = \text{diag}(1-\tanh^2 x)

# 卷积神经网络(CNN)

# 组成成分

卷积神经网络主要由卷积层池化层全连接层激活函数以及正则化构成。其中,正则化也包括了**批量归一化(Batch Normalization)**等技术,如 xi,j=xi,jμσ2+ϵx_{i, j} = \frac{x_{i, j} - \mu}{\sqrt{\sigma^2 + \epsilon}}

# 卷积层

  • 输入/输出维度

    • 输入N×Cin×Hin×WinN \times C_{in} \times H_{in} \times W_{in} (批量大小, 输入通道, 高, 宽)
    • 卷积核Cout×Cin×Hk×WkC_{out} \times C_{in} \times H_k \times W_k (输出通道, 输入通道, 高, 宽)
    • 输出N×Cout×Hout×WoutN \times C_{out} \times H_{out} \times W_{out} (批量大小, 输出通道, 高, 宽)
  • 超参数

    • 卷积核数量 K=CoutK = C_{out}
    • 卷积核大小 FF
    • 步长 SS
    • 填充 PP
  • 空间维度变化

    • 输出宽度 Wout=WinF+2PS+1W_{out} = \frac{W_{in} - F + 2P}{S} + 1
    • 输出高度 Hout=HinF+2PS+1H_{out} = \frac{H_{in} - F + 2P}{S} + 1
  • 感受野大小

    • 每一层卷积增加 F1F-1 的感受野大小。
    • 对于具有相同卷积核大小 FFLL 层网络,其总感受野大小为 1+L(F1)1 + L(F-1)

# 池化层

池化层用于下采样,通常使用最大池化平均池化,该层没有可学习参数

# 全连接层

全连接层连接了前一层的所有神经元,其参数量为 din×dout+doutd_{\text{in}} \times d_{\text{out}} + d_{\text{out}},其中 dind_{\text{in}}doutd_{\text{out}} 分别为输入和输出的维度。