跳转至

从函数到模型:机器学习基础概念

 

约 4771 个字 预计阅读时间 27 分钟


一文带你串联机器学习导论

基于李宏毅老师的ML课程,以分类问题为引快速回顾ML的基础概念,略带一点点延伸

引入

How Can AI ID a Cat? An Illustrated Guide

这一篇文章图文并茂地描述了ML的作用

Image

Image

Image

绪论

什么是机器学习

Machine自主找到一个Function

如何学习

分为trainingtesting

  1. 设计一个Model来生成所有可能的function

  2. 找一个评价函数来量化误差

  3. 不断迭代优化/挑选,直至找出最优的function

Image

有哪些学习方式

从结构上,自上而下分有:学习场景(不同环境拥有不同的限制)、学习任务(目标类型)、学习方法

Image

学习场景

  • 监督学习(Supervised Learning)

  • 先验 :已知输入与输出间存在映射关系

  • 数据 :大量标注样本(feature + label)

  • 目标 :学习一个函数,能从输入特征预测输出标签

  • 典型任务 :回归(房价预测)、分类(猫狗识别)、序列标注(语音转文字)


  • 半监督学习(Semi-supervised Learning)

  • 先验 + 后验结合 :有一小部分标注数据,大部分是无标注数据

  • 数据 :少量 labeled + 大量 unlabeled

  • 目标 :利用未标注数据的分布结构,辅助提升模型的泛化能力

  • 典型任务 :文本分类(少量人工标注 + 大量未标注语料)、医学影像识别(部分样本有专家标注)


  • 无监督学习(Unsupervised Learning)

  • 后验 :没有任何标签,完全依赖数据内在结构

  • 数据 :只有特征,没有 label

  • 目标 :发现隐藏模式、分布规律或低维表示

  • 典型任务 :聚类(用户分群)、降维(PCA、t-SNE)、生成模型(GAN 生成图片)


  • 迁移学习(Transfer Learning)

  • 跨域先验迁移 :利用源任务(已有数据/模型)的知识,辅助目标任务

  • 数据 :源领域有标注数据,目标领域标注稀缺

  • 目标 :缩短训练时间、降低目标任务对数据的需求

  • 典型任务 :BERT 预训练 + 下游微调、ImageNet 预训练 + 医学图像识别


  • 强化学习(Reinforcement Learning, RL)

  • 交互式后验 :智能体通过与环境交互,学习策略

  • 数据 :状态(state)、动作(action)、奖励(reward)

  • 目标 :最大化长期累积回报(reward)

  • 典型任务 :AlphaGo(围棋)、机器人控制、推荐系统动态优化


主要任务

  • 回归 :预测连续值

  • 分类 :预测离散类别

  • 其他复杂任务

    • 序列预测(机器翻译、语音识别)

    • 生成任务(图像生成、文本生成)

    • 决策任务(游戏 AI、自动驾驶)


学习方法

线性方法 :线性回归、逻辑回归等

非线性方法

  • 浅层 :SVM、决策树、随机森林、kNN。

  • 深层神经网络、深度学习(DNN、CNN、RNN、LSTM、Transformer)


引入

让我们捋一遍最fundamental的一些概念吧

对于最简单的线性回归问题,可以建立带有未知参数(parameter)的模型(model)

\[ y=b+w*x \]

其中,\(w、b\)分别为权重(weight)和偏置(bias)

接着需要评估模型,因此引入损失函数(loss function),去计算估计结果与期望之间的差距;可量化为平均绝对误差(MAE)、均方误差(MSE)、交叉熵(cross entropy)等。最后得到一个误差表面(error surface)

Image

把大象装进冰箱的最后一步,是找出最优参数\(w^*\&b^*\)

最常见的操作是梯度下降(gradient descent):

\[ w^{1}\leftarrow w^{0}-\eta\left.\frac{\partial L}{\partial w}\right|_{w=w^{0}} \]

其中,计算梯度的过程称为反向传播(BackPropagation,BP)

Image

