深度学习笔记-3:分类模型与深度神经网络入门 - MuxiaoWF跳到主要内容

深度学习笔记-3:分类模型与深度神经网络入门

深度学习笔记-3,涵盖分类模型(判别函数、逻辑回归、softmax)与深度神经网络(激活函数、迁移学习、混合密度网络)。对应《深度学习:基础与概念》第5-6章。

周一 9月 01 2025
11627 字 · 43 分钟

系列第 3/8 篇 ← 上一篇 | 下一篇 | 术语表

建议先看第1篇第2篇。本篇讲分类问题怎么解决(从线性分类器到神经网络),以及深度网络为什么比浅层强。

Chapter 5 单层网络:分类

在机器学习中,分类问题是最基础且重要的任务之一。本章将介绍线性分类模型的基本原理,包括判别函数、决策理论、生成分类器和判别式分类器等核心概念。

判别函数

判别函数(discriminant function,为每个类别打分的函数)为每个类别 CkC_k 定义一个函数 yk(x)y_k(\mathbf{x}),对于输入 x\mathbf{x},将其分配给具有最高判别函数值的类别:

assign x to Ck if yk(x)>yj(x) for all jk\text{assign } \mathbf{x} \text{ to } C_k \text{ if } y_k(\mathbf{x}) > y_j(\mathbf{x}) \text{ for all } j \neq k

二分类:

对于二分类问题,我们定义判别函数 y(x)=wTx+w0y(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0决策边界(decision boundary,分隔不同类别的”分界线”)由 y(x)=0y(\mathbf{x}) = 0 给出,这是一个 (D1)(D-1) 维的超平面(hyperplane,高维空间中的”平面”——二维空间中是直线,三维空间中是普通平面,更高维则叫超平面)。

为了简化表示,常引入一个额外的“输入” x0=1x_0 = 1,并定义增广权重向量 w~=(w0,w)\tilde{\mathbf{w}} = (w_0, \mathbf{w}) 和增广输入向量 x~=(x0,x)\tilde{\mathbf{x}} = (x_0, \mathbf{x}),于是:

y(x)=w~Tx~y(\mathbf{x}) = \tilde{\mathbf{w}}^T \tilde{\mathbf{x}}

此时决策边界通过增广输入空间的原点。

二分类

二分类

  • 红色直线:表示决策边界 y(x)=0y(\mathbf{x}) = 0,并将整个空间分为两个区域:R1R_1y>0y > 0 的区域和R2R_2y<0y < 0 的区域
  • 绿色向量 w\mathbf{w}:表示权重向量(决策边界的法向量)
  • 蓝色向量 x\mathbf{x}:表示输入样本
  • 黑色向量 x\mathbf{x}_\perp:表示输入在决策边界上的投影
  • w0w\frac{-w_0}{||\mathbf{w}||} 是原点到决策边界的距离(决策边界的偏移量)

多分类:

  • 一对多分类器:为每个类别 CkC_k 训练一个分类器,区分 CkC_k 和“非 CkC_k”。这种方法会产生模糊区域,即某些点被多个分类器判定为正类或被所有分类器判定为负类。
  • 一对一分类器:为每一对类别训练一个二分类器,共需 K(K1)/2K(K-1)/2 个分类器。新样本通过多数投票决定类别。这种方法同样会产生模糊区域。

多分类(左一对多分类器,右一对一分类器)

多分类(左一对多分类器,右一对一分类器)

为避免这些问题,我们采用单一 KK 类判别函数,包含 KK 个线性函数:

yk(x)=wkTx+wk0,k=1,,Ky_k(\mathbf{x}) = \mathbf{w}_k^T \mathbf{x} + w_{k0}, \quad k=1,\dots,K

x\mathbf{x} 分配给使 yk(x)y_k(\mathbf{x}) 最大的类别 CkC_k

类别 CkC_kCjC_j 之间的决策边界由 yk(x)=yj(x)y_k(\mathbf{x}) = y_j(\mathbf{x}) 定义,即:

(wkwj)Tx+(wk0wj0)=0(\mathbf{w}_k - \mathbf{w}_j)^T \mathbf{x} + (w_{k0} - w_{j0}) = 0

这是一个 (D1)(D-1) 维的超平面。

决策区域的性质:这种 KK 类线性判别函数的决策区域 RkR_k(即所有被分到 CkC_k 的点的集合)是单连通且凸 的。这意味着,如果区域内的任意两点 xA\mathbf{x}_AxB\mathbf{x}_B 之间的连线上的所有点也都在该区域内。


**1-of-K 编码:**

在分类问题中,目标变量 tt 用于表示类别标签。

  • 二分类:使用二进制编码,t{0,1}t \in \{0, 1\}t=1t=1 表示类别 C1C_1t=0t=0 表示类别 C2C_2
  • 多分类 (K>2K>2):使用 1-of-K 编码(也称 one-hot 编码)。目标向量 t\mathbf{t} 是一个长度为 KK 的向量,如果类别是 CjC_j,则 tj=1t_j=1,其余元素为 0。

例如,对于 K=5K=5 个类别,类别 2 的目标向量为:

t=(0,1,0,0,0)T\mathbf{t} = (0, 1, 0, 0, 0)^T

我们可以将 tkt_k 解释为类别是 CkC_k 的概率(取值为 0 或 1 的极端情况)。


决策理论

决策理论帮助我们在给定后验概率(posterior probability,看到数据 x\mathbf{x} 后,它是某个类别的概率 p(Ckx)p(C_k|\mathbf{x}))的情况下,做出最优的分类决策,尤其是在不同错误类型代价不同时。

损失矩阵 LkjL_{kj} 定义了将真实类别为 CkC_k 的样本错误地分类为 CjC_j 时所付出的代价。

Lkj=(0L21L120)=(实际真,预测真实际真,预测假实际假,预测真实际假,预测假)L_{kj} = \begin{pmatrix} 0 & L_{21} \\ L_{12} & 0 \end{pmatrix} = \begin{pmatrix} \text{实际真,预测真} & \text{实际真,预测假} \\ \text{实际假,预测真} & \text{实际假,预测假} \end{pmatrix}

其中 LkjL_{kj} 表示”真实类别是 CkC_k 却被预测为 CjC_j“的代价。对角线上是预测正确的代价(0),非对角线上是犯错的代价。L21L_{21} 是”漏报”(真被判假),L12L_{12} 是”误报”(假被判真)。 例如,在癌症筛查中:将癌症患者(C2C_2)误判为正常(C1C_1)(假阴性)的代价 L21L_{21} 可能远高于将正常人(C1C_1)误判为癌症(C2C_2 )(假阳性)的代价 L12L_{12}

最小化期望损失

最优决策是选择能最小化期望损失的类别。对于输入 x\mathbf{x},将它分类为 CjC_j 的期望损失为:

k=1KLkjp(Ckx)\sum_{k=1}^K L_{kj} p(C_k|\mathbf{x})

我们应选择使该期望损失最小的类别 jj

对于两类问题,这等价于比较后验概率与一个由损失比决定的阈值。


拒绝选项

有时,当分类器对预测结果不确定时,最好选择“拒绝”分类,将样本交由人工或其他更复杂的系统处理。

我们可以设定一个阈值 θ\theta,如果最大后验概率 p(Ckx)p(C_k|\mathbf{x}) 小于或等于 θ\theta,则拒绝该样本。

  • θ=1\theta = 1:所有样本都被拒绝。
  • θ<1/K\theta < 1/K:没有样本被拒绝(KK 是类别数)。

调整 θ\theta 可以控制被拒绝样本的比例。

拒绝选项

拒绝选项

这个准则也可以扩展到考虑拒绝决策本身有代价(损失)的情况。


推理与决策

解决分类问题通常分为两个阶段:

  1. 推理阶段:从训练数据中学习模型,得到后验概率 p(Ckx)p(C_k|\mathbf{x})
  2. 决策阶段:利用后验概率和决策理论(如最小化期望损失)来做出最终的类别分配。

另一种方法是直接学习一个从输入 x\mathbf{x} 到决策的函数,称为判别函数。本章讨论的线性判别函数就属于这种方法。

三种解决决策问题的方法(按复杂性递减):

  1. 生成模型:先建模类条件密度 p(xCk)p(\mathbf{x}|C_k)(给定类别,数据长什么样)和先验概率 p(Ck)p(C_k)(在看到数据之前,每个类别出现的概率),再用贝叶斯定理(Bayes’ theorem,从”原因→结果”的概率推导”结果→原因”的概率)计算后验 p(Ckx)p(C_k|\mathbf{x}) 。先理解每个类别”长什么样”,再根据新样本的特征判断它最像哪个类别。 (医生诊断疾病,先详细了解每种疾病的症状特征,然后看病人表现出哪些症状,判断最符合哪种疾病)
  2. 判别模型:直接建模后验概率 p(Ckx)p(C_k|\mathbf{x})。直接学习如何区分不同类别,不关心每个类别具体”长什么样” 。(区分苹果和橙子,只需要知道苹果比较红、橙子比较橙,不需要详细了解苹果和橙子的所有生物学特征)
  3. 直接映射:直接学习从 x\mathbf{x} 到类别标签的函数,如本章的线性判别函数。直接学习一个决策规则,不计算概率,直接输出类别。(一个简单的规则:” 如果邮件包含’免费’就是垃圾邮件”)

分类器准确率

最简单的性能度量是分类准确率,即正确分类的测试样本比例。然而,当不同错误代价不同时,仅看准确率是不够的。

混淆矩阵

混淆矩阵提供了更详细的分类结果视图。对于两类问题,其形式如下:(和损失矩阵相同)

预测: 正常预测: 癌症
真实: 正常NTNN_{TN}NFPN_{FP}
真实: 癌症NFNN_{FN}NTPN_{TP}
  • 真阴性 (TN):正确预测为正常。
  • 假阳性 (FP):错误预测为癌症(I 类错误)。
  • 假阴性 (FN):错误预测为正常(II 类错误)。
  • 真阳性 (TP):正确预测为癌症。

ROC 曲线

ROC 曲线是评估二分类器性能的强大工具,它绘制了真阳性率(TPR)假阳性率(FPR)

  • 精确率NTPNTP+NFP\frac{N_{TP}}{N_{TP} + N_{FP}}
  • 真阳性率 (TPR) = 召回率NTPNTP+NFN\frac{N_{TP}}{N_{TP} + N_{FN}}
  • 假阳性率 (FPR)NFPNFP+NTN\frac{N_{FP}}{N_{FP} + N_{TN}}
  • 假发现率NFPNTP+NFP\frac{N_{FP}}{N_{TP} + N_{FP}}

通过改变分类决策的阈值,可以得到 ROC 曲线上的不同点。

  • 理想分类器:ROC 曲线上的点越靠近左上角越好。
  • 随机分类器:ROC 曲线是一条从左下角到右上角的对角线。
  • 曲线下面积 (AUC):一个量化分类器性能的单一数值。AUC = 0.5 表示随机猜测,AUC = 1.0 表示完美分类。

F-score 是精确率和召回率的调和平均数,用于综合评估分类器性能:

F=2×precision×recallprecision+recall=2NTP2NTP+NFP+NFNF = 2 \times \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}} = \frac{2N_{TP}}{2N_{TP} + N_{FP} + N_{FN}}
习题1

