【转载】思想的AI复兴:从下一代卷积神经网络到大语言模型

原文地址:RevAIval of Ideas: From Next-Generation Convolutional Neural Networks to LLMs, on 2023-02-06

思想的AI复兴:从下一代卷积神经网络到大语言模型

祝愿大家新年开局顺利,AI与深度学习研究领域也同样硕果颇丰。在本期《Ahead of AI》第5刊中,我希望重点展示计算机视觉领域的最新进展,而非仅仅赘述大语言模型日益走高的热度。本通讯旨在重拾经典思路,推动卷积神经网络迈上新高度。

不过不必担心,本月大语言模型的热点新闻,我也没有落下……

本期《Ahead of AI》涵盖内容:

  • 借助自监督学习进行卷积网络架构预训练的最新进展
  • 从零开始训练大语言模型的优势
  • 开源亮点
  • 训练数据有限时,监督学习的13种替代方案

文章与趋势

本章节我们首先讨论卷积神经网络的自监督学习,以及GAN与扩散模型的最新对比。短暂涉足计算机视觉领域后,我们将分析从零开始训练大语言模型的若干优势,最后以最新行业热点收尾(毕竟ChatGPT总是话题焦点)。

下一代卷积神经网络

自监督学习能够利用大规模无标注数据集进行监督式预训练,是语言与视觉Transformer背后成功的关键因素之一。然而,掩码自编码这类自监督学习技术,在卷积神经网络(CNN)中效果并不理想。即便在最优情况下,表现也差强人意:https://arxiv.org/abs/2208.00173

figure01

资料来源:《掩码自编码器是可扩展的视觉学习器》,https://arxiv.org/abs/2111.06377

