Back

两个有用的东西:Awesome thingsMachine Learning Summer School

会议:1)理论 - COLT;2)方法论 - ICML、NIPS、ICLR;3)应用 - CVPR、ICCV、ACL;


机器学习系统#

深度学习指利用 多层非线性变化 的架构来 建模数据的高维特征;而机器学习指通过 非显示编程 在某些任务 T 上通过经验 E 来提升性能 P,即任务可用 <T,P,E> 三元组表示。

机器学习系统

机器学习系统可以粗略地分为三个要素:1)模型 - 函数集合/假设空间;2)学习准则 - 结构/经验风险最小化;3)优化算法 - GD/Adam。

深度学习解决了 如何找到一个好的假设空间的问题,不同的假设空间具有不同的拟合能力和复杂度,用于解决不同的现实问题以及选用不同的学习算法。

学习准则#

θ=argmin学习准则1Nn=1NL(y(n),f(x(n);θ)假设空间)+λθ2正则项\small \theta^* = \underbrace{\arg \min}_{\text{学习准则}} \frac{1}{N}\sum_{n=1}^{N}L(y^{(n)}, \underbrace{f(x^{(n)};\theta)}_{\text{假设空间}}) + \underbrace{\lambda\Vert \theta\Vert^{2}}_{\text{正则项}}

一个好的模型应当拥有较小的期望错误,但由于不知道真实的数据分布和映射函数,因此通过计算经验风险来近似期望错误。加入正则项的目的是减少参数空间,避免过拟合。

θt+1θtηθL(D;θt),θL(D;θt)=[θ1L(D;θt)θ2L(D;θt)]\small \theta_{t+1} \leftarrow \theta_t - \eta\nabla_{\theta}L(D;\theta_t), \hspace{0.2cm} \nabla_{\theta}L(D;\theta_t) = \begin{bmatrix} \displaystyle \frac{\partial}{\partial \theta_1}L(D;\theta_t) \\[0.6em] \displaystyle \frac{\partial}{\partial \theta_2}L(D;\theta_t) \\[0.4em] \vdots \end{bmatrix}

采用梯度下降来更新参数,即计算当前参数 θt\small \theta_t 在训练集 D\small D 上的梯度 ηθL(D;θt)\small \eta\nabla_{\theta}L(D;\theta_t),然后根据学习率 η\small \eta 沿着 “负梯度” 的方向移动,从而降低损失优化参数。

泛化误差#

泛化误差

优化指南:1)使用一个好的假设空间,使得训练误差低;2)使用正则化技术,使得模型复杂度低;3)使用大量的训练数据,使得数据容量大;4)只在需要的时候使用复杂模型。

线性回归#

采用最小二乘法(Least Square Method)进行参数估计,其是一种利用极值来求解参数的方法。首先将偏置 b\small b 合并到权重参数 w\small w 当中:

y^(n)=wx(n)\small \hat{y}^{(n)}=w^{\top}x^{(n)}

采用 均方误差损失函数,根据结构风险最小化原则:

L(D;w)=n=1N(y(n)y^(n))2+λw2=YXw2+λw2将样本转换为向量并写成范数\small \begin{aligned} L(D;w)&=\sum_{n=1}^{N}(y^{(n)}-\hat{y}^{(n)})^{2} + \lambda\Vert w\Vert^{2} \\&=\|Y-X^{\top}w\|^2 + \lambda\Vert w\Vert^{2} \hspace{0.5cm} \leftarrow\text{\footnotesize 将样本转换为向量并写成范数} \end{aligned}

损失函数对参数 w\small w 求偏导数并置 0 得到最优的参数 w\small w 为:

