)
四、单层网络回归本章核心是线性回归模型具有单层可学习参数的神经网络。虽然应用十分有限但是奠定基础4.1基函数核心作用把简单的直线回归升级成能拟合任意曲线的模型而且形式上还是 “线性模型”。关键理解模型被称为 “线性”是因为它对参数w是线性的 只要 w 是一次方没有 w²、w₁w₂等基函数可以是非线性的如多项式、高斯函数就是线性模型。基函数优势普通线性回归无基函数只能拟合直线yw₀w₁x适用范围窄带基函数的线性回归换一套基函数就能拟合对应曲线且由于上述是线性回归模型我们还是可以使用求解公式最小二乘。4.2最小二乘法与最大似然函数我们都知道平方和误差是用来计算模型与数据之间的误差值的什么是最小二乘法最小二乘法是为了最小化误差而存在的一种数学解题思路 数学操作求导、令导数 0、解方程、算出最优的权重 w1,w2...假设数据 模型预测 高斯噪声服从均值为0、方差为σ² 的高斯分布那从概念角度来说为什么最小二乘法最大似然估计函数呢最大似然估计找一组参数让 “真实数据” 在你的模型里最有可能出现。 最小二乘法是为了最小化误差等价于减少模型与数据之间的误差误差就越小数据出现的概率就越高其实这里还有一个问题那就是为什么「误差越小概率越高」这是因为我们假设噪声是高斯分布钟形曲线误差为 0预测值 真实值时概率最高误差越大离中心越远概率就越低。从公式推导的角度为什么最小二乘法最大似然估计函数呢4.3序贯学习最大似然解式可以采用批处理的方法一次性处理整个训练集但是成本很高所以我们可以使用序贯学习的方法一个一个考虑数据模型实时更新。那具体怎么实现呢采用了随机梯度下降技术更新参数公式如下新参数 旧参数 - 学习率x误差值每次来一个样本 (xn,tn)计算当前模型的预测误差用误差乘以学习率 η去更新权重 w4.4正则化最小二乘法正则化思想在最小二乘法里的具体落地实践。普通最小二乘只看 “和训练数据贴不贴”不管权重多大。正则化最小二乘在 “贴数据” 和 “权重不要太大” 之间找平衡防止模型学过头。实现方式如1.4.5让EW(w)衡量权重 w 的大小越大的权重惩罚越重λ正则化系数控制惩罚的强度越大对权重的约束越强。4.5多重输出多输出回归就是把权重向量升级成权重矩阵 W公式变成 yWTϕ(x)这种方式可以共享基函数一次性建模所有输出比单独做 K 次回归更高效4.6决策理论推理阶段通过训练数据确定预测分布真实值可能的范围、均值和不确定性。决策阶段从这个预测分布里根据某些准则挑一个具体的数值注意区分以下两个定义损失函数定义「单个样本预测有多差」的规则用来定理论最优误差函数把所有样本的损失加起来用来训练模型、更新参数的 “训练工具”。损失函数决策规则和误差函数训练目标一样时这两个函数就是同一个训练选择。当决策规则与训练目标不一样时那两者不必绑定。平方损失 ➜ 数学规定选【均值】绝对值损失 ➜ 数学规定选【中位数】分类 0-1 损失 ➜ 数学规定选【概率最大的值】4.7偏差 - 方差权衡当我们在正则化时不能同时优化参数与正则化惩罚系数这会导致系数为0通过偏差 - 方差权衡偏差Bias模型的期望预测与真实函数的差异反映模型的拟合能力。方差Variance模型在不同训练集上的预测波动反映模型对数据的敏感程度。目标是找到一个复杂度使偏差 方差的总和最小平衡欠拟合与过拟合。权衡的本质模型变复杂偏差会降低拟合更好但方差会升高过拟合风险变大。模型变简单方差会降低更稳定但偏差会升高欠拟合。五、单层网络分类5.1判别函数判别函数有如下两种1、二分类用一条「线性判别函数」把两类数据分开判别函数y(x)w^Txw_0决策规则y(x)0→ 归为 C_1 类y(x)≥0→ 归为 C_2 类2、多分类多分类如果还是采用上述规则使用K-1条或者K(K-1)条线划分很容易出现模糊区即一个输出被判为多个C类所以多分类可通过K个线性函数组成的单个K类判别式y_k(x)w_k^TxW_{k0}决策规则对输入点 x计算所有y_k(x) 的值选择值最大的那个 y_k 对应的类别 C_k多分类变量存储采用1-of-K编码方案t(0,1,0,0,0)^T5.2训练方式1、最小二乘法同样采用第四章的最小二乘法形式应用于分类问题通过用1-of-K 编码和最小化平方误差来训练线性判别函数。形式简单但近似效果差存在明显局限性。局限性对异常值很敏感鲁棒性差。解释如下↓由于采用的是平方和误差函数对离决策边界远的点赋予了过高的权重。加了几个离群点后就会被 “过度惩罚”决策边界被拉歪了最小二乘法失败的根本原因是高斯分布假设和分类问题的二进制目标分布不匹配5.3决策理论类似第四章的决策会把预测分为「推理」和「决策」两个阶段如果只是为了减少错误率决策时应选择后验概率最高的类。当分类的目标还要考虑不同错误的后果差异通过损失函数来形式化这个问题最优解是最小化预期损失。对于后验概率很低的样本设置阈值θ不强行分类而是选择 “拒绝”以此提高最终分类的准确率。5.4推理与决策分类问题有三种解决方式1、判别函数方法不建模任何概率直接输出类别输入 x → 经过一个函数 f(x) → 直接输出类别标签比如 0/12、判别式模型直接建模条件概率 p(C_k|x)再决策输入 x → 输出每个类别的概率 → 选概率最大的类别3、生成式模型建模每个类的件概率密度分布p(x|C_k) 和先验概率 p(C_k)再用贝叶斯求后验p(C_k|x)再决策因为后两种方法概率模型都有后验概率优势如下降低风险后验概率支持灵活修改损失矩阵如不同错误代价变化只需调整决策规则即可 而判别函数方法一旦损失矩阵变化必须重新训练整个模型。实现拒绝选项利用后验概率可设置拒绝准则使误分类率或预期损失最小化 判别函数方法无法判断样本置信度无法实现这一功能。补偿不平衡的类先验解决训练数据和真实场景数据分布不一致的问题比如癌症筛查真实人群中癌症的患病率很低但为了训练模型我们可能会用一个 “平衡数据集”正常和癌症样本各一半来训练直接用这个平衡数据集训练出来的模型会把 “先验概率” 当成 50%。只有知道后验概率 (p(C_k|x))我们才能通过贝叶斯定理把模型在平衡数据集上学到的概率修正回真实世界的概率分布。 判别函数方法做不到这一点。模型整合后验概率方便我们把多个子模型的结果组合起来。复杂任务有多个数据源需要分别用不同的模型处理每个模型都输出一个后验概率p(C_k|x_I) 和 p(C_k|x_B)我们就可以利用概率规则把它们整合起来得到最终的后验概率 p(C_k|x_I, x_B)。(概率规则条件独立性假设朴素贝叶斯思想两个数据是相互独立的。基于这个假设我们就能把两个模型的结果相乘再结合先验概率得到最终的后验概率。)5.5生成分类器5.5.1生成分类器生成分类器用来建立生成式模型先建模p(x|C_k) 和 p(C_k)再用贝叶斯算 p(C_k|x)首先是二分类的生成式模型步骤是1、先建模类条件概率密度 p(x|C_k) 和先验 p(C_k)再用贝叶斯定理算后验概率 p(C_1|x)。分子先验原因C_1出现的概率 × 条件概率原因C_1条件下结果x出现的概率分母两个类别的 “总证据”结果x出现的总概率2、把上述的后验公式化为 sigmoid 函数的形式只是换了一种写法本质还是后验概率把任意实数压缩到 [0,1]用于二分类的概率输出是贝叶斯后验概率的变形形式a \ln \frac{p(x|C_1)p(C_1)}{p(x|C_2)p(C_2)}对称性\sigma(-a) 1 - \sigma(a)所以类别 2 的概率就是 1-\sigma(a)。完美适配二分类的概率需求。其次考虑多个类的生成式模型后验函数计算类似化为sigmoix函数的形式softmax 用的是归一化观察分子分母会发现它天然满足 “所有类别的概率和为 1”5.5.2连续输入当我们假设每个类的样本服从同一个协方差的高斯分布p(x|C_k) \sim \mathcal{N}(\mu_k, \Sigma)把 p(x|C_k)代入之前的 a \ln \frac{p(x|C_1)p(C_1)}{p(x|C_2)p(C_2)}时相互抵消。最后剩下的 (a(x)) 就变成了 x 的线性函数a(x) w^T x w_0。因此二分类的后验概率就变成了p(C_1|x) \sigma(w^T x w_0)。多分类也满足p(C_k∣x)softmax(w_k^Txw_k0)关键结论决策边界是线性的对应第二张图5.5.3最大似然解为什么需要最大似然解呢由上我们知道在「共享协方差的高斯假设」下二分类的后验概率可以写成线性回归形式但这里的 w、w_0里都依赖于模型的三个参数类均值 \mu_1, \mu_2共享协方差矩阵 \Sigma类先验概率 p(C_1)\pi、p(C_2)1-\pi最大似然解怎么使用呢最大似然估计的思路很简单找到一组参数使得「当前数据集被模型生成出来的概率似然」最大。对应我们的场景就是找到 \pi, \mu_1, \mu_2, \Sigma让所有样本的生成概率最大。解法如下写出单个样本的生成概率p(x_n, C_1) p(C_1)p(x_n|C_1) \pi \mathcal{N}(x_n|\mu_1, \Sigma)写出整个数据集的似然函数所有样本生成概率的乘积取对数求导针对每个参数分别求导为0得到它们的最大似然估计。如果是离散输入朴素贝叶斯假设把类条件概率写成每个特征概率的乘积取对数后得到的 a_k(x) 依然是 x 的线性函数指数族分布的通用形式p(x|\lambda_k,s) \frac{1}{s}h\left(\frac{1}{s}x\right)g(\lambda_k)\exp\left\{\frac{1}{s}\lambda_k^T x\right\}前面两种情况共享协方差的高斯、朴素贝叶斯的离散都得到了线性模型。这不是巧合而是它们都属于指数族分布。(离散类别 C_k下的条件概率是p(x_i|C_k) \mu_{ki}^{x_i} (1-\mu_{ki})^{1-x_i})为什么指数族会得到线性模型把这个形式代入 a(x) \ln\frac{p(x|C_1)p(C_1)}{p(x|C_2)p(C_2)}时非指数部分的项会抵消掉。剩下的指数部分取对数后就变成了 (\lambda_1-\lambda_2)^T x这是 x 的线性项。加上常数项最终 (a(x)) 就是一个完整的线性函数。因此p(C_1|x) \sigma(a(x))后验概率依然由线性函数控制。5.6判别分类器5.6.1概述判别分类器用来建立判别式模型直接建模 p(C_k∣x)一步到位做分类人为强行设定直接用线性函数 激活函数拟合后验1、激活函数线性模型的输出范围为 (-\infty,\infty)不适合表示分类问题中的后验概率。通过引入激活函数f(\cdot)可将线性输出映射到 [0,1] 区间从而得到概率形式的预测结果。被称为广义线性模型2、固定基函数当数据是非线性的比如环形分布的用固定基函把数据映射到新空间让线性模型能解决非线性问题。保留线性模型的所有优点实现简单5.6.2逻辑斯谛回归对比5.6与5.5的模型训练方法对比项逻辑回归判别式高斯生成模型生成式参数数量与特征数 M 线性相关仅需学习权重需要估计均值、协方差参数为 O(M^2) 级别高维场景参数少、计算高效维度越高优势越大维度升高参数爆炸计算代价大怎么训练逻辑回归最大似然估计写出似然函数求解权重 w。得出模型为\quad y_i\sigma(\boldsymbol w^\mathrm{T}x_i)。含义如下先用线性函数给样本打一个分数 再用 Sigmoid 压缩成 0~1 的概率 代表这个样本属于类别i的预测概率单个概率p_i y_i^{t_i}(1-y_i)^{1-t_i}t_i只取0或1写出全体似然L \prod p_i计算参数sigmoid 非线性函数导致无法使用最小二乘法计算以下是两种常用训练方法迭代重加权最小二乘法IRLS专门针对逻辑回归的凸损失函数设计的方法效率很高局限性大随机梯度下降SGD通用的迭代优化方法依靠 sigmoid 导数的特殊性质\sigma(a)\sigma(a)(1-\sigma(a))简化梯度计算方便迭代更新参数。如果你的数据是线性可分的两类数据完全不重叠一条直线就能完美分开上述方法会出现过拟合的问题所以还要在损失函数里加一个正则化项比如 L2 正则限制权重的大小5.6.3多类逻辑斯谛回归逻辑回归在多分类问题上的扩展。多分类任务包含 K 个类别为每一类分配独立权重参数 \boldsymbol w_1,\boldsymbol w_2,\dots,\boldsymbol w_K。各类别的预测概率y_{i1},y_{i2},\dots,y_{iK}。用独热标签匹配多分类输出第 k 类 \Rightarrow\; t_{ik}1其余全为 0得出 Softmax模型为y_{ik} p(C_k|x_i) \frac{\exp(\boldsymbol w_k^\mathrm{T}x_i)}{\sum_{j1}^K \exp(\boldsymbol w_j^\mathrm{T}x_i)}构造多分类单样本似然p_i \prod_{k1}^K y_{ik}^{\,t_{ik}}全体似然L \prod_{i1}^N p_i随机梯度下降SGD 完整流程本质最大化似然 \boldsymbol{\iff} 最小化 负对数似然1、把「似然」变成「损失」全体似然取负对数得到是总损失多分类交叉熵损失2、找「该往哪改权重」求解损失函数的梯度梯度公式\nabla_{\boldsymbol w_j} E \sum_{n1}^N (y_{nj}-t_{nj})x_n对softmax函数求导得\nabla_{\boldsymbol w_j} E \boldsymbol{\iff} 损失 E 对权重 w_j 的变化方向\boldsymbol{\iff}预测概率 - 真实答案×第 n 个样本的原始特征数据的求和\boldsymbol{\iff} 把所有样本的「误差 × 特征」全部加在一起得到全局总的修正方向3、依靠梯度使用SGD迭代更新权重参数完成模型训练。SGD 实际操作最简w_{\text{新}} w_{\text{旧}} - 学习率 \times 梯度多分类逻辑回归本质就是一个无隐藏层的单层神经网络输入为样本特征输出为各类别概率权重为待训练参数。5.6.4 Probit 回归除了逻辑回归Sigmoid我们还可以用Probit 回归来做二分类它和逻辑回归唯一的区别就是激活函数不同逻辑回归用 Sigmoid函数尾部衰减是指数级的e−x对极端值没那么敏感。Probit 回归用正态分布的累积分布函数尾部衰减是更快的高斯级e−x2更敏感所以它也属于广义线性模型也可以用最大似然法训练参数步骤和逻辑回归完全一样。5.6.5 规范连接函数这是一个更通用的框架把逻辑回归、probit 回归等都统一起来属于广义线性模型GLM的一部分。核心规范连接函数让广义线性模型的梯度极大简化。原理当 f^{-1}(y)\psi(y)时f(a)\psi(y)1消去了复杂的导数项。5.7分类器与ROC曲线分类器精度来评判模型好坏由于数据不平衡比如癌症筛查的场景里准确率很可能误导人真实 \ 预测无癌患癌无癌真阴性 990假阳性 9患癌假阴性 0真阳性 1比如1000 个人里只有 1 个患癌使用一个 “所有人都没癌” 的分类器准确率高达 99.9%但完全没用。我们不再看 “整个矩阵的比例”而是从混淆矩阵的行真实类别或列预测类别中提取指标精准衡量模型在特定类别上的表现准确率99.1%癌症检出率1/1100%检测可靠程度1/1010%健康人误判率9/10000.9%该模型特点零漏诊、有误报由于分类器可以通过调整判定阈值变严格或变宽松为了完整对比一个模型所有标准下的整体水平引入 ROC 曲线就是把「从极松到极严」的所有标准对应的结果都画出来帮你看这个分类器整体的 “底子” 好不好。纵轴Y 轴癌症患者里被成功查出来的比例。越高越好横轴X 轴健康人里被误判为患癌的比例。越低越好对角线瞎猜的。曲线如果在对角线下面说明它比瞎猜还差1、AUG分数AUC就是 ROC 曲线下面的面积取值在 0~1 之间。ROC 曲线画得越完美AUC 就越高模型能力越强。ROC、AUC 用来评价模型整体上限。2、F分数但有时候你需要一个单一的数字来总结模型在当前阈值下的表现这时候就用 F 分数。它是精确率和召回率的 “调和平均数”,公式如下F 分数同时考虑这两个指标取值 0~1越接近 1 越好。六、深度神经网络6.1 固定基函数的局限性用于回归的线性基函数模型理论上讲可以用足够多的基函数模拟出任何需要的函数。但是它存在一个重大缺陷那就是基函数是固定的、手动定义的和数据无关在高维复杂场景下会失效。6.1.1维度诅咒当数据维度变高这些固定基函数的数量会爆炸式增长对于以下三阶多项式单变量y(x) w_0 w_1x w_2x^2 w_3x^3 参数数量4 个两变量y(x_1,x_2) w_0 w_1x_1 w_2x_2 w_{11}x_1^2 w_{12}x_1x_2 w_{22}x_2^2 w_{111}x_1^3 w_{112}x_1^2x_2 w_{122}x_1x_2^2 w_{222}x_2^3参数除了每个变量自己的 1 次、2 次、3 次项还多了变量之间的交叉项参数数量为组合数会随着维度 D 和阶数 M会按O(D^M)的速度增长缺点模型很大不仅参数都没有足够多的数据训练甚至容易过拟合6.1.2高维空间高维空间里数据分布有两个关键反直觉现象让手动设计基函数变得几乎不可能超球体的大部分体积都集中在靠近表面的 “薄壳” 里高维高斯分布的大部分概率质量也集中在离中心特定距离的 “环形薄壳” 里这些现象直接导致了高维数据分布的稀疏性给传统机器学习模型带来巨大挑战。高维空间建模的优势原本线性不可分的数据在更高维空间中可能变得线性可分。这是核方法、神经网络等模型的核心思路之一。6.1.3数据流行真实数据往往分布在低维的 “流形” 上固定基函数很难适配这种复杂的内在结构。第一例一张手写数字 “5” 的图像比如 28×28 像素分布在 784 维空间里的一个3 维非线性流形上。每个像素是一个维度共784维。但有效自由度” 只有 3 个数字的位置、大小、旋转角度第二例自然图像相邻像素之间有强相关性比如物体边缘、纹理因此只覆盖了高维像素空间里的一小部分。随机生成的图像每个像素都是独立采样的只是一团像素点。这进一步说明真实数据只占高维空间的极小一部分而且分布在特定的流形上。神经网络不需要适配整个高维空间只使用与数据流形本身相关的基函数。这样一来基函数不在和像素的维度相关从而避开了维度诅咒。6.1.4数据依赖的基函数传统固定基函数在高维空间中受维度诅咒限制因此需要数据依赖的基函数即从训练数据中学习 / 生成基函数适配数据所在的低维流形。径向基函数RBF以每个训练样本为中心生成基函数自动适配数据流形但计算成本随数据集增大而爆炸且易过拟合。支持向量机SVM通过选择支持向量减少基函数数量但仍受限于数据集规模且无法自然处理多分类。这类方法最终被深度神经网络取代后者能高效利用大数据集并学习到关键的层次化表示实现更高的预测准确性。6.2 多层网络正式介绍前馈神经网络MLP的基础结构前面的数据依赖基函数多层神经网络就是“线性组合 可微非线性激活函数” 的 递归堆叠“单个隐藏神经元” 就是一个基函数而每一层就是一组基函数它们会自动适配数据所在的流形。6.2.1 参数矩阵用矩阵形式表示网络的权重和偏置把线性组合写成矩阵乘法的形式。在这里为了理论推导的简洁给每一层的输入向量加一个固定为 1 的虚拟特征再把偏置项当成这个虚拟特征的权重塞进权重矩阵的第一列。例子a_j w_{j1}x_1 w_{j2}x_2 w_{j0} 要写成 a_j \begin{bmatrix} 1 \\ x_1 \\ x_2 \end{bmatrix}\begin{bmatrix} w_{偏置} w_{j1} w_{j2} \end{bmatrix}公式可以不写单独的偏置项多层网络的前向传播可以简化表达式教材的合并写法是只为了推导方便6.2.2 通用近似对于大部分激活函数单隐藏层的前馈网络就可以逼近任意函数而且精度可以做到任意高。因此神经网络可以被视为 “通用近似器”。但是定理只告诉我们 “这样的单层网络存在”但没有方法找到这些参数。6.2.3 隐藏单元激活函数隐藏单元的激活函数必须是非线性的否则该隐藏单元会没有作用以下是几种常见的激活函数传统 Sigmoid /tanh当输入绝对值很大时梯度会指数级趋近于 0导致梯度消失Hard tanh分段线性实现计算比原版 tanh 更快但是未解决问题Softplus缓解了梯度消失未解决实际应用普及率低ReLU 解决梯度消失。成为现代激活函数的主流。负输入梯度为 0易出现 “死亡 ReLU” 问题部分神经元永久不更新Leaky ReLU给负输入保留小梯度解决 “死亡 ReLU” 问题引入超参数 α需调参实现略复杂6.2.4 权重空间的对称性讲神经网络里的权重存在冗余比如隐藏层神经元互换模型输出不变这是训练时需要注意的特性。