某个西瓜分类任务的验证集中,共有10个样例,其中有3个示例的类别标记为“1”,表示该示例是好瓜;有7个示例的类别标记为“0”,表示该示例不是好瓜。由于学习方法能力有限,只能产生在验证集上精度为0.8的分类器。

1.如果想要在验证集上得到最佳查准率,该分类器应该做出何种预测?此时的查全率和F1分别是多少?

精度为0.8即有2个会预测错误,使查准率P=TPTP+FPP = \frac{TP}{TP + FP}最佳,即要将预测错误的放于FN中即将正例预测为反例,此时查全率R=TPTP+FN=13R = \frac{TP}{TP + FN} = \frac{1}{3}F1=2PRP+R=2TPN+TPTN=12F_{1} = \frac{2*P*R}{P + R} = \frac{2*TP}{N + TP - TN} = \frac{1}{2}

2.如果想要在验证集上得到最佳查全率,该分类器应该做出何种预测?此时的查准率和F1分别是多少?

使查全率R=TPTP+FNR = \frac{TP}{TP + FN}最佳,即要将预测错误的放于FP中即将反例预测为正例,此时查准率P=TPTP+FP=35P = \frac{TP}{TP + FP} = \frac{3}{5}F1=2PRP+R=2TPN+TPTN=34F_{1} = \frac{2*P*R}{P + R} = \frac{2*TP}{N + TP - TN} = \frac{3}{4}

习题2

假设某数据集包含8个样例,其对应的标记和学习器的输出值(从大到小排序)见下表。该任务是一个二分类任务,标记1或0表示真实标记为正例或负例。学习器的输出值代表学习器对样例是正例的置信度(认为该样例是正例的概率)。

样例X1X2X3X4X5X6X7X8
标记11010100
学习器的输出值0.810.740.620.530.440.350.250.21

1.计算P-R曲线中的每一个端点的坐标并绘图。

将每个样例按照输出值从大到小依次预测为正例

编号12345678
TP12233444
FP00112234
FN32211000
TN44332210
P110.6666670.750.60.6666670.5714290.5
R0.250.50.50.750.75111

2.计算ROC曲线中每一个端点的坐标并绘图,计算AUC(Area Under the ROC Curve,曲线下的面积)。

TPR0.250.50.50.750.75111
FPR000.250.250.50.50.751

AUC=0.5*0.25+0.75*0.25+1*0.5=0. 8125


生成分类器

生成分类器遵循决策理论的“生成模型”路径(上述《推理与决策》的方法1):先对每个类别的数据分布 p(xCk)p(\mathbf{x}|C_k) (类条件密度)和类别的先验概率 p(Ck)p(C_k) 进行建模,然后使用贝叶斯定理计算后验概率 p(Ckx)p(C_k|\mathbf{x}),最后做出决策。

连续输入(高斯类条件密度)

