视觉预训练模型
卷积神经网络CNN

CNN 的卷积层类似于简单细胞,通过将卷积算子作为滤波器。提取物体的视觉边缘信息,形成局部特征,并只与上一层局部区域相连接。
CNN 的池化层则类似于复杂细胞,通过提取信号最强的部分,对底层的边缘特征进一步的聚合,同样确保了信号在传递中不改变位置和方向。
通过这种分层的特征传递方式,即使视觉目标在图像中移动位置,顶层的特征表示也不会改变。我们不由感叹生物构造进化的奇妙,这种平移不变的特性特别适合解决视觉任务中的各种问题。
ResNet

它通过设计特殊的直通通道,引入了许多旁路直接连接到后续层。这就相当于让领导和员工直接见面,避免传话过程中信息的丢失。这个设计让模型可以绕过深层网络中的梯度爆炸和消失问题,更好地学习复杂的图像特征。

研发人员开始广泛采用公开数据集 + 大模型预训练的方法,配合领域微调的技术,用来降低面向不同业务场景定制化开发的成本。因此,随着产业互联网的发展,大模型预训练 + 领域微调这种方式,逐渐成为了视觉算法研发的主流。
RNN 循环神经网络
RNN是一种用于处理“序列数据”的神经网络模型。
RNN 引入了循环结构,如下图所示,在 RNN 中,每个单元都具有一个隐藏状态来存储之前的信息,并将其传递给下一个节点。
如下图所示,每个单元 i 不仅仅接收自身的输入 xi 来获取当前步骤的文本信息,同时还接收前一个单元的输出 hi−1 作为另一部分输入,获得上下文信息的补充。

RNN 这样的结构就类似人类语言的模式。在人类对话中,我们也会不断结合之前听到的内容来理解当前语境的含义。因此,RNN 恰好适合用来给 NLP 中的长序列数据建模。
LSTM
LSTM 是一种特殊的 RNN,其内部包含三个关键的门控制单元:遗忘门、输入门和输出门。这些“门”控制了信息的流动和保留,使网络能够有选择地记住或遗忘相关信息,从而有效解决了梯度消失和爆炸问题。


引入的 Ct 这条链路扮演着记忆细胞的角色,负责传递着各个门和单元之间的信息。虽然之前的 RNN 也可以依靠 ht 这条链路来传递局部的时序语义关系,但是记忆细胞可以捕捉并传递更长序列的语义关系,这能帮助模型更好地建模长距离依赖的关系。
Seq2Seq
在 NLP 领域中,经常需要处理“输入为序列,输出也为序列”的任务,ChatGPT 就是典型的应用。为了更好地解决这些问题,研究者将这一类任务抽象为 “Seq2Seq”(Sequence-to-Sequence)任务,并为此提出编码器 - 解码器的架构。
首先编码器会将输入序列从源空间(例如中文)投影到一个高维语义空间的向量表示中。接着,解码器将这个高维向量从语义空间映射回目标空间(例如英文),生成一个新的序列作为翻译输出。
在编码器(Encoder)中,输入序列经过 RNN,更新每一个单元的隐藏状态,并用最后一个单元的隐藏状态,作为编码器阶段产出的高维向量,因为它包含了完整输入序列的语义信息。
接着,解码器(Decoder)用编码器产出的高维向量,作为自己的初始隐藏状态向后传递,“报出”自己的内容,并且向后面的 RNN 单元传递更新后的状态。当后面的 RNN 单元传递接收到前一步的输入时,也会“报出”自己的内容,并继续向下一个单元传递隐藏状态,直到持续生成完整的目标序列。
注意力机制
举个例子来帮你理解注意力机制。综艺节目里有个非常经典的节目——“传声筒游戏”。在这个游戏中,通常会有 N 个参与者,每个人有一个编号。每个人只能听取编号比自己小的人传来的话,同时只能将这段话传递给编号比自己大的下一个人。
这个游戏本身确实具有一定难度,因为它需要考验每一个人在过程中的记忆和表达能力。但是,如果我们稍作改变,允许后面的人与之前所有的人进行对话,那么游戏的难度就会大大降低。
而 Attention 就是在做这个事情,它允许后面的人询问(Query)他前面所有人知道的内容(Key & Value),甚至后面的人还能知道之前哪个人说的话对他来说是“更重要的”。
在 LSTM 中我们引入 Ct 这条记忆链路,使得模型能够更好地建模长距离依赖的关系。如下图所示,Attention 则是为解码器阶段的每个单元,单独准备了一个自己的 C,它会基于当前单元内容和输入之间的关系进行“私人定制”,让解码器的每个单元都能获得定制化的全局信息。