那么,我们该如何借鉴语言与视觉Transformer中成熟的预训练技术,来改进纯卷积网络?答案就是稀疏卷积(详见https://arxiv.org/abs/1409.6070v1):这是一种仅选取部分输入特征图或权重进行计算的卷积操作,能够在捕捉数据核心特征的同时,减少计算量与内存消耗。

将掩码自编码式自监督学习应用于CNN

在CNN中使用前沿的自监督学习技术存在什么问题?传统CNN难以处理这种预训练方案下出现的、不规则的随机掩码输入图像。

常规卷积处理掩码像素会带来哪些问题?

  • 对掩码像素的计算属于冗余操作(效率低下)
  • 会打乱像素值的数据分布(见下图第2点)
  • 掩码特征图上的模式会消失(见下图第3点)

figure02

该标注图出自https://arxiv.org/abs/2301.03580,阐释了常规卷积处理稀疏(掩码)输入时存在的问题。

在最新发表的论文(https://arxiv.org/abs/2301.03580)中,研究人员提出用稀疏卷积来解决CNN处理掩码输入的难题,并提出了**SparK(分层稀疏掩码建模)**方法。

figure03

该标注图出自https://arxiv.org/abs/2301.03580,阐释了SparK卷积网络方案。

SparK可应用于任意卷积网络。例如,将其与ResNet、ConvNeXt结合后,使用128万张无标注图像对这些纯卷积网络进行预训练,在ImageNet上的预测性能最高可提升1.7%。

figure04

标注图出自https://arxiv.org/abs/2301.03580

这真的有效吗?

上面的数据看起来很有说服力,但论文中的结果有时无法很好地泛化到其他架构或问题上。因此,多参考一些佐证证据总是更稳妥的。

在另一篇最新的独立研究中,研究人员提出用稀疏卷积和全局响应归一化改进主流的ConvNeXt架构:https://arxiv.org/abs/2301.00808

这篇ConvNeXt v2论文通过两种机制,为自监督场景协同设计了一款纯卷积网络:

  1. 对高掩码率的稀疏块使用稀疏卷积
  2. 新增一种全局响应归一化层

figure05

资料来源:《ConvNeXt V2:与掩码自编码器协同设计并扩展卷积网络》中的标注图,https://arxiv.org/abs/2301.00808

(1)稀疏卷积的使用支持高掩码率,提升了训练效率。值得注意的是,在微调阶段,我们可以将稀疏卷积部分转换回标准卷积。
(2)全局响应归一化是一种新型归一化层,可替代批归一化和层归一化。如果没有全局响应归一化,(1)中的高掩码率会导致特征坍塌。研究人员发现,使用全局响应归一化能够促进特征多样性,这是取得良好预测性能的必要条件。全局响应归一化层是一种通用技术,未来它能否让其他架构也受益,值得期待。

和其前身ConvNeXt(我们在《Ahead of AI》第4期《AI大年》中曾介绍过,详见https://magazine.sebastianraschka.com/p/ahead-of-ai-4-a-big-year-for-ai)一样,ConvNeXt v2可用于图像分类、目标检测和实例分割任务。

figure06

资料来源:https://arxiv.org/abs/2301.00808

还记得GAN吗?

去年我曾开玩笑说GAN已经“凉了”,但本月GAN强势回归。

根据论文(https://arxiv.org/abs/2301.09515),研究人员打造了一款名为**StyleGAN-T**的GAN模型,在图像质量与生成速度上均超越了蒸馏扩散模型,成为文本生成图像领域的新标杆。

figure07

资料来源:https://arxiv.org/abs/2301.09515

我仍然认为扩散模型是计算机视觉领域生成式建模的未来,但我们也不该就此忽视GAN。毕竟,有竞争才有进步。

单GPU也能训练大语言模型(LLM)?

答案是肯定的!如今的PyTorch开源库让多GPU训练大模型变得轻而易举,但我们往往没有充足的硬件资源。问题在于,我们还能不能像早年那样,用单块GPU训练大型深度学习模型?

在论文(https://arxiv.org/abs/2212.14034<)中,研究人员用单块GPU花24小时训练了一个掩码语言模型/编码器型LLM(本次实验用的是BERT)。作为对比,原版BERT论文(https://arxiv.org/abs/1810.04805)是用16块TPU训练了4天。/p>

这个“极限压缩”项目的成果十分亮眼:研究人员训练出的BERT平均性能达到78.6(原版为80.9)——模型越大,提升效果越明显。

有哪些榨取性能的技巧?

  • 使用自动算子融合与32/16位混合精度训练
  • 禁用QKV注意力矩阵和全连接层中的偏置项
  • 将输入长度从512个token缩减至128个token

哪些方法没有效果?

  • 用FLASH注意力或傅里叶注意力替换原有的多头自注意力机制,没有带来收益
  • 将GELU激活函数换成其他类型,没有优势
  • 减少注意力头数会导致性能下降;保留原有的12个注意力头,是维持微调性能的关键

从预测性能的角度,研究人员还发现:

  • 三角型单周期学习率调度效果最佳
  • 由于训练数据集规模大且训练仅1个epoch,预训练阶段不需要使用dropout
  • 词表大小超过32k后,不会再提升GLUE基准的整体性能(但MNLI任务性能会提升)

figure08

标注图出自https://arxiv.org/abs/2212.14034

话说回来,如果资源有限,我们为什么不直接训练更小的模型?用这篇论文的结论来回答:虽然小模型的吞吐率更高,但学习效率也更低。因此,要达到特定的预测性能阈值,大模型所需的训练时间并不会更长。

编码器型LLM是什么?

我们再聊聊上面那篇“极限训练”论文里用到的编码器型模型。

近期大语言模型的热度,全都集中在解码器型LLM上——比如PaLM(https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html)、Chinchilla(https://arxiv.org/abs/2203.15556)以及GPT系列。这类模型通过下一词预测进行预训练,学习生成文本,有时也被称为**自回归模型**或**单向模型**,因为它们从左到右、逐token地处理文本。

相比之下,BERT这类编码器型LLM通过掩码语言建模进行预训练——我们将部分token隐藏或掩码,让LLM去预测。模型能看到完整的句子——当然,被掩码的词除外。这也被称为双向LLM

根据经验,解码器型LLM通常更适合生成式建模,而编码器型LLM更适合预测式建模(比如文本分类)。

figure09

虽然生成式建模通常看起来更酷炫、更有“魔法感”,也是社交媒体和新闻头条里的常客,但我认为,绝大多数真实商业场景的核心需求,其实都依赖预测式建模。

总之,如今已有数百种不同的大语言Transformer模型,很容易让人眼花缭乱。这种情况下,我强烈推荐收藏Xavier Amatriain整理的全面Transformer模型总结与谱系图:https://amatriain.net/blog/transformer-models-an-introduction-and-catalog-2d1e9039f376/

选哪款GPU?

顺便说一句,如果你想知道哪款GPU性价比最高,推荐看看Tim Dettmers最新更新的指南:https://timdettmers.com/2023/01/30/which-gpu-for-deep-learning/

另外,想根据计算预算找到最合适的LLM模型大小,可以试试这个实用的新工具:https://howmanyparams.com/

我们究竟为什么要从零训练LLM?

既然已经有很多现成的预训练模型,为什么还要自己预训练LLM?一方面是出于研究学习的目的,另一方面,你可能需要让模型适配新的语言或领域(比如蛋白质或DNA序列)。

由于语言具有一定的通用性,典型的工作流是:先在大规模通用语料上预训练模型,再在目标领域上微调——比如目标任务是股市分析的情感分类,就用财经文章做微调。但如果有大量领域专属文本,将这些数据也用于预训练可能效果更好。

例如,在一项研究(https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4337182)中,研究人员发现,在180万篇财经新闻文章上进一步预训练的BERT模型(FinBERT,https://arxiv.org/abs/1908.10063),在财经领域情感分析任务上的表现优于所有其他模型。

学习生命的语言

另一个能说明预训练价值的例子,是近期发表在《自然》上的论文(https://www.nature.com/articles/s41587-022-01618-2)。研究人员用2.8亿条蛋白质序列训练了一个12亿参数的Transformer,用于生成新的蛋白质序列(蛋白质序列由单字母氨基酸字符串组成,比如“DIQMTQSPA…”)。

figure10

标注图出自https://www.nature.com/articles/s41587-022-01618-2

该LLM能够生成与现有蛋白质相似度不超过30%的、真实可信的蛋白质序列。而真正了不起的是,研究人员不止是用氨基酸序列训练了LLM,他们更进一步,合成了完整的基因,并在现实中表达出了这些蛋白质。这些人工蛋白质展现出了与天然蛋白质完全相同的功能。

从零训练LLM

厚着脸皮自荐一下:如果你对从零训练LLM感兴趣,我们最近开发并分享了一份仅需50行代码的实现方案。

figure11

https://lightning.ai


热点头条

1月AI圈大事不断,大语言模型的热度持续高涨。无法一一尽述,但这些内容仍有参考价值,因此我新增了“热点头条”板块,用简短一句话盘点科技领域值得关注的新闻——本月内容偏OpenAI和大语言模型,还请见谅。

学术与科研

ChatGPT相关

Stable Diffusion与生成式图像模型


深度学习基础课程 第4单元

很高兴和大家分享,我的《深度学习基础》课程(https://lightning.ai/pages/courses/deep-learning-fundamentals/)第4单元现已上线:https://lightning.ai/pages/courses/deep-learning-fundamentals/training-multilayer-neural-networks-overview/logistic-regression-for-multiple-classes-part-1-5/

在第4单元中,我们终于开始用PyTorch训练多层神经网络,还会讨论随机权重初始化等设计决策。

figure12

https://lightning.ai/pages/courses/deep-learning-fundamentals/


开源亮点

CIFAR-10超高速训练基准

该项目(https://github.com/tysam-code/hlb-CIFAR10/blob/main/main.py)提供了适合快速实验的PyTorch代码,用于在单GPU上训练卷积神经网络。在单块A100上,它能在10秒内将模型在CIFAR-10上训练到94%准确率。

用Lightning 1.9与Fabric扩展PyTorch模型

Lightning 1.9版本发布(https://github.com/Lightning-AI/lightning/releases/tag/1.9.0 ),带来大量更新。其中一大亮点是全新的**Fabric类**——它是比PyTorchTrainer类更轻量的替代工具与组件集。

和Trainer一样,Fabric仅需几行代码就能轻松扩展PyTorch模型,运行在分布式设备上。但与Trainer类不同的是,训练循环与优化逻辑完全由你掌控。

更多内容见文档:https://pytorch-lightning.readthedocs.io/en/stable/fabric/fabric.html

figure13

nanoGPT——GPT教学级代码库

Andrej Karpathy分享了nanoGPT(https://github.com/karpathy/nanoGPT),这是热门项目minGPT(https://github.com/karpathy/minGPT)的重写版本,目标是用不到600行代码(模型+训练循环合计)讲透GPT-2(解码器型大语言模型)的内部原理。

Ruff——极速Python代码检查工具

Ruff(https://github.com/charliermarsh/ruff)由Rust编写,比现有代码检查工具(包括热门的flake8:https://flake8.pycqa.org/en/latest/)快10到100倍。

代码检查工具的作用是排查代码中的潜在错误、不一致之处,以及是否符合编码规范,还能统一代码风格,这对多人协作的项目尤其有用。但在处理大型代码库时,这类工具有时会偏慢(尤其是用低配硬件检查GitHub提交时)。这种情况下,Ruff值得一试——它可以直接通过pip安装,非常方便!


机器学习问答

问: 假设我们绘制学习曲线后发现,机器学习模型存在过拟合,增加训练数据能改善效果。请列举在监督机器学习场景下,处理标注数据有限问题的不同方法。

figure14

答:
除了收集更多数据之外,在标注数据有限的情况下,我们还可以使用多种与常规监督学习相关的方法。

1)标注更多数据

收集更多训练样本通常是提升模型性能的最佳方法,但实际中往往难以实现。以下是各种替代方案。

2)数据增强与扩充

通过生成修改后的(增强版)或人工的(合成版)训练样本对数据进行“扩充”,有助于提升预测模型的性能。(为简洁起见,本通讯省略具体细节。)

当然,提升数据质量也能改善模型的预测性能。(以数据为中心的AI相关细节同样因篇幅原因略过。)

3)迁移学习

迁移学习指的是先在通用数据集(比如ImageNet)上训练模型,再在目标数据集上微调预训练模型(比如包含不同鸟类的特定数据集)。

迁移学习通常用于深度学习场景,因为深度学习模型的权重可以更新。这一点和树类方法不同——大多数决策树算法属于非参数模型,不支持迭代训练或参数更新。

figure15

4)自监督学习

和迁移学习类似,自监督学习也是先让模型在其他任务上预训练,再针对数据有限的目标任务进行微调。但与迁移学习不同的是,自监督学习通常依赖可以直接从无标注数据中自动提取的标签信息,因此也常被称为无监督预训练

常见例子包括语言建模中的“下一词预测”(比如GPT所用)和“掩码词预测”(比如BERT所用);计算机视觉中一个直观的例子是图像修复:预测图像中被随机移除的缺失部分。

figure16

5)主动学习

主动学习通常会在学习过程中引入人工标注者或用户提供反馈。但它不需要提前标注整个数据集,而是通过一套优先级排序机制,推荐那些能最大化模型性能提升的无标注数据点进行标注。

“主动学习”的名称来源于,模型会在过程中主动选择数据进行标注。例如,最简单的主动学习形式,是挑选预测不确定性高的数据点,交由人工标注者(也称为“预言机”)标注。

figure17

6)少样本学习

在少样本学习场景中,我们面对的数据集通常极小,每个类别只有少量样本。在研究中,1样本(每类1个样本)和5样本(每类5个样本)非常常见。

少样本学习的极端情况是零样本学习,即完全没有标注。近期热门的例子是GPT-3及相关语言模型:用户需要通过输入提示词提供所有必要信息,如下图所示。

figure18

7)元学习

元学习可以理解为“学会学习”——我们开发方法,让机器学习算法自己学习如何更好地从数据中学习。多年来,机器学习社区发展出了多种元学习方法。更复杂的是,元学习可以指代不同的过程。

元学习是上述少样本学习的主要子类别之一,其核心是学习一个优秀的特征提取模块。特征提取模块将支持集图像和查询集图像转换为向量表示,通过与支持集中的训练样本对比,来判断查询样本的预测类别。

元学习的另一个分支与上述少样本学习无关,它专注于从数据集中提取元数据(也叫元特征)用于监督学习任务。元特征是对数据集本身的描述,比如特征数量、各特征的统计量(峰度、极差、均值等)。

提取出的元特征可以为当前数据集选择合适的机器学习算法提供依据。这种方法能够缩小算法和超参数的搜索空间,在数据集较小时有助于缓解过拟合。

8)弱监督学习

弱监督学习是指利用外部标签源为无标注数据集生成标签的方法。通常,弱监督标注函数生成的标签,比人工或领域专家标注的标签噪声更大、准确率更低,“弱监督”因此得名。

在弱监督学习中,我们通常可以开发或采用基于规则的分类器来生成标签——但这些规则通常只能覆盖无标注数据集的一部分。

figure19

以邮件垃圾分类为例,这是一种基于规则的数据标注方法。在弱监督中,我们可以设计一个基于规则的分类器,通过邮件标题中的关键词“SALE”来识别一部分垃圾邮件。注意,我们可以用这条规则把某些邮件标注为垃圾邮件,但不能反过来把没有“SALE”的邮件都标为非垃圾邮件——这些邮件要么保持未标注,要么用其他规则处理。

简而言之,弱监督学习是一种增加训练集中标注样本数量的方法。因此,它和半监督学习、迁移学习、主动学习、零样本学习等其他技术完全兼容。

9)半监督学习

半监督学习和上面提到的弱监督学习密切相关:都是为数据集中的无标注样本生成标签。两者的主要区别在于标签的生成方式(半监督学习有时被视为弱监督学习的子类别,反之亦然)。

弱监督中,我们通过外部标注函数生成标签,这类函数通常噪声大、准确率低,或只能覆盖部分数据。而半监督学习不使用外部标注函数,而是利用数据本身的结构。

figure20

例如在半监督学习中,我们可以根据邻近标注数据点的密度,来给更多数据点打标签,如下图所示。

弱监督可以用于完全无标注的数据集,而半监督学习要求至少有部分数据是标注好的。实际应用中,可以先用弱监督标注一部分数据,再用半监督学习标注那些没被标注函数覆盖的样本。

10)自训练

自训练介于半监督学习和弱监督学习之间。在自训练中,我们训练一个模型(或采用现有模型)来给数据集打标签,这个模型也被称为伪标注器

由于自训练所用的模型不能保证标签准确,因此它和弱监督学习相关;同时,因为我们是用机器学习模型来做伪标注,所以它也和半监督学习相关。

11)多任务学习

多任务学习让神经网络同时学习多个任务(理想情况下是相关任务)。例如,假设我们训练一个分类器来检测垃圾邮件,那么垃圾邮件分类就是主任务。在多任务学习中,我们可以给模型增加一个或多个相关任务,这些额外任务也称为辅助任务。如果主任务是邮件垃圾分类,辅助任务可以是分类邮件的主题或语言。

通常,多任务学习通过多个损失函数实现,每个任务对应一个损失函数,需要同时优化。辅助任务起到归纳偏置的作用,引导模型优先选择能解释多个任务的假设。这种方法通常能让模型在未见过的数据上表现更好。

figure21

上图阐释了硬参数共享软参数共享的区别。硬参数共享中,只有输出层是任务专属的,所有任务共享相同的隐藏层和神经网络主干结构。相比之下,软参数共享为每个任务使用独立的神经网络,但通过参数层间距离最小化等正则化技术,来促进网络之间的相似性。

12)多模态学习

多任务学习是让模型用多个任务、多个损失函数训练,而多模态学习专注于融合多种类型的输入数据。

多模态学习的常见例子是同时接收图像和文本数据的架构。根据任务不同,我们可以使用匹配损失,强制相关图像和文本之间的嵌入向量相似,如下图所示。

figure22

上图中图像编码器和文本编码器是独立的组件。图像编码器可以是卷积主干或视觉Transformer,语言编码器可以是循环神经网络或语言Transformer。不过如今更常见的是用单个基于Transformer的模块,同时处理图像和文本数据。

如前图所示,优化匹配损失对于学习可用于多种任务(如图像分类、摘要生成)的嵌入很有帮助。但我们也可以直接优化目标损失,比如分类或回归损失,如下图所示。

figure23

直观来看,融合不同模态数据的模型通常比单模态模型表现更好,因为它们能利用更多信息。此外,近期研究表明,多模态学习成功的关键,在于提升了隐空间表征的质量。

13)归纳偏置