假设输入 x\mathbf{x} 是连续的,并且每个类别的数据都服从高斯分布(Gaussian distribution,即正态分布——详见第2篇)。这是最常见的情况。

  • 类条件密度:对于类别 CkC_k,有

    p(xCk)=N(xμk,Σk)p(\mathbf{x}|C_k) = \mathcal{N}(\mathbf{x} | \mathbf{\mu}_k, \mathbf{\Sigma}_k)

    其中 μk\mathbf{\mu}_k 是均值向量(数据的”中心”),Σk\mathbf{\Sigma}_k协方差矩阵(covariance matrix,描述数据的”形状”和”朝向”——各维度之间的相关性)。

  • 先验概率p(Ck)p(C_k) 可以从训练数据中估计,例如,p(Ck)=Nk/Np(C_k) = N_k / N,其中 NkN_k 是类别 CkC_k 的样本数,NN 是总样本数。

根据贝叶斯定理,后验概率为:

p(Ckx)=p(xCk)p(Ck)p(x)p(C_k|\mathbf{x}) = \frac{p(\mathbf{x}|C_k) p(C_k)}{p(\mathbf{x})}

其中 p(x)=jp(xCj)p(Cj)p(\mathbf{x}) = \sum_j p(\mathbf{x}|C_j) p(C_j) 是归一化常数。

为了进行分类,我们比较不同类别的后验概率。由于分母 p(x)p(\mathbf{x}) 对所有类别相同,我们只需比较分子 p(xCk)p(Ck)p(\mathbf{x}|C_k) p(C_k)。等价地,我们可以比较它们的对数:

ak(x)=lnp(xCk)+lnp(Ck)a_k(\mathbf{x}) = \ln p(\mathbf{x}|C_k) + \ln p(C_k)

这个 ak(x)a_k(\mathbf{x}) 被称为证据或激活。我们将 x\mathbf{x} 分配给使 ak(x)a_k(\mathbf{x}) 最大的类别。


对于两类问题,我们定义判别函数:

a(x)=a1(x)a2(x)=lnp(xC1)p(C1)p(xC2)p(C2)a(\mathbf{x}) = a_1(\mathbf{x}) - a_2(\mathbf{x}) = \ln \frac{p(\mathbf{x}|C_1) p(C_1)}{p(\mathbf{x}|C_2) p(C_2)}

如果 a(x)>0a(\mathbf{x}) > 0,则分配给 C1C_1;否则分配给 C2C_2。决策边界由 a(x)=0a(\mathbf{x}) = 0 给出。


线性判别分析(LDA,Linear Discriminant Analysis)是一个重要的特例,假设所有类别共享相同的协方差矩阵(即各类数据的”形状”和”朝向”相同,只是”中心位置”不同):Σ1=Σ2==Σ\mathbf{\Sigma}_1 = \mathbf{\Sigma}_2 = \dots = \mathbf{\Sigma}

在这种假设下,将高斯密度的表达式代入 ak(x)a_k(\mathbf{x}) 并进行代数运算,可以发现 x\mathbf{x} 的二次项会相互抵消。

最终,判别函数 ak(x)a_k(\mathbf{x}) 变成 x\mathbf{x}线性函数

ak(x)=wkTx+wk0a_k(\mathbf{x}) = \mathbf{w}_k^T \mathbf{x} + w_{k0}

其中

wk=Σ1μk,wk0=12μkTΣ1μk+lnp(Ck)\mathbf{w}_k = \mathbf{\Sigma}^{-1} \mathbf{\mu}_k, \quad w_{k0} = -\frac{1}{2} \mathbf{\mu}_k^T \mathbf{\Sigma}^{-1} \mathbf{\mu}_k + \ln p(C_k)

由于判别函数是线性的,决策边界是超平面,因此得名“线性判别分析”。

二次判别分析:如果不假设所有类别的协方差矩阵相同,即 Σk\mathbf{\Sigma}_k 可以不同,那么在 ak(x)a_k(\mathbf{x}) 的表达式中,x\mathbf{x} 的二次项不会抵消。

此时,判别函数 ak(x)a_k(\mathbf{x})x\mathbf{x}二次函数,决策边界是二次曲面(如椭圆、双曲线等)。

二次判别分析比线性判别分析更灵活,但需要估计更多的参数,因此在小数据集上可能过拟合。


离散输入

当输入 x\mathbf{x} 是离散变量时,需要使用不同的类条件密度模型。

一个常见的例子是朴素贝叶斯分类器(Naive Bayes classifier,“朴素”是因为它做了一个大胆的简化假设),它假设在给定类别 CkC_k 的条件下,各个输入特征 xix_i条件独立的(知道类别后,一个特征的取值不影响另一个特征的取值):

p(xCk)=i=1Dp(xiCk)p(\mathbf{x}|C_k) = \prod_{i=1}^D p(x_i|C_k)

对于二值输入(xi{0,1}x_i \in \{0,1\}),p(xiCk)p(x_i|C_k) 通常用伯努利分布建模。

虽然“朴素”假设(特征独立)在现实中很少成立,但朴素贝叶斯分类器在实践中(如文本分类)常常表现良好。


判别式分类器

判别式分类器遵循决策理论的“判别模型”路径(上文方法2):直接对后验概率 p(Ckx)p(C_k|\mathbf{x}) 建模,而不是先建模类条件密度。


固定基函数

当数据的决策边界不是直线(或超平面)时,线性模型无法很好处理。为了建模非线性决策边界,我们可以将原始输入 x\mathbf{x} 映射到一个由固定非线性基函数(basis function,预先定义好的非线性变换函数)构成的特征空间 ϕ(x)\mathbf{\phi}(\mathbf{x})

乐高积木 vs 定制零件:固定基函数就像一套预先造好的乐高积木——你只能用现有的积木块去拼,不管它适不适合你的数据。好处是拼装简单,坏处是遇到特殊形状时积木对不上。后面要讲的神经网络则像一台能现场”铸造零件”的机器——它的基函数参数是可以学习的,能根据数据自动调整形状。

具体来说,将原始输入数据 x\mathbf{x} 通过一些固定的非线性函数 ϕ(x)\mathbf{\phi}(\mathbf{x}) 映射到一个新的特征空间,在这个新的特征空间中,原本复杂的非线性关系可能变得线性可分。

然后,我们假设后验概率是这些特征的线性函数的非线性变换。


逻辑斯谛回归(Logistic Regression)

二分类:

我们直接假设类别 C1C_1 的后验概率具有以下形式:

p(C1x)=σ(a(x))p(C_1|\mathbf{x}) = \sigma(a(\mathbf{x}))

其中 σ()\sigma(\cdot)logistic sigmoid 函数 -后面会经常看见:

σ(a)=11+exp(a)\sigma(a) = \frac{1}{1 + \exp(-a)}

a(x)a(\mathbf{x})x\mathbf{x} 的线性函数(或在特征空间 ϕ(x)\mathbf{\phi}(\mathbf{x}) 中的线性函数):

a(x)=wTϕ(x)+w0a(\mathbf{x}) = \mathbf{w}^T \mathbf{\phi}(\mathbf{x}) + w_0

因此,

p(C1x)=σ(wTϕ(x)+w0)p(C_1|\mathbf{x}) = \sigma(\mathbf{w}^T \mathbf{\phi}(\mathbf{x}) + w_0)

另一个类别的后验概率为 p(C2x)=1p(C1x)p(C_2|\mathbf{x}) = 1 - p(C_1|\mathbf{x})

logistic sigmoid 函数(红色)

logistic sigmoid 函数(红色)的 S 形曲线,将实数a映射到 (0,1) 区间