这一过程中所涉及的步长,namely 学习率\(\eta\),包含于超参数(hyperparameter)(又或者是tol

给定不同的步长,最终会落在local minima或者global minima上面

扩展到二维,即在平面上优化

Image

上述的模型被称为线性模型(linear model)

显然线性意味着高频分量的丢失,那么global minima还是比较大。子曰过,办法总比困难多

  • 利用领域背景知识先手set up a better model

  • 用激活函数来捏出更拟合结果的预测曲线(比如用多个sigmod拟合hard sigmod)

    • 激活函数(activation function)望文生义,就是类比神经元,有着二极管的截止与导通能力,那么就可以通过多个激活函数(如ReLU,Rectified Linear Unit,修正线性单元)分段求和得到任意复杂的曲线

    • 同时,可以将线性结果映射到[0,1]之中(sigmod)

换句话说,在线性表达式外面套一层激活函数,再通过多个这样的激活函数叠加实现非线性拟合

这里开始非线性了

\[ y=b+\sum_{i}c_{i}\sigma(b_{i}+w_{i}x_{1}) \]

上式称为感知机(PLA,Perceptron Learning Algorithm),也被称为人工神经网络(ANN)

Image

Image

矩阵表示为

\[ \bf r=b+Wx \]

此时的参数维度已经够多的了,于是乎把一组线性中的所有参数拉成列向量\(\theta\),再定义为\(L(\bm{\theta})\),那么问题就变成了优化下面这一向量

\[ \boldsymbol{\theta}=\begin{bmatrix}\theta_1\\\theta_2\\\theta_3\\\vdots\end{bmatrix} \]

本质上是一样的

Image

大胆一点,假设有n个参数,则可得到梯度为

\[ \bm g=\begin{bmatrix}\frac{\partial L}{\partial\theta_1}|_{\theta=\theta_0}\\\frac{\partial L}{\partial\theta_2}|_{\theta=\theta_0}\\\vdots\end{bmatrix} \]

那么一次迭代就可以表示为

\[ \left.\left[\begin{array}{c}\theta_{1}^{1}\\\theta_{1}^{2}\\\vdots\end{array}\right.\right]\leftarrow\begin{bmatrix}\theta_{0}^{1}\\\theta_{0}^{2}\\\vdots\end{bmatrix}-\begin{bmatrix}\eta\frac{\partial L}{\partial\theta_{1}}|_{\theta=\theta_{0}}\\\eta\frac{\partial L}{\partial\theta_{2}}|_{\theta=\theta_{0}}\\\vdots\end{bmatrix}\\\bm{\theta_{1}}\leftarrow \bm{\theta_{0}}- \eta \bm g \]

这里的上下标有些混乱,懂了就行

在实际百万量级的参数running中,我们做不到一次就跑完,于是分段,每一段称为一批(Batch),每一个batch后更新一次参数

同时,往往整体走过一遍是不够的,需要定义其循环次数(这里的参数是static parameter类型/Lua中的闭包,不会重置的),即回合(epoch)

也是超参 Batch 决定了每次更新用多少样本

Epoch 决定了模型看整个数据集多少遍

为了降低Loss,可以尝试增加激活函数数量

Image

但不难发现,在测试集上(即2021年),增加ReLU带来的边际效益已经递减,所以,也许我们可以创造很多层?

Image

在此基础上,我们有了输入、输出和隐藏层(hidden layer),构成了多层感知机(MLP,Multi-Layer Perceptron)。这是深度学习的雏形

所以人们把神经网络越叠越多越叠越深,AlexNet有8层,它的错误率是16.4%

两年之后VGG有19层,错误率在图像识别上进步到7.3%

后来GoogleNet有22层,错误率降到6.7%

而残差网络(Residual Network,ResNet)有152层,错误率降到3.57%

Image

显然,好多了。哦莫,怎么四层下测试集效果反而变差了,明明训练集好好的?

你说的对,这就是过拟合(overfitting)


总结

让我们总结一下一个典型监督学习的流程

  • data loading

  • 模型定义(包含激活函数,可能包含全连接、卷积、池化等model structure)

  • 前向传播 ,把数据输入网络,得到预测结果

  • 损失函数计算 \(Loss\)

  • 反向传播 ,计算损失函数对参数的梯度

  • 参数更新 \(Optimization\) ,用梯度下降(SGD/Adam等)更新参数

  • 循环迭代 \(Epoch/Batch\) ,重复前向+反向传播,直到收敛


常见问题与解决

  • 模型偏差

模型太简单,model没有include理论上的最优function,不够泛化

Image

这时候可以通过增加激活函数、层数来实现深度学习

  • 欠优化

训练集的结果不尽如意,甚至随着层数变多并没有变好(呜呜它甚至不愿意变成过拟合)

Image

Image
  • 过拟合

在测试集上marvellous,在训练集上like a shit

怎么解决

  1. 增加样本数量,力大砖飞(数据增强,data augmentation)

  2. 增加限制,适当减少参数,或者共用(比如全连接,fully-connected network)

  3. 早停(early stopping)、正则化(Regularization)和丢弃法(dropout method)

  • 不匹配

需要社会工程学才能补偿的现象

  • 交叉验证

常见于K折交叉验证(K-fold CV),每次取其中一份作为验证集(validation set),其余的training,再轮换验证集并重复,最后取平均,使得结果更robust


进一步的思考

局部最小值与鞍点

考虑一个两个参数构成的误差表面

Image

当发现梯度很小,但Loss较大时,不难怀疑是陷入了local minima

实际上,更多时候是掉入了鞍点(saddle point)

鞍点意味着,还有救🤪

结论先行,在巨量参数加持下,高维度意味着总归会有几个维度并没有到达最值,所以绝大部分情况都是鞍点,即是可优化的

下面介绍如何通过Hessian矩阵的正定性判断临界值类型

  • 正定矩阵
\[ \text{一个实对称矩阵 }A\in\mathbb{R}^{n\times n}\text{ 称为 正定矩阵,如果对任意非零向量 }x\text{,都有}: \]
\[ x^TAx>0 \]

正定矩阵的特性

  1. 对称

  2. 特征值都为正(作为评判依据)

  3. 可逆

  4. 任意正定矩阵都可以进行 Cholesky 分解:\(A=LL^T\),L为下三角矩阵


  • Hessian Matrix

在多元函数里,Hessian 矩阵是由 所有二阶偏导数 组成的方阵,对于n维实函数,可定义为

\[ \begin{gathered}H(f)=\begin{bmatrix}\frac{\partial^2f}{\partial x_1^2}&\frac{\partial^2f}{\partial x_1\partial x_2}&\cdots&\frac{\partial^2f}{\partial x_1\partial x_n}\\\frac{\partial^2f}{\partial x_2\partial x_1}&\frac{\partial^2f}{\partial x_2^2}&\cdots&\frac{\partial^2f}{\partial x_2\partial x_n}\\\vdots&\vdots&\ddots&\vdots\\\frac{\partial^2f}{\partial x_n\partial x_1}&\frac{\partial^2f}{\partial x_n\partial x_2}&\cdots&\frac{\partial^2f}{\partial x_n^2}\end{bmatrix}\end{gathered} \]

优化问题 中,如果目标函数的 Hessian 在某点正定,就能保证它是一个局部极小点

凸优化 里,如果目标函数的 Hessian 全局正定 (对所有点都正定),那么函数就是 严格凸函数 ,其极小点唯一


  • 损失函数临界值判断

损失函数可基于泰勒展开得近似结果:

\[ f(x_0+\Delta x)\approx f(x_0)+\nabla f(x_0)^T\Delta x+\frac{1}{2}\Delta x^TH(x_0)\Delta x \]

H矩阵就是Hessian Matrix

如果该点偏导为0,则有

\[ f(x_0+\Delta x)\approx f(x_0)+\frac{1}{2}\Delta x^TH(x_0)\Delta x \]

所以,当H为正定(所有特征值为正)时,为凸函数,在极小值点

通常情况下,H的特征值有正有负,为鞍点

Image

批量大小、动量法与梯度下降

  • 极端地考虑,分为批量梯度下降法(Batch Gradient Descent)和随机梯度下降法(SGD) 分别意味着不分批、batch大小为1

有结论:在考虑算力限制条件下,批量应尽可能小 (小批量带来的噪声有助于逃离鞍点)

Image

进一步,可以引入人为的噪声,即物理世界的惯性

Image

通过动量,可以越↑过→山↑丘↑😆


自适应学习率 | 优化器

观察Loss function,已经不再下降,但是梯度仍然在抖动

Image

再看看损失表面

Image

不难得出结论,学习率太大了,这里需要小一点;但太小也不行,要是能自适应调整多好呀

有的兄弟,有的

  • AdaGrad

回忆基础的梯度下降

\[ \bm \theta_{t+1}^i\leftarrow \bm \theta_t^i-\eta\boldsymbol{g}_t^i \]

我们希望学习率与梯度成负相关,于是有

\[ \theta_{t+1}^i\leftarrow\theta_t^i-\frac{\eta}{\sigma_t^i}g_t^i\quad\sigma_t^i=\sqrt{\frac{1}{t+1}\sum_{j=0}^t\left(g_j^i\right)^2} \]

Image
  • RMSprop

加入指数衰减(Exponential Decay),或者指数加权移动平均(Exponential Moving Average, EMA),以具备更灵活的步进

具体来说,有

\[ \theta_{t+1}^i\leftarrow\theta_t^i-\frac{\eta}{\sigma_t^i}g_t^i\quad\sigma_t^i=\sqrt{\alpha\left(\sigma_{t-1}^i\right)^2+\left(1-\alpha\right)\left(g_t^i\right)^2} \]
  • Adam(adaptive moment estimation)

这是最常用的优化器了,是RMSprop动量的组合,灰常好使


  • 退火与预热

当接近minima时,梯度很小,会出现爆炸的现象

Image

于是引入学习率调度,让学习率与时间有关,随时间衰减,即退火(annealing)

Image

但在实际应用中,往往是先采用一个较小的学习率,先变大再变小,称为预热

在 Adam、RMSprop 或 AdaGrad 中,我们通过统计量\(\sigma\)来估计各方向的陡峭程度

由于初期数据不足,\(\sigma\)不够准确,所以学习率会先保持较小以探索误差面;

等统计更稳定后,再逐步增大学习率


多分类

在独热编码后,我们希望最终的output也是同样大小的矩阵,并用归一化值表示各个种类的可能

最常见的激活函数就是softmax

Image

思想为取指数后归一化,具体有

\[ \mathrm{Softmax}(z_i)=\frac{e^{z_i}}{\sum_{j=1}^Ke^{z_j}} \]

特征归一化BN

我们之所以考虑自适应学习,一个原因是因为误差平面的样本方差太大。那有没有可能预处理数据,削高填低呢

一种很经典的做法,就是标准化(standardization),或者叫做批次归一化(Batch Normalization,BN )

在计算Q函数时也采纳这一惯用手法,这里就不再赘述了

\[ \tilde{x}_i^r\leftarrow\frac{x_i^r-m_i}{\sigma_i} \]

Image

Image

Image

反标准化工序,即对标准化后的数据再扩展和平移,其中涉及到扩展参数γ和平移参数β

这两个参数是可学习的,能够让模型在训练过程中自己去修改

如果前面的标准化工序有没有起到优化的作用,就可以通过调整γ和β参数来在一定程度上抵消标准化操作

至此,你应该能在各种有白板的场合对着你一无所知的朋友手脚并用地吹水啦XD


常见架构/学习场景概述

这一章旨在简要介绍各种classical model的特点、应用和结构,并引入一些非监督学习场景

具体自行Google/Gemini,我也会贴一篇excellent paper,可以与References的PDF配合食用,我就不班门弄斧了

我的整理归档于智人能工

CNN

  • 特点 :通过局部感受野、参数共享与池化操作,捕捉数据的局部结构与平移不变性

  • 结构 :由卷积层(feature extraction)、激活函数(非线性)、池化层(降采样)、全连接层(分类/回归输出)组成

  • 应用 :计算机视觉(图像分类、目标检测、语义分割)、语音识别、医疗影像

  • 关键点 :善于处理有 空间结构 的数据

好文:一文读懂卷积神经网络\(CNN\)

注意卷积后紧跟激活函数,而非直接池化

Image

RNN

  • 特点 :通过循环结构引入“记忆”,能够处理序列数据

  • 结构 :输入在时间维度上递归传递隐藏状态,常见改进有 LSTM、GRU 用于缓解梯度消失/爆炸

  • 应用 :自然语言处理(语言模型、机器翻译)、时间序列预测(金融、气象)、语音建模

  • 关键点 :建模 序列依赖 ,但训练难度较大,长序列建模能力有限

好文:史上最详细循环神经网络讲解(RNN/LSTM/GRU)


自注意机制

  • 特点 :通过 Query、Key、Value 的加权计算,让序列中的每个位置都能与其他位置建立动态联系

  • 结构 :核心公式\(\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\)

  • 应用 :自然语言处理(上下文关系建模)、图像理解(Vision Transformer)、多模态融合

  • 关键点 :突破了 RNN 的序列计算限制,能够全局建模依赖关系

好文:

李宏毅深度学习教程

一文搞定自注意力机制(Self-Attention)


Transformer

  • 特点 :完全基于自注意机制,摒弃了循环与卷积结构,实现高效并行训练

  • 结构 :由编码器-解码器堆叠而成,包含多头注意力机制、前馈网络、残差连接与层归一化

  • 应用 :机器翻译(原始应用)、大规模预训练模型(BERT、GPT 系列)、视觉、语音、多模态

  • 关键点 :奠定了 预训练-微调 范式与大模型(foundation model)的基础

好文:

李宏毅深度学习教程

Transformer原理详解


生成模型

  • 特点 :学习数据分布,能够生成新的样本

  • 代表方法

    • VAE(变分自编码器):通过潜变量建模,优化基于证据下界(ELBO)

    • GAN(生成对抗网络):通过生成器-判别器博弈,实现逼真的样本生成

  • 应用 :图像生成(人脸、艺术风格迁移)、语音合成、数据增强

  • 关键点 :在 分布建模与数据生成 方面发挥核心作用

视频:


扩散模型

  • 特点 :通过逐步向数据添加噪声(正向扩散)与学习去噪过程(反向扩散)实现生成

  • 结构 :常结合 U-Net + 时间嵌入,训练目标为重建无噪声数据或预测噪声

  • 应用 :图像生成(Stable Diffusion、DALL·E)、音频生成、科学计算(分子结构)

  • 关键点 :目前最强大的生成模型类别,兼具稳定性与高质量生成能力

视频: 一文理清 Diffusion Model 扩散模型 | 原理图解+公式推导


迁移学习

  • 特点 :利用源任务的知识(参数/特征)来提升目标任务的学习效率

  • 形式 :微调(fine-tuning)、特征迁移(feature transfer)、多任务学习、领域自适应(domain adaptation)

  • 应用 :NLP(BERT 微调下游任务)、计算机视觉(ImageNet 预训练模型迁移到检测/分割)、跨模态学习

  • 关键点 :解决 数据不足训练成本高 的问题

好文:


强化学习

  • 特点 :智能体(agent)通过与环境(environment)交互,基于奖励(reward)信号学习策略(policy)

  • 核心元素 :状态(state)、动作(action)、奖励(reward)、策略(policy)、价值函数(value function)

  • 算法

    • 价值迭代类(Q-learning, DQN)

    • 策略梯度类(REINFORCE, PPO, A3C)

    • 模型基方法(Model-based RL)

  • 应用 :游戏(AlphaGo)、机器人控制、推荐系统、资源调度

  • 关键点 :适用于 序列决策问题 ,与监督学习的“有标注训练”不同

视频:


最后,以一篇overview结束这次学习,也算是一窥LLM的大门