选择归纳偏置更强的模型,通过对数据结构做出假设,能够降低对数据量的需求。例如,正如第13问所讨论的,由于自身的归纳偏置,卷积网络比视觉Transformer需要的数据更少。

我们该用哪些技术?

我们已经介绍了多种降低数据需求的技术,那到底该用哪些呢?

收集更多数据、数据增强、特征工程等方法,和上面讨论的所有方法都兼容。同样,多任务学习和多模态输入也可以和其他学习策略结合使用。如果模型存在过拟合,还应该结合其他问答中提到的技术(通过模型修改缓解过拟合、通过数据集修改缓解过拟合)。

至于主动学习、少样本学习、迁移学习、自监督学习、半监督学习、弱监督学习这些方法,具体选择哪种高度取决于场景,下图提供了一个概览可以作为参考。

figure24

图中的黑框不是终止节点,而是会回流到“评估模型性能”步骤(为避免画面杂乱,箭头已省略)。


《机器学习问答·AI篇》

如果你喜欢上面的问答内容,想读更多,这其实是我的新书《Machine Learning Q & AI》的节选,书籍地址:https://leanpub.com/machine-learning-q-and-ai/

figure25

有一个面向《Ahead of AI》读者的限时优惠码,可享33%折扣:https://leanpub.com/machine-learning-q-and-ai/c/ahead-of-ai(优惠有效期至2月15日)。