参数学习:通过最大似然估计(MLE,Maximum Likelihood Estimation,选择让观测数据出现概率最大的那组参数)来学习权重 w\mathbf{w}

对于训练集 {ϕn,tn}\{\mathbf{\phi}_n, t_n\}(其中 tn{0,1}t_n \in \{0,1\} 是 1-of-K 编码),似然函数为:

p(tw)=n=1Np(C1ϕn)tnp(C2ϕn)1tn=n=1Nyntn(1yn)1tnp(\mathbf{t}|\mathbf{w}) = \prod_{n=1}^N p(C_1|\mathbf{\phi}_n)^{t_n} p(C_2|\mathbf{\phi}_n)^{1-t_n} = \prod_{n=1}^N y_n^{t_n} (1-y_n)^{1-t_n}

其中 yn=p(C1ϕn)=σ(wTϕn+w0)y_n = p(C_1|\mathbf{\phi}_n) = \sigma(\mathbf{w}^T \mathbf{\phi}_n + w_0)

最大化似然等价于最小化交叉熵(cross-entropy,衡量两个概率分布差异的指标——越小说明预测越准)误差函数:

E(w)=n=1N[tnlnyn+(1tn)ln(1yn)]E(\mathbf{w}) = -\sum_{n=1}^N \left[ t_n \ln y_n + (1-t_n) \ln (1-y_n) \right]

这个误差函数可以通过梯度下降(gradient descent,沿着误差减小最快的方向更新参数)等优化算法来最小化。


**多分类:**

对于 K>2K>2 个类别,我们使用 softmax 函数(softmax function,也称归一化指数函数——将一组任意实数转换为概率分布,使得所有输出为正且总和为1,同样后期经常看见)来将 KK 个线性激活(activation,网络中某个神经元的加权输入值)aka_k 转换为后验概率。

定义第 kk 个类别的激活为:

ak(x)=wkTϕ(x)+wk0a_k(\mathbf{x}) = \mathbf{w}_k^T \mathbf{\phi}(\mathbf{x}) + w_{k0}

则后验概率为:

p(Ckx)=exp(ak(x))j=1Kexp(aj(x))softmax(ak(x))p(C_k|\mathbf{x}) = \frac{\exp(a_k(\mathbf{x}))}{\sum_{j=1}^K \exp(a_j(\mathbf{x}))} \equiv \text{softmax}(a_k(\mathbf{x}))

Softmax 函数确保了所有 p(Ckx)p(C_k|\mathbf{x}) 都在 (0,1) 区间内,并且总和为 1。

假设有三个类别的激活值:a=[2.0,1.0,0.1]\mathbf{a} = [2.0, 1.0, 0.1]

计算过程:exp(2.0)=7.39\exp(2.0) = 7.39exp(1.0)=2.72\exp(1.0) = 2.72exp(0.1)=1.11\exp(0.1) = 1.11,总和 = 7.39+2.72+1.11=11.227.39 + 2.72 + 1.11 = 11.22

Softmax输出:p(C1x)=7.3911.22=0.658p(C_1|\mathbf{x}) = \frac{7.39}{11.22} = 0.658p(C2x)=2.7211.22=0.242p(C_2|\mathbf{x}) = \frac{2.72}{11.22} = 0.242p(C3x)=1.1111.22=0.099p(C_3|\mathbf{x}) = \frac{1.11}{11.22} = 0.099


参数学习:同样使用最大似然估计。

对于目标向量 tn\mathbf{t}_n(1-of-K 编码),似然为:

p(TW)=n=1Nk=1Kp(Ckϕn)tnkp(\mathbf{T}|\mathbf{W}) = \prod_{n=1}^N \prod_{k=1}^K p(C_k|\mathbf{\phi}_n)^{t_{nk}}

其中 tnkt_{nk}tn\mathbf{t}_n 的第 kk 个元素。

这对应于最小化多类别交叉熵误差:

E(W)=n=1Nk=1KtnklnynkE(\mathbf{W}) = -\sum_{n=1}^N \sum_{k=1}^K t_{nk} \ln y_{nk}

其中 ynk=p(Ckϕn)y_{nk} = p(C_k|\mathbf{\phi}_n)

如果类条件密度 p(xCk)p(\mathbf{x}|C_k) 属于指数族分布,并且所有类别共享相同的基函数 ϕ(x)\mathbf{\phi}(\mathbf{x}) ,那么推导出的后验概率 p(Ckx)p(C_k|\mathbf{x}) 正好具有 softmax 的形式。


Probit 回归

Probit 回归是另一种判别式模型,它基于“有噪声的阈值”模型。

  • 计算一个线性激活 a=wTϕ(x)+w0a = \mathbf{w}^T \mathbf{\phi}(\mathbf{x}) + w_0
  • 假设存在一个随机阈值 θ\theta,其概率密度为 p(θ)p(\theta)
  • 如果 a>θa > \theta,则预测 t=1t=1;否则预测 t=0t=0

那么,预测 t=1t=1 的概率就是 aa 大于随机阈值 θ\theta 的概率,即:

p(t=1a)=ap(θ)dθ=Φ(a)p(t=1|a) = \int_{-\infty}^a p(\theta) d\theta = \Phi(a)

其中 Φ(a)\Phi(a)p(θ)p(\theta)累积分布函数(CDF,Cumulative Distribution Function,从负无穷到 aa 的概率累积值——见第2篇)。

如果 p(θ)p(\theta) 是标准正态分布 N(0,1)N(0,1),则 Φ(a)\Phi(a) 称为probit 函数。它与 logistic sigmoid 函数形状相似,但尾部略有不同。

拒绝选项

拒绝选项

左边是阈值 θ\theta 的概率密度 p(θ)p(\theta)(蓝色),右边是其累积分布函数 Φ(a)\Phi(a)(红色)。图中说明了 p(t=1a)p(t=1|a) 如何由 p(θ)p(\theta) 的累积面积决定


第5章小结

一句话版本: 分类问题的本质就是画一条线(或一个面)把不同类别的数据分开。这条线怎么画?可以直接画(判别函数),也可以先了解每类数据长什么样再画(生成模型),还可以直接学一个概率(判别模型)。画得好不好用 ROC、AUC 等指标来衡量。

知识地图

判别函数
├── 二分类:一个线性函数 y = w^T x + w0,决策边界是超平面
└── 多分类:K 个线性函数,softmax / one-vs-rest / one-vs-one
决策理论
├── 损失矩阵:不同错误类型的代价不同(如癌症误判 vs 正常误判)
├── 最小化期望损失:选择使期望损失最小的类别
└── 拒绝选项:不确定时交给人工处理
三种分类思路
├── 生成模型:先学 p(x|Ck) 和 p(Ck),再用贝叶斯定理
│ ├── 线性判别分析(LDA):共享协方差 → 线性边界
│ └── 二次判别分析(QDA):不同协方差 → 二次边界
├── 判别模型:直接学 p(Ck|x)
│ ├── 逻辑斯谛回归(二分类):sigmoid + 交叉熵
│ └── softmax 分类器(多分类):softmax + 多类交叉熵
└── 直接映射:直接学 x → 类别标签
性能评估
├── 混淆矩阵:TP / FP / FN / TN
├── ROC 曲线:TPR vs FPR,越靠近左上越好
└── AUC / F-score:单一数值总结分类器性能