让模型更好理解人类语言
视觉能力是人类天生就具备的,而语言能力则要后天学习,所以对人类来说语言能力本来就更难。此外,语言存在不同的语种,每种语种都有不同的词汇、词法和语法。这进一步增加了处理语言的复杂性。
语言的多样性分散了人类的注意力,因此构建一个涵盖多种语言的带标签数据集这件事,变得异常困难。这也使得全球范围内的科学家们很难共同构建“巴别塔”,只能在自己的小圈子里打转。所以 NLP 也被我们称为人工智能皇冠上的宝石。
Word2Vec:对比学习加持特征表征
Word2Vec 算法由 Google 的研究人员于 2013 年提出。这个算法的最大贡献,是找到了一种无监督学习的方法,对大规模的语料库进行预训练,学习其中的语义,这绕开了对大规模有标签数据集的依赖,打破了 NLP 预训练数据上的困境。
跳字模型和连续词袋模型
跳字模型的目标是通过给定一个中心词来预测其周围的单词,而连续词袋模型的目标是通过周围的单词来预测中心词。其实这里隐含一个假设,即在字面上相近位置经常出现的单词之间,相关性会更强。
在学习词与词之间的语义关系时,模型将每个词映射到高维向量空间中,这些向量可以应用于多种自然语言处理任务。举例来说,在机器翻译任务中,你可以将每个词的嵌入向量作为输入,这样能够显著提升语言模型对每个单词含义的理解能力。
ELMo:语言模型消除歧义
Word2Vec 也有明显的短板,比如无法处理词在不同语境中的多义性。举例来说,“苹果”可以指水果,也可以指手机。Word2Vec 无法理解这些差异,可能导致产生错误的结果。
ElMo 是一种基于上下文生成词向量的方法,能够通过综合考虑“前到后”和“后到前”两个序列单词的含义,动态调整生成的词向量,让词语的表示变得更加准确。比如,在句子“我掏出苹果手机下单了一袋苹果”中,单词“苹果”可以指代“手机”或“水果”。ELMo 能够根据上下文来动态理解这两种含义。

ELMo 由左侧的前向双层 LSTM 编码器和右侧的逆向双层 LSTM 编码器组成,每个编码器都由两层 LSTM 叠加而成。ELMo 的重要贡献在于将上下文信息融入 NLP 词向量的表示中,提升了词向量的表达能力。
GPT 预训练模型
OpenAI 一开始就将预训练模型(PTM)作为目标,因此也相应地设计了适用于多种 NLP 下游任务的微调方法。这一刻,NLP 领域终于拥有大模型预训练 + 领域微调的策略了。
GPT 系列一直采用了 Decoder Only 的 Transformer 架构,当时 Transformer 刚刚发表,足以看出 OpenAI 的判断非常准确。
ElMo 提出了一个两阶段的方法:首先,在第一阶段使用一个庞大的语言模型进行预训练;然后,在第二阶段,使用特定下游任务的数据集做模型微调。后面这张图展示了如何修改 GPT 预训练模型,以便其兼容各种下游的 NLP 任务。

BERT 预训练模型
BERT 与 GPT-1 在预训练过程中有明显差异。BERT 采用了类似 ELMo 的双向语言模型,同时利用上文和下文信息进行建模预测。
BERT 在模型和方法方面的创新主要体现在 Masked 语言模型和 Next Sentence Prediction。Masked 语言模型使用掩码标记替换部分单词,并要求模型预测这些被替换的单词。Next Sentence Prediction 则要求模型判断两个句子之间的关系。因为在预训练阶段中同时使用这些技巧和各类任务的数据,所以 BERT 具备了多任务学习的能力。
BERT 系列从一开始就采用了 Encoder Only 的 Transformer 架构,这一架构能够同时利用上文和下文信息,为 BERT 带来了显著的性能提升,所以它在各类 NLP 任务上表现出色。
Transformer
Transformer 总体上是一个编码器 - 解码器的架构