Lw=w[(YXw)(YXw)]+w[λww]=2X(YXw)+2λw=0    (XX+λI)w=XYw=(XX+λI)1XY\small \begin{aligned} \frac{\partial L}{\partial w}&=\frac{\partial}{\partial w}[(Y-Xw)^{\top}(Y-Xw)] + \frac{\partial}{\partial w}[\lambda w^{\top}w] \\ &= -2X^{\top}(Y-Xw) + 2\lambda w = 0 \\ \implies (X^{\top}X + \lambda I)w &= X^{\top}Y \\ w &=(X^{\top}X + \lambda I)^{-1}X^{\top}Y \end{aligned}

通过该方法得到的参数被称为 解析解。但是当特征维度过高的时候,计算 XX\small XX^{\top} 的逆会 非常耗时且不稳定,实践中通常使用梯度下降等迭代方法。

Logistic 回归#

为了解决连续线形函数不适合进行分类的问题,引入 单调可微的非线性函数 g:RD(0,1)g: \mathbb{R}^D\to(0,1) 来预测标签的后验概率:

y^(n)=σ(wx)=11+exp(wx)\small \begin{aligned} \hat{y}^{(n)}&=\sigma(w^{\top}x) \\ &=\frac{1}{1+\exp(-w^{\top}x)} \end{aligned}

使用 Sigmoid 激活函数,其是单位阶跃函数的连续可微版本。采用 交叉熵损失函数,那么学习准则为:

argmin1Nn=1N[y(n)logy^(n)+(1y(n))log(1y^(n))]\small \arg\min-\frac{1}{N}\sum_{n=1}^N\left[y^{(n)}\log\hat{y}^{(n)}+(1-y^{(n)})\log(1-\hat{y}^{(n)})\right]

有两种视角来理解该学习准则:1)采用最大似然的 概率模型 - 假设每个样本的标签在给定特征和参数的情况下服从伯努利分布,那么整个数据集的对数似然就等于方括号中的内容;2)采用交叉熵的 分类模型 - 交叉熵 度量了真实标签分布和预测标签分布之间的 “距离”,当这个距离越大的时候,对应的 log\small -\log 项就会越大,对模型的惩罚就越严重。

参数更新#

有了对应的模型和学习准则,我们就可以根据链式法则来进行参数更新了(忽略了聚合项),具体过程为:

wL()=y^(n)L()×zy^(n)×wz\small \frac{\partial}{\partial w}L(\cdot)= \frac{\partial}{\partial \hat{y}^{(n)}}L(\cdot) \times \frac{\partial}{\partial z}\hat{y}^{(n)} \times \frac{\partial}{\partial w}z

首先计算 z\small z 对参数 w\small w 的偏导数:

wz=w(wx(n))=x(n)\small \begin{aligned} \frac{\partial}{\partial w} z&=\frac{\partial }{\partial w}(w^{\top}x^{(n)}) \\ &=x^{(n)} \end{aligned}

然后计算 y^(n)\small \hat{y}^{(n)} 函数对 z\small z 的偏导数,其中 z=wx\small z=w^{\top}x。对其进行变形:

(1+ez)σ(z)  =  1两边分别对 z 求导ez(1)σ(z)+σ(z)(1+ez)  =  0移位σ(z)(1+ez)  =  ezσ(z)两边同除 1+ezσ(z)  =  [1σ(z)]σ(z)\small \begin{alignedat}{2} (1+e^{-z})\sigma(z) &\;=\; 1 &\quad& \leftarrow\text{\footnotesize 两边分别对 \(z\) 求导}\\ e^{-z}(-1)\sigma(z)+\sigma'(z)(1+e^{-z}) &\;=\; 0 &\quad& \leftarrow\text{\footnotesize 移位}\\ \sigma'(z)(1+e^{-z}) &\;=\; e^{-z}\sigma(z) &\quad& \leftarrow\text{\footnotesize 两边同除 \(1+e^{-z}\)}\\ \sigma'(z) &\;=\; [1-\sigma(z)]\sigma(z) &\quad& \end{alignedat}

最后计算 L()\small L(\cdot)y^(n)\small \hat{y}^{(n)} 偏导数:

y^(n)L()=y(n)y(n)^×[11y(n)1y^(n)]×(1)=y(n)y^(n)+1y(n)1y^(n)\small \begin{aligned} \frac{\partial}{\partial\hat{y}^{(n)}} L(\cdot)&=-\frac{y^{(n)}}{\hat{y^{(n)}}}\times \left[1-\frac{1-y^{(n)}}{1-\hat{y}^{(n)}}\right]\times (-1)\\&=-\frac{y^{(n)}}{\hat{y}^{(n)}}+\frac{1-y^{(n)}}{1-\hat{y}^{(n)}} \end{aligned}

将得到的偏导数乘起来:

wL()=y^(n)L()×zy^(n)×wz=[y(n)y^(n)+1y(n)1y^(n)]×[(1y^(n))×y^(n)]×x=[y^(n)y(n)]×x(n)\small \begin{aligned} \frac{\partial}{\partial w}L(\cdot)&=\frac{\partial}{\partial \hat{y}^{(n)}}L(\cdot) \times \frac{\partial}{\partial z}\hat{y}^{(n)} \times \frac{\partial}{\partial w}z \\ &=\left[-\frac{y^{(n)}}{\hat{y}^{(n)}}+\frac{1-y^{(n)}}{1-\hat{y}^{(n)}}\right]\times\left[(1-\hat{y}^{(n)})\times\hat{y}^{(n)}\right]\times x \\ &=[\hat{y}^{(n)}-y^{(n)}]\times x^{(n)} \end{aligned}

采用梯度下降得到的参数更新过程为:

wt+1wtη[y^(n)y(n)]×x(n)\small w_{t+1}\leftarrow w_t - \eta [ \hat{y}^{(n)} - y ^{(n)}]\times x^{(n)}

最大似然估计#

最大似然估计(MLE)的目标是找到一组参数,使得观测数据 D\small D 出现的概率(似然)最大。具体流程为:1)定义概率模型并假设数据服从某个分布;2)构建似然函数,并转换为对数似然函数;3)由于优化问题倾向于求最小值,因此从最大化对数似然 -> 最小化负对数似然。

假设标签 y\small ywx\small w^{\top}x 加上一个高斯噪声 ϵ\small \epsilon 决定:

y=wx+ϵ\small y=w^{\top}x+\epsilon

那么 y\small y 就服从均值为 wx\small w^{\top}x、方差为 σ2\small \sigma^{2} 的高斯分布:

p(Dw,σ2)=12πσexp((ywx)22σ2)p(Dw,σ2)=n=1N12πσexp((ywx)22σ2)在训练集 D 上的似然函数logp(Dw,σ2)=12log(2πσ2)+12σ2n=1N(ywx)2取负对数\small \begin{aligned} p(D|w,\sigma^{2})&=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(y-w^\top x)^2}{2\sigma^2}) \\ p(D|w,\sigma^{2})&=\prod_{n=1}^N\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(y-w^\top x)^2}{2\sigma^2}) & \leftarrow & \hspace{0.1cm} \text{\footnotesize 在训练集 D 上的似然函数} \\ -\log p(D|w,\sigma^{2})&=\frac{1}{2}\log ({2\pi\sigma^{2}})+\frac{1}{2\sigma^{2}}\sum_{n=1}^N (y-w^\top x)^{2} & \leftarrow & \hspace{0.1cm} \text{\footnotesize 取负对数} \end{aligned}

第一项不依赖于参数 w\small w,第二项去除 1/σ2\small 1 / \sigma^{2} 后就等于均方误差,因此最优参数就由最小化负对数似然得到:

w=argmin12n=1N(ywx)2\small w^{*}=\arg\min\frac{1}{2}\sum_{n=1}^N(y-w^{\top}x)^2

最大后验估计#

MLE 的缺点是当数据比较少的时候会发生过拟合,估计的参数不准确。因此可以给参数加上 先验知识 以适应小样本的数据集,这一过程相当于在优化目标中添加正则项。