Chapter 6 深度神经网络

在上一章节中,我们学习了线性回归和分类模型,它们通常基于输入的固定非线性基函数的线性组合。例如,一个分类模型可以表示为:

y(x,w)=f(j=1Mwjϕj(x)+w0)y(\mathbf{x}, \mathbf{w}) = f\left( \sum_{j=1}^M w_j \phi_j(\mathbf{x}) + w_0 \right)

其中 ϕj(x)\phi_j(\mathbf{x}) 是预先定义好的基函数(如多项式、高斯函数等),f()f(\cdot) 是输出激活函数(如 sigmoid 函数)。

这类模型在理论上是“万能逼近器”——只要有足够多合适的基函数,它们可以逼近任意非线性函数。然而,它们在实践中面临严重限制,尤其是在高维输入空间中。


固定基函数的局限性

维度灾难(curse of dimensionality)

当输入变量数量 DD 增加时,固定基函数方法的复杂性急剧上升。这不仅仅是一个理论问题——它从根本上限制了固定基函数方法在高维数据上的可行性。

  • 多项式回归:一个三阶多项式在 DD 维空间中的参数数量随 O(D3)O(D^3) 增长。对于高维数据(如图像),这会导致参数数量爆炸。
  • 网格划分分类器:如果我们将输入空间划分为规则网格,每个网格对应一个基函数,那么网格数量随维度 DD指数增长——每增加一个维度,网格数量就翻倍。10维空间中每维只取10个格子就需要 101010^{10}(100亿)个格子,远远超过任何实际数据集的样本数。

维度灾难

在1、2、3D空间中,划分成小格子时数量的增长趋势。在高维空间中,大多数网格是空的,导致模型无法对新样本进行分类

这说明,如果基函数是预先固定且均匀分布在输入空间中,那么在高维情况下,它们会变得极其稀疏,无法有效利用有限的训练数据。

我们在低维空间中的直觉在高维空间中往往失效。例如:

  • 超球体的体积分布:在高维空间中,一个单位超球体的体积几乎全部集中在靠近表面的薄壳中。这意味着大多数点都”远离中心”——想象一个100维的球,99%的体积都在距离表面不到1%半径的薄壳里。
  • 高斯分布的概率质量:多维高斯分布的概率质量也集中在某个特定半径的薄壳上,而不是集中在原点附近——这和你在二维钟形曲线中”越靠近中心概率越高”的直觉完全不同。
  • 高维空间的”空旷”:在高维空间中,数据点之间的距离趋于相同。最近邻和最远邻之间的距离差异变得微不足道,”距离”这个概念本身变得不再有意义。

数据流形

数据流形(data manifold):指高维数据实际分布的低维结构。虽然数据可能有数千个维度(如一张图片的像素),但真正有意义的变化可能只有几个维度(如物体的位置、旋转角度)。

真实世界的数据(如图像、语音)虽然在高维空间中表示(如 64×64 像素的图像有 4096 维),但它们实际上只占据整个空间的一个低维子流形

例如:

  • 手写数字图像的变化主要由位置、旋转、缩放等少数几个因素控制,因此这些图像大致分布在三维流形上。
  • 随机生成的像素图像与真实图像完全不同,因为它们缺乏真实数据中的强相关性(两个相邻像素之间的差异通常较小)。

因此,我们不需要在整个高维空间中定义基函数,而只需在数据流形上定义。这大大减少了所需基函数的数量。


数据依赖的基函数

为了解决固定基函数的问题,我们可以让基函数依赖于训练数据本身

  • 径向基函数网络(RBF):每个训练样本作为一个基函数的中心,基函数形式为:

    ϕn(x)=exp(xxn2s2)\phi_n(\mathbf{x}) = \exp\left( -\frac{\|\mathbf{x} - \mathbf{x}_n\|^2}{s^2} \right)

    其中 xn\mathbf{x}_n 是第 nn 个训练样本(基函数的”中心”),ss 是宽度参数(控制这个”山丘”有多宽——ss 越大,影响范围越广;ss 越小,只在 xn\mathbf{x}_n 附近才有响应),xxn2\|\mathbf{x} - \mathbf{x}_n\|^2 是输入点到中心的欧氏距离的平方。简单说:离训练样本越近,输出值越大。

    这种方法能自动适应数据分布,但计算成本高,且容易过拟合。

  • 支持向量机(SVM):类似地使用数据点作为基函数中心,但通过优化选择支持向量,减少有效基函数数量。

尽管这些方法比固定基函数更灵活,但它们仍无法有效处理大规模数据集,且难以扩展到复杂任务。这引出了深度神经网络 ——一种能自动学习多层次表示的模型。


多层神经网络

深度神经网络的核心思想是:让基函数本身也具有可学习的参数,并通过梯度下降联合优化所有参数。

两层网络结构

一个简单的两层神经网络包含:

  1. 第一层(隐藏层)

    aj(1)=i=1Dwji(1)xi+wj0(1),zj(1)=h(aj(1))a_j^{(1)} = \sum_{i=1}^D w_{ji}^{(1)} x_i + w_{j0}^{(1)}, \quad z_j^{(1)} = h(a_j^{(1)})

    其中 h()h(\cdot) 是非线性激活函数(activation function,对加权求和结果进行非线性变换的函数),zj(1)z_j^{(1)} 称为隐藏单元(hidden unit,网络中间层的神经元——既不是输入也不是输出,所以叫”隐藏”)。

  2. 第二层(输出层)

    ak(2)=j=1Mwkj(2)zj(1)+wk0(2),yk=f(ak(2))a_k^{(2)} = \sum_{j=1}^M w_{kj}^{(2)} z_j^{(1)} + w_{k0}^{(2)}, \quad y_k = f(a_k^{(2)})

    其中 f()f(\cdot) 是输出激活函数(根据任务选择,如 sigmoid、softmax)。

两层网络结构

两层网络结构


通用近似

理论表明,只要有足够多的隐藏单元,一个两层神经网络可以以任意精度逼近任何连续函数。这说明神经网络具有强大的表示能力。

然而,通用近似只保证“存在性”,并不保证学习算法能找到最优解,也不说明需要多少隐藏单元。在实践中,深层网络往往比浅层网络更高效。


隐藏单元激活函数

隐藏单元必须使用非线性激活函数,否则整个网络等价于一个线性模型(无法捕捉非线性关系)。