金句精选

“我发现对AI最贴切的比喻是:它就像读写领域的计算器。”——Naval,https://twitter.com/naval/status/1615248290781745153?s=20&t=XUHYiNcjFll218cjrkhAJg

这句话很吸引我,和“计算机是思维的自行车”这个理念有异曲同工之妙。但仔细想想,这个类比有不足之处。计算器是确定性的、精确的,而如今的AI模型并非如此。更恰当的比喻是,把大语言模型看作同义词词典——只不过它针对的是整句、整段文字,而非单个单词。


学习与效率小贴士

研读教材或课程时,最值得投入时间的事情之一就是做习题和测验!当然,一路读下去往往感觉更高效——毕竟快得多。但做练习之所以重要,有以下几个原因:

  1. 检验理解,查漏补缺:做测验和习题时,我们能发现自己的知识漏洞。有时候卡壳了,就得反复回顾内容直到真正掌握。虽然这感觉不如直接进入下一章或下一单元有成就感,但如果想真正吃透内容,这一步必不可少。学习是马拉松,不是冲刺跑。
  2. 主动学习,理解更深:做习题和测验是主动参与的过程,和被动阅读或听讲相比,能促进对内容的深度理解。
  3. 获得动力,持续前进:前面说做练习有时不如往下学有成就感,我觉得这是因为我们总被灌输要多做事、快做事。快点读完一本书或学完一门课,就能快点打勾完事——谁的待办清单不是堆得老高呢?但实际上,完成习题和测验能给我们更强的成就感,激励我们继续学习。
  4. 对接实战,学以致用:习题和测验有时会模拟真实场景,帮助我们把学到的知识用到实际中——而这往往正是我们学习的初衷!

出好的习题和测验并不容易,我总跟学生说:
出卷比答卷难。

我会尽最大努力,在未来的课程和书籍中加入更多优质习题。


本通讯是个人兴趣项目,没有直接报酬。如果您愿意支持我,欢迎购买我的书籍:https://sebastianraschka.com/books。如果您觉得这些内容有启发、有帮助,也欢迎推荐给朋友和同事。

figure26

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/、https://nostarch.com/machine-learning-and-ai-beyond-basics、http://mng.bz/M96o

您的支持意义重大!非常感谢!

Leave a Reply

Your email address will not be published. Required fields are marked *

*