左侧是 Transformer 的编码器,它由很多个 Encoder 堆叠组成。右侧是它的解码器,由许多的 Decoder 堆叠组成。
进入高维空间
通过一个小故事来串联 Transformer 各个部分的作用。先来听听故事的内容吧:故事发生在几千年后,由于那时地球的环境日益恶化,人类最终决定进行星际移民,离开这颗母星。为了实现这个目标,我们需要让我们的星际舰队,探索宇宙中适合居住的新家园。为此,我们提出了一个名为 Transformer 的搜寻计划,计划的目标是让人类尽快地找到目标星球。下面我们的计划开始了。
第一步,我们的舰队要先进入太空,才能开始星际之旅。这就好像 Transformer 模型,需要把我们的文本输入转化成高维向量一样,毕竟机器世界无法直接理解文本数据。
所以,Encoder 的第一层嵌入层会将输入的词汇转换为向量表示,也就是把输入映射到一个向量空间中,以便模型更好地理解输入内容。这听起来很熟悉,对吧?没错,这就是我们第 6 节课里学习到的空间投影。所以,这里你可以使用独热编码对输入进行编码,让 Transformer 自学调整参数,或者使用像是 Word2Vec 预训练好的投影模型进行编码,让 Transformer 少走弯路。
位置编码
在完成第一步之后,你的舰队已经成功升空。接下来,为了确保舰船在无边无际的宇宙中,能够准确报告自己的位置并进行有效通讯,我们需要为每个成员分配独一无二的编号。这就是 Transformer 中 Endcoder 的第二层,也就是位置编码层所做的事情。
位置编码层会为嵌入层输出的这些向量添加位置信息,把位置信息融合到嵌入向量中,这能帮助模型区分不同词汇在输入中所处的位置。
Transformer 会并行地处理所有输入的内容,所以各个并行单元会无状态地处理每个输入。因此,我们需要在最开始就给每个输入的嵌入向量一个位置编号,这样模型才能通过输入判断它在整体中的位置。
自注意力机制
自注意力机制会针对每个带有位置编码的输入向量,去计算和其他位置的关联程度,从而捕捉输入内部的上下文关联信息,形成一个注意力权重的分布作为后续层的输入,指导模型的学习过程。
多头注意力
Transformer 模型会使用多组同构的自注意力(Self-Attention)模块,并行学习出多组不同的权重,每组权重表示了它根据输入信息所学习的不同自注意力权重。最终通过将多组自注意力计算的结果拼接在一起,通过线性变换得到多头自注意力模块的联合输出。
多头注意力机制类似于赛马机制,它有助于减少模型初始化的随机性对模型效果的影响。所以即使只留下一个注意力头也能使用,但这会导致模型的稳定性和多样性无法得到保障,进而造成模型的性能下降。
集体智慧决策

从下图中你可以看出,在 Transformer 中,每个“头”都会输出到 MLP 中进一步的汇总信息,用来增加 Transformer 模型的拟合能力,提升决策的效率和效果。

GPT-1:学会微调
GPT-1 是基于海量的无标签数据,通过对比学习来进行训练的。这个思路来源于从 Word2Vec 到 ELMo 的发展过程中积累的经验。它们都通过在大规模文本数据上进行无监督预训练,学习到了丰富的语言知识。
GPT-1 的微调方法是,使用预训练好的模型来初始化权重,同时在 GPT-1 的预训练模型后面增加一个线性层。
GPT-1 的模型结构其实就是 Transformer 的架构。与 Transformer 不同的是,GPT-1 使用了一个只包含解码器部分的架构。它是一个单向的语言模型,通过自回归地生成文本,来模拟序列生成的过程。自回归指的是使用前面的观测值,来预测未来的值,GPT 模型一个词一个词往外“蹦”,就是源于它的特性。GPT-1 会为序列开始后的每个时刻生成一个词,并把它当作下一个时刻生成的上下文。
GPT-1 在训练过程中则会根据海量数据,统筹考量不同上下文语境下生成的文本在语法和语义上的合理性,来动态调整不同词的生成概率,这个能力主要由它所使用的 12 个 Transformer 共同提供。这便是 GPT-1 所提供的一整套完备的预训练加微调的 NLP PTM 方法论,它也是第一个提出这种方法的。从这个角度说啊, GPT-1 的创新度是在 BERT 之上的。
GPT-2:放下微调
那什么是零样本学习呢,就是创造一个通用的、不需要任何额外样本,就能解决所有下游任务的预训练大模型。