常见的激活函数包括:

  • Logistic Sigmoidσ(a)=11+ea\sigma(a) = \frac{1}{1 + e^{-a}},把任意实数”压缩”到 (0,1)(0,1) 区间,早期常用,但当输入绝对值很大时梯度趋近于零(梯度消失),导致深层网络训练困难。
  • tanhtanh(a)=eaeaea+ea\tanh(a) = \frac{e^a - e^{-a}}{e^a + e^{-a}},输出在 [1,1][-1, 1],均值接近零,训练更稳定。可以理解为 sigmoid 的”升级版”——输出以零为中心,梯度性质更好。
    • hard版本:hardtanh(a)=max(1,min(1,a))\text{hardtanh}(a) = \max(-1, \min(1, a)),tanh 的线性近似,计算更快。
  • softplussoftplus(a)=log(1+ea)\text{softplus}(a) = \log(1 + e^a),ReLU 的”光滑版”——行为类似 ReLU,但在零点附近是平滑曲线而非尖角,计算更复杂。
  • ReLU(Rectified Linear Unit,修正线性单元):ReLU(a)=max(0,a)\text{ReLU}(a) = \max(0, a),现代深度网络的主流选择。直觉上就是一个”开关”——负数全部关掉(输出0),正数原样通过。计算极其简单,且正区间梯度恒为1,彻底避免了梯度消失。(首选)
    • leaky ReLU:leakyReLU(a)=max(0,a)+αmin(0,a)\text{leakyReLU}(a) = \max(0, a) + \alpha \min(0, a),让负区间也有一个小斜率 α\alpha(通常取0.01),避免 ReLU 的”死神经元”问题(某些神经元永远输出0,无法再被激活)。(遇到ReLU有问题时选择)

各种激活函数

各种激活函数

权重空间的对称性

在多层神经网络中,特别是具有隐藏层的网络中,如果交换同一隐藏层中两个隐藏单元的所有连接权重,网络的整体行为不会改变。