最大后验估计(MAP)的目标是最大化参数 w\small w 的后验概率。即看到了这组数据之后,什么样的参数看起来最可信。根据贝叶斯公式,后验概率正比于 似然函数与先验概率的乘积

maxwp(Dw)p(w)=maxw[logp(Dw)+logp(w)]w=argmaxw[logp({(x(n),y(n))}n=1Nw,σ2)loglikelihood+logp(w)logprior]\small \begin{aligned} \max_{w}p(D|w)p(w)=\max_{w}\left[\log p(D|w)+ \log p(w)\right] \\ w^{*}=\arg\max_w\left[\underbrace {\log p\left(\{(x^{(n)},y^{(n)})\}_{n=1}^N\mid w,\sigma^2\right)}_{\log\text{likelihood}}+\underbrace{\log p\left(w\right)}_{\log\mathrm{prior}}\right] \end{aligned}
  • logp(Dw)\small \log p(D|w) 为似然函数,表示在给定参数 w\small w 的情况下,数据 D\small D 的概率分布;
  • logp(w)\small \log p(w) 为先验概率分布,当选取不同先验的时候,对应的正则化也不同。

假设参数遵循高斯分布,即 wN(0,τ2I)\small w\sim N(0,\tau^2I),这代表:

  • 模型使用 2\small \ell_2 正则化,且参数遵循均值为 0, 方差为 τ2\small \tau^2 的多元高斯分布;
  • τ2I\small \tau^2I 是指协方差矩阵为 τ2\small \tau^{2} 的对角矩阵,即参数 ww 的每个维度都是独立同分布的。

代入复杂的数学推导之后,我们可以得到:

w=argminn=1N(ywx)2+λw2\small w^{*}=\arg\min\sum_{n=1}^N(y-w^{\top}x)^2+\lambda\Vert w \Vert^2

这就等价于最大似然估计中求解参数的方法了,区别在于添加了正则项:

  • 若先验选择 高斯分布,则代表 2\small \ell_2 正则化(2 - 范数 / 岭回归);
  • 若先验选择 拉普拉斯分布,则代表 1\small \ell_1 正则化(1 - 范数 / 套索回归),会得到稀疏解。

机器学习分类#

监督学习#

使用 标注好 的训练数据来寻找输入与输出对应的 函数关系

  • 分类(Classification) - 预测输入样本所属的预定义类别,包括二分类、多分类;
  • 回归(Regression) - 预测与输入样本相关联的一个或多个连续数值;
  • 序列标注(Sequence Labeling) - 为序列数据中的每一个元素分配一个特定的标签,包括命名实体识别(NER)、词性标注(POS)等,常用的模型为 BiLSTM-CRF, BERT, Transformer;
  • 目标检测(Object Detection) - 在图像中使用 BBox 定位一个或多个目标的位置,并识别出其类别,常用的模型为 YOLO、DETR、EfficientDet;
  • 语义分割(Semantic Segmentation) - 为输入图像中的每一个像素分配一个类别标签,常用的模型为FCN、U-Net、DeepLab;
  • 实例分割(Instance Segmentation) - 对输入图像中的每个实例进行轮廓划分,进一步区分同一类别的不同实例,常用的模型为 Mask R-CNN。

无监督学习#

使用 未标注 的数据来寻找数据集中的 模式和规律。

  • K 均值聚类(K-Means) - 通过将每个数据点分配给最近的聚类中心/均值来将数据划分为多个不同的簇;
  • 主成分分析(PAC) - 找到数据中方差最大的方向(主成分),将数据投影到这些方向上以实现降维;
  • 生成对抗网络(GAN) - 让 “伪造者/生成器” 和 “侦探/判别器” 相互博弈,从而学习创造出逼真的数据;
  • 扩散概率模型(DPM) - 通过学习如何逐步地从纯噪声中恢复出清晰的数据,来掌握生成新数据的能力;
  • 基于流的生成模型(FGM) - 学习一个精确可逆的数学变换,将随机噪声分布 “扭曲” 成真实的数据分布;
  • 变分自编码器(VAE) - 将数据压缩到 “潜在空间” 中,再从这个空间中采样来生成多样化的数据;
  • 对比学习(CL) - 通过 “拉近相似的,推开不同的” 方式,让模型在没有标签的情况下学习数据的表示。