GPT-3:超越微调
“零样本学习” 的方式仍然存在一定的局限性,因为下游的使用者,很难把新的下游数据注入到模型中,因为 GPT-3 预训练模型的规模已经变得非常庞大了,它是当时规模最大的模型之一,具有惊人的 1.75 万亿个参数,很少有机构有能力承担微调所需的巨大算力成本。
于是,OpenAI 提出了一个更新的理念,也就是全新的“少样本学习”(Few-Shot Learning)的概念。这和传统意义上模型微调的“少样本学习”是不一样的。GPT-3 所提出的方式是,允许下游使用者通过提示词(prompt)直接把下游任务样本输入到模型中,让模型在提示语中学习新样本的模式和规律,这种方法的学名叫做 in-context learning。
这种方法也存在缺点,其中最明显的问题是,注入样本的数量完全受限于模型能接收的最大提示词长度。这就导致 GPT 向着参数规模越来越大、训练数据越来越多,还有提示词输入长度越来越长这样的趋势发展。
ChatGPT
GPT-3 在代码生成和代码的静态解释上表现突出。因此,OpenAI 便基于他们的“首代模型” 特工达闻西 Davinci(其实就是 GPT-3),追加了数千万个开源代码库作为语料进行 finetune 训练,得到了 CodeX 的主要模型 Code-davinci-002。
经工业界广泛验证表明,人们也发现,经过了针对性的代码语料增强训练后,大模型在逻辑推理和思维连贯能力方面都表现得更出色。很可能是因为这一点,Code-davinci-002 成为了 OpenAI 未来所有主流模型的基石。Code-davinci-002 的成功也标志着 GPT 正式进入了 3.5 时代。
WebGPT
WebGPT 提供了一整套的方法,使 LLM 能够自主地搜索内容、浏览网页并获取知识,以使语言模型更准确地回答问题,并为回答的内容提供引用来源,从而提高回答的可信度。
在实现过程中,OpenAI 开发了一套工具,用于记录标注人员在的各种行为,其中包括使用搜索引擎辅助回答给定问题时,采取的动作(如搜索、点击链接、翻页等等)。这些数据能帮助 WebGPT 模拟人类在使用搜索引擎时的习惯行为,生成查询内容,使用查询结果。
GPT-3.5 models
Code-davinci-002 在商业化上的成功,为 OpenAI 鼓舞了士气,他们在 code-davinci-002 的基础上使用了更多的文本语料,经过监督微调(Supervised Fine-Tuning,SFT)训练得到了 text-davinci-002。这里要注意的是,OpenAI 在这里再次启用了监督微调,而不是之前“大力出奇迹”的自监督学习。
通过大量的人工标注自然语言对话语料,对 code-davinci-002 进行监督微调。在微调阶段,提供的提供示例指令可以是对话片段、问题 - 回答对等。在这个阶段,模型会根据这些示例指令完成多次迭代训练,这让模型获得了优异的指令理解和意图识别能力,模型的输出也更符合人类的期待,胜过通用文本生成模型。
ChatGPT
它是控制论学派的经典方法,通过在一个由智能体(Agent)与环境(Environment)交互的情境中进行试错学习,来解决目标问题。不断地给模型关于回答好坏的反馈,就能帮助它不断进步,生成更符合人类惯例的回答。
相比监督微调,这种方法的优势在于不需要标注者编写回答,只需要为模型生成的几个回答打分。通过这种方法,OpenAI 大幅提高了标注效率。模型负责生成具体回答,人类标注者负责排序。随着迭代和反馈,模型会明显提升生成对话的准确性、流畅性和逻辑性。

涌现能力
涌现能力的典型特征就是,在小规模的时候,模型基本上没有任务解决能力,而在模型规模达到一定的临界值之后,模型能力就会迅速提高。这种现象,在处理多步骤复杂任务的时候尤其明显。这种新能力的涌现,让模型在处理复杂任务的时候,具备了更高的性能和解决能力。
你可以在下面这张图中看出,各项任务的性能都在参数规模达到了 10^10 时发生了骤变,攀升到了一个很高的数值。这便是涌现在模型参数量和性能的相关性数据上所呈现的特征。

涌现任务的特点
涌现能力是指大语言模型在特定任务上,表现出超出其训练数据范围的能力。
In Context Learning (ICL):大语言模型从少量的示例中学习,而无需微调参数的能力。
思维链 (CoT):大语言模型能够理解和执行复杂的推理过程。



涌现智能的开关

