对于一个两层网络,如果我们将隐藏单元 jjjj' 的权重进行交换:

  • wji(1)wji(1)w_{ji}^{(1)} \leftrightarrow w_{j'i}^{(1)}(从输入到隐藏层的权重)
  • wkj(2)wkj(2)w_{kj}^{(2)} \leftrightarrow w_{kj'}^{(2)}(从隐藏层到输出的权重)

网络的输出保持不变,因为这相当于重新标记了隐藏单元。

隐藏单元1的权重:[0.5, 0.3];隐藏单元2的权重:[0.2, 0.7]

交换这两个隐藏单元的所有连接:隐藏单元1的权重:[0.2, 0.7] (原来是单元2的)隐藏单元2的权重:[0.5, 0.3] (原来是单元1的)

网络的最终输出完全不变


对于使用对称激活函数(如 tanh)的神经网络,如果我们将某个隐藏单元的所有输入权重和输出权重同时翻转符号:

  • wji(1)wji(1)w_{ji}^{(1)} \rightarrow -w_{ji}^{(1)}
  • wkj(2)wkj(2)w_{kj}^{(2)} \rightarrow -w_{kj}^{(2)}

同时保持偏置不变,网络的输出也不会改变,因为对称激活函数满足 h(a)=h(a)h(-a) = -h(a)

对于使用tanh激活函数的网络:

原来:权重是+0.5,输入是+2,计算tanh(0.5 × 2) = tanh(1)

翻转后:权重是-0.5,输入是-2,计算tanh((-0.

由于tanh(-x) = -tanh(x)的性质,最终结果相同

深度网络

虽然两层网络是万能逼近器,但深层网络(多个隐藏层)具有显著优势:

  • 层次化表示:浅层学习边缘、纹理等低级特征,深层学习语义、对象等高级特征。
  • 参数效率:对于某些复杂函数,深层网络可以用更少的参数实现,而浅层网络可能需要指数级的隐藏单元。
  • 泛化能力:深度结构能更好地捕捉数据的内在层次结构,提升在复杂任务(如图像识别、自然语言处理)上的性能。

一个 LL 层的深度网络可以形式化地表示为:

z(l)=h(l)(W(l)z(l1))\mathbf{z}^{(l)} = h^{(l)}(\mathbf{W}^{(l)} \mathbf{z}^{(l-1)})

其中 l=1,...,Ll=1,...,Lz(0)=x\mathbf{z}^{(0)} = \mathbf{x} 是输入,z(L)=y\mathbf{z}^{(L)} = \mathbf{y} 是输出,h(l)h^{(l)} 是第 ll 层的激活函数,W(l)\mathbf{W}^{(l)} 是权重和偏置参数矩阵。

表示学习

表示学习指:让机器自动学习输入数据的有效表示形式,而不是依赖人工设计特征。

早期,训练深层网络非常困难。一种关键的突破是无监督预训练(unsupervised pre-training,先不用标签数据,让网络自己学习数据的结构)。

  1. 预训练阶段:逐层使用无监督学习(如自编码器或受限玻尔兹曼机)来初始化网络权重。每一层都先学习如何重建其输入,从而发现数据的内在结构。
  2. 微调阶段:将整个网络连接起来,使用带标签的数据和梯度下降进行监督微调

这种方法通过预训练为网络提供了一个良好的初始权重,使其更容易收敛。

重要进展:后来的研究发现,在合适的条件下(如使用 ReLU 激活函数、适当的权重初始化、批量归一化等),可以完全跳过预训练阶段,直接从随机初始化开始,使用监督学习端到端(end-to-end,从原始输入直接到最终输出,中间不需要人工设计的中间步骤)地训练深度网络。这简化了流程,使得深度学习更加普及。

然而,预训练和表示学习的思想依然至关重要,尤其是在数据稀缺的领域。最著名的例子是自然语言处理中的Transformer 模型(如 BERT, GPT)。这些模型首先在海量无标注文本上进行预训练(例如,通过预测被遮蔽的词或下一个词),学习到语言的深层内部表示。之后,这个预训练好的模型可以用于各种下游任务(如问答、翻译),通过微调获得卓越性能。


迁移学习

迁移学习(transfer learning)是一种利用在一个任务上学到的知识来提升另一个相关任务性能的技术。它特别适用于目标任务(Task A)的标注数据稀缺的情况。其核心思想是:

一个在大规模数据集(Task B)上训练好的网络,已经学习到了输入数据(如图像)的通用、低层次的特征(例如边缘、纹理、基本形状)。这些特征对于许多视觉任务都是有用的。迁移学习就是利用这些已学习的特征表示。


  1. 源任务训练:首先在一个数据丰富、相关的任务(如 ImageNet 上的日常物体分类)上训练一个深度网络。这个网络的早期层学习到的是通用的图像特征。
  2. 目标任务应用
    • 特征提取器:将预训练网络的早期层(通常是卷积层)作为固定的特征提取器。将目标任务的新数据通过这个固定的网络,得到高级特征表示。
    • 分类器训练:在这些提取的特征上,训练一个新的、简单的分类器(通常是网络的最后几层)来解决目标任务(如皮肤病变分类)。
    • 微调:如果目标任务的数据量足够,可以进一步对整个网络(或仅对最后几层)进行微调,以适应新任务的特定特征。微调通常使用非常小的学习率,以防止破坏预训练模型中已经学到的有用知识。

优势:

  • 提高准确性:相比于从零开始训练,迁移学习通常能获得更高的准确率,因为它利用了从大量数据中学到的通用知识。
  • 节省时间和资源:避免了从头训练一个大型网络所需的大量计算资源和时间。
  • 缓解数据稀缺:使得在标注数据很少的领域也能训练出有效的模型。

迁移学习 (a) 网络在大规模数据集(如 ImageNet)上训练;

(b) 将早期层(红色)的权重复制过来作为固定特征提取器,重新训练最后几层(蓝色)以适应新任务(如皮肤病变分类)。

对比学习

对比学习(contrastive learning)是一种自监督学习(self-supervised learning,不需要人工标注,从数据本身构造学习信号)范式,旨在学习良好的数据表示,而无需大量标注数据。

其核心思想是:将相似的样本(正样本对)在表示空间中拉近,同时将不相似的样本(负样本对)推远。

  • 实例判别:将同一图像的不同增强版本(如旋转、裁剪)视为正样本对,将不同图像视为负样本对。
  • 监督对比学习:将同一类别的不同图像视为正样本对。
  • 跨模态对比学习(如 CLIP):将图像与其对应的文本描述视为正样本对。

三种对比学习

(a) 实例判别 (b) 监督对比学习 (c) CLIP 模型


通用网络架构

除了标准的全连接前馈网络,还可以设计更复杂的架构。

  • 残差网络(ResNet):引入跳跃连接(skip connection,让信号可以”跳过”中间层直接传到后面),允许信息绕过某些层直接传递。这有助于缓解深度网络中的梯度消失(vanishing gradient,深层网络中梯度在反向传播时逐层衰减,导致前面的层几乎学不动)问题,使得训练非常深的网络成为可能。
  • 图神经网络:处理图结构数据,其中节点和边都有特征。

关键要求是网络必须是前馈的(无环),以保证输出是输入的确定性函数。


张量

在深度学习中,数据、权重和激活通常以张量(tensor,多维数组的统称——标量是0阶张量,向量是1阶,矩阵是2阶,更高维则统称张量)的形式表示。

  • 标量:0维张量(单个数字)。
  • 向量:1维张量(数字数组)。
  • 矩阵:2维张量(数字表格)。
  • 张量:更高维的数组。

例如,一个包含 NN 张彩色图像的数据集可以表示为一个 4D 张量:[N,H,W,C][N, H, W, C],其中 HH 是高度,WW 是宽度,CC 是通道数(RGB 为 3)。

张量是现代深度学习框架(如 PyTorch, TensorFlow)的基础,而 GPU 非常擅长进行张量运算。


误差函数

总结小章 - 对应原书6.4节

选择合适的误差函数对于训练神经网络至关重要。误差函数通常是负对数似然(negative log-likelihood,把”数据出现的概率最大”转化为”误差最小”——详见第1篇第2篇中关于最大似然的讨论)。

回归

前提提要:第二章 - 最大似然与最小二乘

对于回归任务,目标变量 tt 是实数。假设目标值服从以网络输出为均值的高斯分布(见第2篇 - 高斯分布):

p(tx,w)=N(ty(x,w),σ2)p(t | \mathbf{x}, \mathbf{w}) = \mathcal{N}(t | y(\mathbf{x}, \mathbf{w}), \sigma^2)

其中 y(x,w)y(\mathbf{x}, \mathbf{w}) 是神经网络的输出,σ2\sigma^2 是噪声方差。

此时,输出单元的激活函数采用恒等函数(即线性输出):y=ay = a

给定独立同分布的训练数据集 {xn,tn}n=1N\{ \mathbf{x}_n, t_n \}_{n=1}^N,相应的似然函数:

p(tX,w,σ2)=n=1Np(tny(xn,w),σ2)p(\mathbf{t}|\mathbf{X}, \mathbf{w}, \sigma^2) = \prod_{n=1}^N p(t_n | y(\mathbf{x}_n, \mathbf{w}), \sigma^2)

对应的负对数似然误差函数:

12σ2n=1N(tny(xn,w))2+N2log(σ2)+N2log(2π)\frac{1}{2\sigma^2}\sum_{n=1}^N (t_n - y(\mathbf{x}_n, \mathbf{w}))^2 + \frac{N}{2}\log(\sigma^2)+ \frac{N}{2}\log(2\pi)

等价于最小化平方和误差函数

E(w)=12n=1N{y(xn,w)tn}2E(\mathbf{w}) = \frac{1}{2} \sum_{n=1}^N \{ y(\mathbf{x}_n, \mathbf{w}) - t_n \}^2

最小化该误差函数等价于最大化似然函数(likelihood function,参数给定下数据出现的概率——详见第1篇第2篇)。由于网络的非线性,该误差函数通常是非凸的,难以找到全局最优解。

当有多个目标变量时,假设它们在给定输入和参数条件下相互独立且共享噪声方差,则条件分布为:

p(tx,w)=N(ty(x,w),σ2I)p(\mathbf{t} | \mathbf{x}, \mathbf{w}) = \mathcal{N}(\mathbf{t} | \mathbf{y}(\mathbf{x}, \mathbf{w}), \sigma^2 \mathbf{I})

对应的误差函数为:

E(w)=12n=1Ny(xn,w)tn2E(\mathbf{w}) = \frac{1}{2} \sum_{n=1}^N \| \mathbf{y}(\mathbf{x}_n, \mathbf{w}) - \mathbf{t}_n \|^2

噪声方差可通过下式估计:

σ2=1NKn=1Ny(xn,w)tn2\sigma^2_* = \frac{1}{NK} \sum_{n=1}^N \| \mathbf{y}(\mathbf{x}_n, \mathbf{w}_*) - \mathbf{t}_n \|^2

其中 KK 是目标变量的维度。


二分类

前提提要:逻辑斯谛回归 第二章 - 伯努利分布

对于二分类任务,目标变量 t{0,1}t \in \{0, 1\},表示属于类别 C1C_1C2C_2

网络使用一个输出单元,激活函数为逻辑Sigmoid函数

y(x,w)=σ(a)=11+eay(\mathbf{x}, \mathbf{w}) = \sigma(a) = \frac{1}{1 + e^{-a}}

此时 yy 可解释为后验概率 p(C1x)p(C_1 | \mathbf{x})1y1 - yp(C2x)p(C_2 | \mathbf{x})

目标变量的条件分布服从伯努利分布:

p(tx,w)=yt(1y)1tp(t | \mathbf{x}, \mathbf{w}) = y^t (1 - y)^{1-t}

对应的负对数似然误差函数为交叉熵误差函数

E(w)=n=1N[tnlnyn+(1tn)ln(1yn)]E(\mathbf{w}) = - \sum_{n=1}^N \left[ t_n \ln y_n + (1 - t_n) \ln (1 - y_n) \right]

研究表明,相比平方和误差,交叉熵误差能带来更快的训练速度和更好的泛化性能。

若需执行 KK 个独立的二分类任务,可使用 KK 个输出单元,每个单元使用Sigmoid激活函数,总误差为各输出交叉熵之和:

E(w)=n=1Nk=1K[tnklnynk+(1tnk)ln(1ynk)]E(\mathbf{w}) = - \sum_{n=1}^N \sum_{k=1}^K \left[ t_{nk} \ln y_{nk} + (1 - t_{nk}) \ln (1 - y_{nk}) \right]

多分类

前提提要:判别式分类器-多分类

对于 KK 类分类问题,每个样本属于且仅属于一个类别。采用1-of-K编码,目标向量 t\mathbf{t} 中仅一个元素为1,其余为0。

网络使用 KK 个输出单元,激活函数为Softmax函数

yk(x,w)=exp(ak)j=1Kexp(aj)y_k(\mathbf{x}, \mathbf{w}) = \frac{\exp(a_k)}{\sum_{j=1}^K \exp(a_j)}

Softmax确保输出满足 0yk10 \leq y_k \leq 1kyk=1\sum_k y_k = 1,可解释为后验概率 p(tk=1x)p(t_k=1 | \mathbf{x})

对应的误差函数为多类交叉熵误差函数

E(w)=n=1Nk=1Ktknlnyk(xn,w)E(\mathbf{w}) = - \sum_{n=1}^N \sum_{k=1}^K t_{kn} \ln y_k(\mathbf{x}_n, \mathbf{w})

Softmax与多类交叉熵的组合是多分类问题的标准选择。


一句话版本

  • 回归任务:线性输出 + 平方和误差
  • 二分类任务:Sigmoid输出 + 二分类交叉熵误差
  • 多分类任务:Softmax输出 + 多类交叉熵误差

这种配对方式源于最大似然估计框架,确保了误差函数与输出分布假设的一致性。该原则具有普适性,可推广至其他条件分布形式。

混合密度网络

混合密度网络(MDN,Mixture Density Network)是一种更高级的模型,用于处理输出是输入的多模态函数(同一个输入可能对应多个合理输出)的情况。其核心思想是:预测多种可能的未来,而不是单一答案

问题背景

标准的回归网络学习输入 x\mathbf{x} 到输出 tt条件均值 E[tx]E[t|\mathbf{x}]。当条件分布 p(tx)p(t|\mathbf{x}) 是单峰的(只有一个峰值,即只有一个”合理答案”)时,这很有效。但当分布是多峰的(有多个峰值,即存在多个”合理答案”)时,均值可能位于两个峰值之间——一个所有可能结果都不会出现的”虚空地带”。

多种可能的未来:想象你开车到一个十字路口,可以左转也可以右转。如果让模型只预测一个”平均方向”,它会告诉你”直走”——但那里可能是一堵墙。MDN 的做法是同时告诉你”有70%的可能左转,30%的可能右转”,让你看到所有合理的选项。

例如,控制一个机器人手臂(robot arm),同一个末端位置可能对应两个不同的关节角度(肘部向上或向下)。这两个解的平均值不是一个有效的关节配置。

混合密度网络(MDN)

MDN 用一个混合模型(通常是高斯混合模型)来建模条件概率密度 p(tx)p(t|\mathbf{x})

p(tx,w)=k=1Kπk(x,w)N(tμk(x,w),σk2(x,w))p(t|\mathbf{x}, \mathbf{w}) = \sum_{k=1}^K \pi_k(\mathbf{x}, \mathbf{w}) \mathcal{N}(t | \mu_k(\mathbf{x}, \mathbf{w}), \sigma_k^2(\mathbf{x}, \mathbf{w}))

其中:

  • πk(x,w)\pi_k(\mathbf{x}, \mathbf{w}) 是第 kk 个高斯成分的混合系数(mixture coefficient,即这个成分在整体中占多大比重),满足 kπk=1\sum_k \pi_k = 1πk0\pi_k \geq 0
  • μk(x,w)\mu_k(\mathbf{x}, \mathbf{w}) 是第 kk 个高斯的均值
  • σk2(x,w)\sigma_k^2(\mathbf{x}, \mathbf{w}) 是第 kk 个高斯的方差

网络的输出层有 3K3K 个单元,分别输出 πk\pi_kμk\mu_kσk2\sigma_k^2σk2\sigma_k^2 保证正值)。

通过最大化数据的对数似然来训练 MDN。误差函数为:

E(w)=n=1Nln(k=1Kπk(xn,w)N(tnμk(xn,w),σk2(xn,w)))E(\mathbf{w}) = -\sum_{n=1}^N \ln \left( \sum_{k=1}^K \pi_k(\mathbf{x}_n, \mathbf{w}) \mathcal{N}(t_n | \mu_k(\mathbf{x}_n, \mathbf{w}), \sigma_k^2(\mathbf{x}_n, \mathbf{w})) \right)

预测

MDN 可以输出整个条件分布,而不仅仅是一个点估计。我们可以:

  • 预测条件均值:E[tx]=kπkμkE[t|\mathbf{x}] = \sum_k \pi_k \mu_k
  • 预测条件方差:s2(x)=E[tE[tx]2x]s^2(\mathbf{x}) = E[\|t - E[t|\mathbf{x}]\|^2|\mathbf{x}],它依赖于 x\mathbf{x}
  • 预测条件众数(最可能的值):通常取混合系数最大的那个高斯成分的均值 μk\mu_k

MDN

MDN

(a) 混合系数 πk(x)\pi_k(x)

三种颜色表示第三个不同的高斯成分的混合系数 π(x)\pi(x),在输入 xx 的不同位置上,各个高斯成分对整体分布的贡献权重。例如: 当 xx 较小时,π1(x)\pi_1(x) 较大,说明第一个高斯成分主导; 当 xx 接近中间值时,π2(x)\pi_2(x) 达到峰值,表示第二个成分起主要作用; 当 xx 较大时,π3(x)\pi_3(x) 占主导地位。 表明MDN能够根据输入动态调整各成分的重要性。

(b) 均值 μk(x)\mu_k(x)

三种颜色表示第三个不同的高斯成分的均值 μ1(x)\mu_1(x),每个高斯成分的中心位置随输入 xx 的变化趋势。它们共同定义了条件分布的“模式”(即可能的输出值)。例如: 在某些 xx 区域,μ1(x)\mu_1(x)μ3(x)\mu_3(x) 分别对应两个不同的输出路径; 而 μ2(x)\mu_2(x) 则位于两者之间,可能用于平滑过渡或填补空缺。

(c) 条件概率密度 p(tx)p(t|x)等值线

(d) 条件众数

绿色圆圈:表示真实的训练数据点 (x,t)(x, t) 红色曲线:表示MDN预测的条件众数(即最可能的输出值),通过选择混合系数最大的那个高斯成分的均值 μk\mu_k 得到。


第6章小结

一句话版本: 固定基函数在高维空间中会”爆”(维度灾难),所以需要让基函数自己学习——这就是神经网络的核心思想。深层网络比浅层强在”层次化理解”,迁移学习和对比学习让模型能复用已学到的知识,MDN 则能处理”一个输入对应多个合理输出”的场景。

知识地图

固定基函数的局限性
├── 维度灾难:参数量随维度指数增长,数据变得稀疏
├── 数据流形:真实数据实际只占据高维空间的低维子结构
└── 数据依赖基函数:RBF / SVM,用训练数据定义基函数中心
多层神经网络
├── 结构:输入 → 隐藏层(可学习的基函数)→ 输出层
├── 激活函数:ReLU(首选)/ sigmoid / tanh / softplus
├── 通用近似:两层网络理论上能逼近任意连续函数
└── 权重对称性:交换隐藏单元不改变输出
深度网络
├── 层次化表示:浅层学边缘纹理,深层学语义对象
├── 表示学习:从人工特征到自动学习特征
├── 迁移学习:大模型预训练 → 小数据微调
└── 对比学习:拉近相似样本,推远不相似样本
误差函数配对
├── 回归:线性输出 + 平方和误差
├── 二分类:sigmoid + 交叉熵
└── 多分类:softmax + 多类交叉熵
混合密度网络(MDN)
└── 用高斯混合模型建模 p(t|x),输出整个分布而非单一预测

感谢您的阅读!如果可以,给俺点些关注吧~

深度学习笔记-3:分类模型与深度神经网络入门

周一 9月 01 2025
11627 · 43 分钟
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00