强化学习#

强化学习的核心思想是让智能体(Agent)在一个复杂的环境(Environment)中不断 “试错” 学习,从而学习一个最优的策略(Policy),该策略能让智能体采取最优的动作(Action),从而 最大化长期累积奖励(Reward)。其不依赖 “正确答案” 的数据集,而是在与环境的不断交互中,通过奖励信号自我优化,最终达成目标。

强化学习

学习理论#

  • PAC 学习理论 - 在多项式时间内从合理的训练数据学习到一个近似的假设;
  • 没有免费午餐定理 - 不存在一种机器学习算法适用于所有任务;
  • 奥卡姆剃刀原理 - 简单的模型泛化能力更好;
  • 归纳偏置 - 模型的先验知识。

损失函数总结#

交叉熵#

熵指的是一个概率分布本身所包含的不确定性的期望,即一个事件的发生概率低,当他真的发生的时候,带来的信息量就越大。

H(p)=xp(x)logp(x)\small H(p) = -\sum_{x}p(x)\log p(x)

相对熵/KL 散度指的是用一个 “猜测” 的概率分布 q\small q 来表示 “真实” 的概率分布 q\small q 时,所产生的信息损失。

DKL=xp(x)p(x)q(x)\small D_{\text{KL}}=\sum_{x}p(x)\frac{p(x)}{q(x)}

交叉熵指的是用一个 “猜测” 的概率分布 q\small q 去编码 “真实” 的概率分布 p\small p 的事件,所需要的平均编码长度。当编码长度越短,代表预测分布与真实分别越接近。

H(p,q)=xp(x)logq(x)\small H(p, q) = -\sum_{x}p(x)\log q(x)

它们三者之间的关系为 交叉熵=熵+相对熵,指的是预测分布等于真实分布加上二者之间的差异。

二分类交叉熵#

L=1Nn=1N[y(n)log(y^(n))+(1y(n))log(1y^(n))]\small L=-\frac{1}{N}\sum_{n=1}^N\left[y^{(n)}\log(\hat{y}^{(n)})+(1-y^{(n)})\log(1-\hat{y}^{(n)})\right]
  • 当真实标签 y(n)\small y^{(n)} 为独热编码的时候,损失为 log(y^(n))\small -\log(\hat{y}^{(n)}),鼓励模型提高正类的预测概率。

多分类交叉熵#

L=1Nn=1Nc=1Cyc(n)log(y^c(n))\small L=-\frac{1}{N}\sum_{n=1}^N\sum_{c=1}^Cy^{(n)}_c\cdot\log(\hat{y}^{(n)}_c)
  • y(n)\small y^{(n)} 表示第 n\small n 个样本在类别 c\small c 上的真实标签,通常采用独热编码;
  • y^c(n)\small \hat{y}^{(n)}_c 表示模型预测第 n\small n 个样本属于类别 c\small c 的概率,采用 Softmax 函数。

Focal Loss#

Focal Loss 指的是动态地降低大量简单样本在损失函数中的权重,从而让模型能够更 “专注” 于学习那些难以分类的样本。

L=(1p)γlog(p)\small L = -(1-p)^{\gamma}\log(p)

调制因子 (1p)γ\small (1-p)^\gamma 的作用:

  • 对于简单的样本 - 此时 p1\small p \rightarrow 1,那么调制因子就会趋近于 0,从而降低了简单样本对总损失的贡献;
  • 对于困难的样本 - 此时 p0\small p \rightarrow 0,那么调制因子就会趋近于 1,从而保持了困难样本对总损失的贡献。

Credit#

深度学习简介
https://k1tyoo.ink/blog/dl/intro
Author K1tyoo
Published at January 7, 2025