分类目录归档:人工智能


2024-03-14 创建
2024-03-24 添加GAN,改进DDPM等内容

1. 自编码器(Autoencoder,AE )

自编码器是神经网络的一种,经过训练后能尝试将输入复制到输出,该网络由两部分构成,,如下图所示,一个是编码器,h=f(x)表示编码器;另一个是解码器 \hat x=g(h)

现代自编码器将编码器和解码器的概念推广,将其中的确定函数推广为随机映射 p_{encoder} (h|x)p_{decoder} (x|h)
为了从自编码器获取有用特征,通常使编码器的输出h维度较小,这种编码维度小于输入维度的自编码器称为欠完备自编码器,学习欠完备的表示将强制自编码器捕获训练数据中最显著的特征。
学习过程可以简单描述为最小化一个损失函数:
 \underset{f,g}{argmin} L(x,g(f(x)))
惩罚g(f(x))与x的差异,如均方误差。
如果自编码器的容量太大,那么训练执行复制任务的自编码器可能无法学习到数据集的任何有用信息。

2.去噪自编码器(Denoising autoencoder,DAE )

去噪自编码器的输入为被损坏数据(或添加噪声),并训练来预测原始没被损坏数据作为输出的自编码器。其架构图如下所示:

传统自编码的目标函数为:
L(x,g(f(x)))
其中L是一个损失函数,如 L^2 范数,惩罚g(f(x))与x的差异。如果模型被赋予过大的容量,L可能仅得g∙f学成一个恒等函数。
相反,去噪自编码最小化目标函数:
 \underset{f,g}{argmin} L(x,g(f(\tilde x )))
其中\tilde x是被某种噪声(如满足正态分布的噪声)损坏的副本,因此去噪声自编码器必须撤销这些损坏,而不是简单的复制输入。

3.VAE模型

去噪声自编码器训练过程就是强制编码器f和解码器g隐式地学习输入数据x的分布p_{data} (x)
自动编码器有多种衍生品,如带有隐变量并配有一个推断过程变分自编码器能够学习到高容量且完备的模型,进入学习到输入数据有用的结构信息(如分布信息),这些模型被训练为近似输入数据的概率分布而不是简单对输入的复制。
实际上,我们可以把自编码函数f推广到编码分布(如q_{\varphi} (z|x)),把解码器函数g推广到随机解码器
(如p_{\theta} (x|z))。如VAE模型就是如此,VAE模型从概率分布视角进行拟合,采样重参数技巧进行采样,从而使VAE生成的图像有一定的创新性。

VAE模型采用神经网络模拟概率分布,其逻辑架构如下所示:

4.GAN模型

VAE模型生成的图像质量上不过理解,这或许与底维隐空间将丢弃一些较细的信息有关。GAN模型提出了一种思路,采用一种博弈的螺旋上升的一种思路进行。它用判别器和生成器,取代一般生成器的编码器与生成器的架构。GAN的训练过程如下所示:

GAN模型采用两部分训练,因此容易导致训练不稳定,另外,训练生成器时,判别器的将被冻住,容易导致模型塌陷的情况,即生成器只要有些生成样本较好,能骗过判别器,就不会再考虑生成更多、更新的样本。为避免AE,DAE,VAE,GAN等模型的不足,人们结合这些模型的优点,提出了一种称为扩散模型的架构。

5.扩散模型

扩散模型有很多,这里主要介绍DDPM(Denoising diffusion probabilistic models)为典型代表。DDPM可以认为是AE的高级版本,其利用了加噪、利用学习数据分布、使用重参数技巧、利用神经网络拟合概率分布、使用变分下界等重要思想。DDPM的架构图如下:

6.如何训练DDPM?

使用U-Net网络结构预测高斯噪音\epsilon_\theta (x_t,t)

7.改进DDPM

对于扩散模型来说,需要设置较长的扩散步数才能得到好的效果,但这导致了生成样本的速度较慢,比如扩散步数T为1000的话,那么生成一个样本(从噪声到数据,从t=T到t=0)就要模型依次(而不能平行)推理1000次,这使用生成过程非常缓慢。针对这一问题去噪扩散隐式模型(Denoising Diffusion Implicit Models,DDIM)提出一种更高效(快几十倍)的采样方法,生成图像时使用更少的采样步数,却能获得相同甚至更好的性能。DDIM和DDPM有相同的训练目标,但是它不再限制扩散过程必须是一个马尔卡夫链,这使得DDIM可以采用更小的采样步数来加速生成过程。
设计了两种方法来采样子序列方法,分别是:
线性法(Linear):采用线性的序列;T_i=[C*i]
平方法(Quadratic):采样二次方的序列;T_i=[C*i^2]
其中C是一个定数,其设置原则是使T[-1]接近T。下图为T=[1,3]的简单示例:

改进效果如何?
对比DDPM与DDIM的效果比较:

上表为不同的η下以及不同采样步数下的对比结果,可以看到DDIM(η=0)在较短的步数下就能得到比较好的效果,媲美DDPM(η=1)的生成效果。如果设置为50,那么相比原来的生成过程就可以加速20倍。

8.Sora的核心架构DiTs

DiTs的主要目的就是用Transformer架构替换DDPM中U-Net主干网络。DiTs架构如下:

DiT基于Vision Transformer(ViT)架构,该架构在块(patches)序列上运行。DiT保留了ViTs的许多最佳实践。

1.强化学习难入门的主要原因

目前强化学习运用非常广泛,如在大语言模型,自动化,游戏等领域都有广泛的应用,但想要入门,却不简单,不少人看了不少视频或博客或书,但如果要总结一下强化学习的核心内容,还是感到一头雾水。这好像是一个普通现象,个人觉得主要是因为:
(1)强化学习涉及很多新知识、新概念。
(2)强化学习涉及面较广
(3)强化学习中数学成分较多

2.如何破解强化学习难入门问题

这里提供个人的一点,供大家参考。

(1)找准着力点(或入口),这里基本算法(可参考Leecode网址)我觉得是一个较好着力点。
(2)从着力点开始,找到新旧知识的联系,从宏观上把握强化学习算法,这里我提供几个图,供大家参考。
(3)把握各算法之间的递进关系
(4)循序渐进,由宏观把握,再进入细节,甚至代码实现,强化学习的多种应用(如在在游戏方法,在GPT方法等到),然后再深入浅出。

3.强化学习几个重要概念的简单解释

(1)马尔科夫链
简单来说:随机过程+马尔科夫性=马尔科夫过程
马尔可夫过程(Markov Process)指具有马尔可夫性质的随机过程,也被称为马尔可夫链(Markov chain),【其中马尔可夫性类似于两两相扣的铁链,虽然是两两相扣,却能构成一个长长的铁链,把历史和现在连接在一起。】
(2)马尔可夫奖励过程
简单来说:马尔科夫过程+奖励=马尔科夫奖励过程
(3)回报
简单来说:回报就是所有奖励的折扣之和
(4)马尔科夫决策过程
简单来说:马尔科夫决策过程=马尔科夫过程+动作(由决策产生)
(5)策略
策略就是选择动作的概率。
(6)状态价值函数
状态价值函数就是策略获得的回报期望。
(7)同步策略与异步策略
我们称采样数据的策略为行为策略(behavior policy),称用这些数据来更新的策略为目标策略(target policy)。在同步策略(on-policy)(又称为在线策略)算法表示行为策略和目标策略是同一个策略,像SARSA、A2C等算法属于使用同步策略的算法。
而异步策略(off-policy)(又称为离线策略)算法表示行为策略和目标策略不是同一个策略。许多异步策略算法使用重放缓冲区来存储经验,并从重放缓冲区中采样数据以训练模型,Q-Learning、DQL等属于异步策略算法.
(8)自举
自举就是用估计进行估计。

4.由基本算法到强化学习算法

5.蒙特卡洛算法、动态规划算法、时序差分算法之间的异同

6.蒙特卡洛算法、动态规划算法、时序差分算法等算法的使用示例

7.由基于价值函数到基于策略的过渡

提供两个强化学习入门较优化的网址:
动手学强化学习
王树森老师讲解强化学习

2.1 Adam算法的优点

Adam算法一直是优化算法中优等生,它有很多优点,如下图所示:

adam
以Adam为代表的优化算法,能够避开鞍点最快抵达目标。传统SGD(不带动量)算法方法
容易受到外界干扰,其行走路线比较曲折。

2.2 Adam算法的表现不尽如人意

虽然Adam很多的优点(带有动量,学习率的自适应性),但在深度学习的很多数据集上的最好效果还是用SGD with Momentum细调出来的。可见Adam的泛化性并不如带有动量(Momentum)的SGD。【https://arxiV.org/pdf/1711.05101.pdf 】中提出其中一个重要原因就是Adam中L2正则化项并不像在SGD中那么有效。

2.3 Adam算法表现不佳的原因是什么?

Adam算法表现不佳的原因就是其梯度更新与权重衰减耦合在一起,如下图所示:

2.4 如何解决这个问题?

这是PyTorch平台给出的解决方案

2.5 AdamW算法的优点

在优化算法中,AdamW相对于Adam的改进主要表现在权重衰减的处理方式上。具体来说,AdamW在应用权重衰减时,将其与梯度更新解耦,避免了两者之间的耦合问题。这种改进的背后原因主要有以下几点:
(1)更稳定的优化过程:原始的Adam算法在权重衰减与梯度更新的耦合方式可能会导致优化过程中的不稳定。当权重衰减较大时,这种耦合可能导致梯度更新变得非常小,从而使得学习率变得非常慢。解耦后,梯度更新和权重衰减可以独立调整,从而使得优化过程更加稳定。
(2)避免不一致性:权重衰减与梯度更新的耦合可能导致算法的不一致性。当权重衰减变化时,它可能会影响到梯度的计算,这可能导致算法在优化过程中行为不一致。解耦后,权重衰减只作为一个单独的项来处理,避免了这种不一致性。
(3)更好的泛化性能:权重衰减作为一种正则化技术,有助于防止模型过拟合。通过解耦,AdamW可以更好地利用权重衰减的正则化效果,从而提高模型的泛化性能。
(4)更广泛的适用性:由于AdamW在权重衰减方面的改进,它可能更适合于一些需要较强正则化的场景。通过独立调整权重衰减和梯度更新,AdamW可以更好地适应不同的任务和数据集,从而提高算法的适用性。
(5)灵活的超参数调整:解耦后,可以更加灵活地调整超参数。例如,可以独立调整权重衰减和学习率,而不会相互影响。这为超参数调整提供了更大的灵活性,有助于找到最优的超参数配置。
总之,AdamW通过改进权重衰减的处理方式,提高了优化算法的稳定性、一致性和泛化性能,使其在各种机器学习任务中更具竞争力,能用Adam的地方可以都用AdamW来代替。

1.1大模型Emergent Abilities(新兴能力)现象

模型规模达到某个阈值时,模型对某些问题的处理性能呈现快速增长。这个过程类似于水加热到100度的过程。
目前一些大模型已达或接近这个阈值,个人觉得这些技术或方法功不可没:
一、软件方面
1.BP算法
2.注意力机制
3.强化学习
强化学习一大贡献就是弥补了传统机器学习评估标准的不足,传统机器学习一般基于损失函数进行评估,希望预测与标签的差平方(或两者的分布近似度)越小越好。这种评估方式是一种绝对值的近似,不利于输出多样性的结果。而强化学习采用奖励或评分的方式,看重的是输出与期望值的对齐程度。

4.大数据平台,如PyTorch,TensorFlow,及CUDA架构等
5.GEMM
二、硬件方面
GPU、TPU等地助力。

1.2 几种正助力拓展序列长度的几种算法

(1)FlashAttention,FlashAttention-2
FlashAttention从软件和硬件两个方面对Transformer模型进行优化,软件方面采用了分块、在线softmax,重计算(一种类似于Python迭代器的思路,用规则或算法表示数据,而不实际存在大数据);硬件方法,充分考虑了GPU的架构特点,如A100,H100等HBM,SRAM等优缺点。

HBM,SRAM等优缺点

(2)Learned、Relative、RoPE等位置编码方法

(3)多种注意力机制

1.3.各种大模型使用技术概览

下面我选择8个比较典型的大模型,统计了它们使用的一些技术,供大家参考。

————————————————
版权声明:本文为CSDN博主「wumg3000」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wumg3000/article/details/135242873

目录
第1章 AIGC概述
1.1 AIGC主要技术
1.2 生成模型与判别模型
1.3 生成模型的底层逻辑
1.4 表示学习
1.5 表示学习的逆过程
第2章 深度神经网络
2.1 用PyTorch构建深度神经网络
2.2用PyTorch从零开始实现神经网络
2.3用PyTorch-Lightning实现神经网络实例
2.4构建卷积神经网络
2.5 构建循环神经网络
2.6 迁移学习的基本原理
2.7 深度学习常用归一化方法
2.8 权重初始化
2.9 PyTorch常用的损失函数
2.10深度常用优化算法
第3章 变分自编码器
3.1自动编码器
3.2变分自动编码器
3.3构建变分自编码器
3.4实现变分自编码器
第4章 生成对抗网络
4.1 生成对抗网络简介
4.2 从零开始用GAN网络生成图像
4.3 GAN面临的问题
4.4 WGAN
4.5 WGAN-GP
第5章 StyleGAN模型
5.1 StyleGAN的前身ProGAN简介
5.2 StyleGAN架构
5.3 StyleGAN主要算法
5.4 用PyTorch从零开始实现StyleGAN
5.5 StyleGAN的最新进展
5.6 DragGAN简介
第6章 风格迁移
6.1 Deep Dream模型
6.2 风格迁移
6.3 使用PyTorch实现图像修复
6.4 风格迁移与StyleGAN模型
第7章 注意力机制
7.1注意力机制概述
7.2 带注意力机制的编码器-解码器架构
7.3自注意力
7.4如何训练含自注意力的模型?
7.5交叉注意力
第8章 Transformer模型
8.1 直观理解Transformer架构
8.2 用PyTorch从零开始实现Transformer
第9章 大语言模型
9.1大语言模型概述
9.2 可视化GPT原理
9.3 GPT-3简介
9.4可视化BERT原理
9.5 用PyTorch实现BERT
9.6 用GPT-2生成文本
第10章 ChatGPT模型
10.1 ChatGPT概述
10.2 人类反馈的强化学习
10.3 Codex
10.4 如何使LaTeX转换为自然语言?
10.5 使用PPO算法优化CartPole游戏
10.6使用RLHF算法提升GPT-2性能
10.7 ChatGPT如何提升思维链推断能力?
10.8 ChatGPT如何提升模型的数学逻辑推理能力?
第11章 扩散模型
11.1 扩散模型概述
11.2用PyTorch从零开始编写DDPM
第12章 多模态模型
12.1 CLIP简介
12.2 Stable Diffusion模型
12.3 从零开始实现Stable Diffusion
12.4 Stable Diffusion 升级版
12.5 DALL.E概述
附录:AIGC的数学基础
A矩阵基本运算
B 随机变量及其分布
C:信息论
D:推断
D.1极大似然估计
D.2 极大后验概率估计
D.3 EM算法
D.4变分推断
D.5马尔可夫链蒙特卡罗随机采样
E:强化学习
E.1 强化学习基本概念
E.2 强化学习基础算法
E.3策略梯度

第3章 ChatGPT简介

3.1ChatGPT厚积薄发

最近,工智能公司OpenAI推出的ChatGPT风靡全球,其上线仅两个月,注册用户破亿。ChatGPT包含丰富的知识,不仅能更好地理解人类的问题和指令,流畅进行多轮对话,还在越来越多领域显示出解决各种通用问题和推理生成能力。许多人相信,ChatGPT不仅是新一代聊天机器人的突破,也将为信息产业带来巨大变革,也预示着AI技术应用将迎来大规模普及。
ChatGPT表现不俗?其背后的技术有哪些?

3.2 从GPT到GPT-3

3.3 从GPT-3到ChatGPT的进化路线图

下图为从最初的GPT-3到GPT-3.5的进化路线图。
图1 GPT-3初版到ChatGPT的进化路线图
其中text—davinci—002是在code—davinci—002的基础上使用InstructGPT训练方法改进的。GPT-3.5在GPT-3的基础上加入了代码的能力,ChatGPT的代码训练中,很多数据来自于类似Stack Overflow这样一些代码问答的网站,所以我们会发现它做简单的任务其实做得还蛮好的。
从图1可知,GPT-3为ChatGPT打下了扎实的基础,但codex、RLHF等技术新增很多新功能,挖掘了GPT-3的潜力。

3.4 使GPT-3初版升级到ChatGPT的多项关键技术

从图1可知,这两项关键技术是代码训练(Codex)、RLHF及TAMER等
1、Codex
Codex 模型系列是 GPT-3 系列的后代,它经过了自然语言和数十亿行代码的训练。 该模型系列精通十几种语言,包括 C# JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL甚至Shell,但最擅长 Python。
你可以使用Codex完成各种任务,包括:
 将注释转换为代码
 在上下文中补全下一行代码或函数
 为你提供一些知识,例如为应用程序查找有用的库或 API 调用
 添加注释
 重写代码以提高效率
Codex如何训练的呢?
首先,在GITHub数据上预训练模型。这个模型可以合理地表征人类编码空间,可以极大地减少搜索量级。使用带tempering的GOLD目标函数,结合编程竞赛数据集,微调模型。可有进一步降低搜索空间,给每个编程题目生成一个较大的样本集;过滤这个样本集,得到一个较小的候选结果集。
然后,进行代码补全,代码补全这个任务的特殊性:具体来说,传统的NLP任务,生成的结果越接正确答案,那么模型得分越高,但是代码不是这样的,代码但凡有一点点小Bug,都可能造成毁灭性的结果。所以对于代码补全任务,判断生成代码的正确与否就是使用的单元测试(unit test)。
针对代码补全这样一个特殊问题,作者提出了一个pass@k的一个指标,生成k个结果,只要有一个通过就算通过(k如果比较大,就会对模型的能力过度乐观,当k比较大的时候,虽然模型分数比较高,但是在使用时,会给用户返回一大堆代码,让用户去选,这个也是很难的,所以说需要排算法,但这个分数并没有反映排序)。

评估Codex模型使用了Github及HumanEval等数据集。
在预训练过程中引入程序代码,和文本一起参与预训练,以此进一步增强大型语言模型(Large Language Model,LLM)的推理能力。这个结论从不少论文的实验部分都可以得出。如图3所示。
图3 有关codex的试验数据
从图3给出的实验数据,来自于论文“On the Advance of Making Language Models Better Reasoners”,其中GPT-3 davinci就是标准的GPT-3模型,基于纯文本训练;code-davinci-002(OpenAI内部称为Codex)是同时在Code和NLP数据上训练的模型。如果比较两者效果,可以看出,不论采用具体哪种推理方法,仅仅是从纯文本预训练模型切换到文本和Code混合预训练模型,在几乎所有测试数据集合上,模型推理能力都得到了巨大的效果提升。
2、RLHF
人类反馈强化学习(Reinforcement Learning from Human Feedback,RHFL)模型将预训练语言模型按照人类反馈进一步微调以符合人类偏好,利用人类反馈信息直接优化模型。Open AI 采用了人类反馈强化学习作为ChatGPT和核心训练方式,并称其是“能有效提升通用人工智能系统与人类意图对齐的技术”。RLHF 的训练包括三个核心步骤:
(1)预训练语言模型(也可以使用额外文本进行微调,监督微调新模型可以让模型更 加遵循指令提示,但不一定符合人类偏好)。
(2)对模型根据提示(prompt)生成的文本进行质量标注,由人工标注者按偏好从最 佳到最差进行排名,利用标注文本训练奖励模型,从而学习到了人类对于模型根据给定提 示生成的文本序列的偏好性。
(3)使用强化学习进行微调,确保模型输出合理连贯的文本片段,并且基于奖励模型 对模型输出的评估分数提升文本的生成质量。
详细过程如图4所示。
图4 RHFL的训练过程,
原图来自:Learning to summarize from human feedback
3、TAMER
TAMER(Training an Agent Manually via Evaluative Reinforcement,评估式强化人工训练代理)框架。该框架将人类标记引入到智能体(即强化学习中的Agents)的学习循环中,可以通过人类向Agents提供奖励反馈(即指导Agents进行训练),从而快速达到训练任务目标。其架构图如下所示。

3.5 ChatGPT训练过程

3.6 ChatGPT不断迭代的路线图


图5 ChatGPT不断迭代的路线图

3.7ChatGPT的不足

尽管ChatGPT在上下文对话能力甚至编程能力上表现出色,完成了大众对人机对话机器人由“人工智障”到“人工智能”的突破,我们也要看到,ChatGPT仍然有一些局限性,还需不断迭代进步。
(1)ChatGPT在其未经大量语料训练的领域缺乏“人类常识”和引申能力,甚至会一本正经的“胡说八道”。
(2)ChatGPT无法处理复杂冗长或者特别专业的语言结构。对于来自金融、自然科学或医学等专业领域的问题,如果没有进行足够的语料“喂食”,ChatGPT可能无法生成适当的回答。
(3)ChatGPT还没法在线的把新知识纳入其中,而出现一些新知识就去重新预训练GPT模型也是不现实的。
(4)训练ChatGPT需要耗费非常大量的算力,成本还是很大的。

3.8 ChatGPT应用场景

ChatGPT能够提供高效的信息获取方式,有望成为重要的生产工具,潜在应用领域广泛。业界普遍认为,ChatGPT将在智能办公、智慧科研、智慧教育、智慧医疗及游戏、新闻等领域迅速落地。在金融、传媒、文娱、电商等领域,ChatGPT可以为各类消费群体提供个性化、高质量的服务,解锁多领域智慧应用。

第2章 GPT-3简介

GPT-3依旧延续自己的单向语言模型训练方式,只不过这次把模型尺寸增大到了1750亿,并且使用45TB数据进行训练。同时,GPT-3主要聚焦于更通用的NLP模型,GPT-3模型在一系列基准测试和特定领域的自然语言处理任务(从语言翻译到生成新闻)中达到最新的SOTA结果。对于所有任务,GPT-3没有进行任何微调,仅通过文本与模型进行交互。与GPT-2相比,GPT-3的图像生成功能更成熟,不需经过微调,就可以在不完整的图像样本基础上补全完整的图像。GPT-3意味着从一代到三代的跨越实现了两个转向:
1.从语言到图像的转向;
2.使用更少的领域数据、甚至不经过微调步骤去解决问题。

2.1 预训练模型一般流程

一般预训练模型(如ELMo、BERT等)的流程如图1-23所示,其中微调是一个重要环节。

图1-23 预训练模型的一般流程

2.2 GPT-3 与BERT的区别

一般预训练模型中微调是一个重要环节,但GPT-3却无需微调,GPT-3与一般预训练模型(这里以BERT为例)还有很多不同之处,具体可参考图1-24。
图1-24 GPT-3 与BERT的区别

2.3 GPT-3与传统微调的区别

对下游任务的设置大致有以下四类:
1.Fine-Tunning(FT):
FT利用成千上万的下游任务标注数据来更新预训练模型中的权重以获得强大的性能。但是,该方法不仅导致每个新的下游任务都需要大量的标注语料,还导致模型在样本外预测的能力很弱。虽然GPT-3从理论上支持FT,但没有采用这种方法。
2.Few-Shot(FS)
模型在推理阶段可以得到少量的下游任务示例作为限制条件,但是不允许更新预训练模型中的权重。
3.One-Shot(1S)
模型在推理阶段仅得到1个下游任务示例。
4.Zero-Shot(0S)
模型在推理阶段仅得到一段以自然语言描述的下游任务说明。GPT-3与传统预训练模型对下游任务的处理方法的区别,可参考图1-25。

图1-25 传统微调与GPT-3采用的三种设置方法比较

2.4 GPT-3 示例

图1-26 为使用GPT-3 进行文本纠错的实例,从纠错结果来看,效果还是令人惊奇。
图1-26 GPT-3 进行文本纠错的实例

第1章 可视化GPT原理

BERT预训练模型采用了Transformer的Encoder部分,这节介绍的GPT(包括GPT-2、GPT-3)使用Transformer的Decoder部分。

1.1 GPT简介

GPT来自OpenAI的论文《Improving Language Understanding by Generative Pre-Training》,后来又在论文《Language Models are Unsupervised Multitask Learners》提出了 GPT-2 模型。GPT-2 与 GPT 的模型结构差别不大,但是采用了更大、更高质量的数据集进行实验。
GPT 是在 Google BERT算法之前几个月提出的,与 BERT 最大的区别在于,GPT和后来的一些模型,如TransformerXL和XLNet本质上是自回归(auto-regressive)模型,即使用单词的上文预测单词,而 BERT 不是,它采用使用MLM模型,同时利用单词左右来预测。因此,GPT 更擅长处理自然语言生成任务 (NLG),而 BERT更擅长处理自然语言理解任务 (NLU)。

1.2 GPT的整体架构

GPT 预训练的方式和传统的语言模型一样,通过上文,预测下一个单词,GPT的整体架构如图1-11所示。

图1-11 GPT的整体架构图
其中Trm表示Decoder模块,在同一水平线上的Trm表示在同一个单元,E_i表示词嵌入,那些复杂的连线表示词与词之间的依赖关系,显然,GPT要预测的词只依赖前文。
GPT-2根据其规模大小的不同,大致有4个版本,如图1-12所示。

图1-12 GPT-2的4种模型

1.3 GPT模型结构

GPT、GPT-2使用 Transformer的Decoder 结构,但对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention,如图1-13所示。

图1-13 GPT的模型结

1.4 GPT-2的Mult-Head与BERT的Mult-Head区别

BERT使用Muti-Head Attention ,可以同时从某词的左右两边进行关注。而GPT-2采用Masked Muti-Head Attention,只能关注词的右边,如图1-14所示。

图1-14 BERT与GPT-2的Multi-Head的异同

1.5 GPT-2的输入

GPT-2的输入涉及两个权重矩阵,一个是记录所有单词或标识符(Token)的嵌入矩阵(Token Embeddings),该矩阵形状为mode_vocabulary_size xEmbedding_size,另一个为表示单词在上下文位置的编码矩阵(Positional Encodings),该矩阵形状为:context_sizexEmbedding_size,其中Embedding_size根据GPT-2模型大小而定,SMALL模型为768,MEDIUM为1024,以此类推。输入GPT-2模型前,需要把标识嵌入加上对应的位置编码,如图1-15所示。

图1-15 GPT-2 的输入数据
在图1-15中,每个标识的位置编码在各层DECODER是不变的,它不是一个学习向量。

1.6 GPT-2 计算Masked Self-Attention的详细过程

假设输入语句为:"robot must obey orders",接下来must这个query对其它单词的关注度(即分数),主要步骤:
(1)对各输入向量,生成矩阵Q、K、V;
(2)计算每个query对其它各词的分数;
(3)对所得的应用Mask(实际上就是乘以一个下三角矩阵)
详细步骤如下:
1.创建矩阵Q、K 、V
对每个输入单词,分别与权重矩阵W^Q,W^K,W^V相乘,得到一个查询向量(query vector)、关键字向量(key vector)、数值向量(value vector),如图1-16所示。

图1-16 生成self-Attention中的K,Q,V
2.计算每个Q对Key的得分
对每个Q对Key的得分计算公式,如图1-17所示。

图1-17 Q对key得分的计算过程
3.对所得的分数应用Mask
对所得分再经过Attention Mask的映射,如图1-18所示。

图1-18 得分经过Mask示意图
4.Mask之后的分数通过softmax函数
经过Mask后的分数通过softmax后的结果如图1-19所示。

图1-19 得分通过softmax后
5.单词must(即q2)对各单词的得分为:
q2对各单词的得分,如图1-20所示。

图1-20 q2对各词的得分

1.7 输出

在最后一层,对每个词的输出乘以Token Embedding矩阵(该矩阵的形状为mode_vocabulary_size xEmbedding_size,其中Embedding_size的值根据GPT-2的型号而定,如果是SMALL型,就是768,如果是MEDIUM型,就是1024等),最后经过softmax函数,得到模型字典中所有单词的得分,通过取top取值方法就可得到预测的单词,整个过程如图1-21所示。

图1-21 GPT-2的输出

1.8 GPT与GPT-2的异同

在GPT的基础上,后面又开发出GPT-2,两者架构上没有大的变化,只是对规模、数据量等有些不同,它们之间的异同如下:
1.结构基本相同,都采用LM模型,使用Transformer的DECODER。
2.不同点:
(1)GPT-2结构的规模更大,层数更大。
(2)GPT-2数据量更大、数据类型更多,这些有利于增强模型的通用性,并对数据做了更多质量过滤和控制。
(3)GPT对不同的下游任务,修改输入格式,并添加一个全连接层,采用有监督学习方式,如图1-22所示。而GPT-2对下游采用无监督学习方式,对不同下游任务不改变参数及模型(即所谓的zero-shot setting)。

图1-22(左)Transforer的架构和训练目标,(右)对不同任务进行微调时对输入的改造。
GPT如何改造下游任务?微调时,针对不同的下游任务,主要改动GPT的输入格式,先将不同任务通过数据组合,代入Transformer模型,然后在模型输出的数据后加全连接层(Linear)以适配标注数据的格式,具体情况大致如下:
1.分类问题,改动很少,只要加上一个起始和终结符号即可;
2.句子关系判断问题,比如Entailment,两个句子中间再加个分隔符即可;
3.文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
4.多项选择问题,则多路输入,每一路把文章和答案选项拼接作为一个输入即可。
从图1-22可看出,这种改造还是很方便的,不同任务只需要在输入部分改造即可,所以GPT-2、GPT-3 对不同下游任务基本不改过参数和模型方式。

5.3.5 EM算法的收敛性
要证明通过迭代法求得的参数\{\theta _{t}\}收敛于极值点,如果能证明对应的似然函数\mathcal L(\theta_t)收敛即可。要证明似然函数收敛,因似然函数\mathcal L(\theta)有上界,如果能证明通过迭代,似然函数递增,则\mathcal L(\theta_t)收敛于极值点。
假设第t次迭代时的参数为\theta_{t},通过t+1次迭代后参数为\theta_{t+1},接下来证明 \mathcal L(\theta_{t+1})\geq \mathcal L(\theta_{t})
由式(5.13)可得:
运算结果与隐变量z_i无关,是一个常数,根据Jensen不等式可知,式(5.12)中作为第t次迭代的结果,即把\theta视为\theta_{t}Q_i(z_i)改为Q_{it}(z_i),则其中不等式可以取等号,即有:
似然函数与其下界函数之间的关系,可以通过图5-10直观表示。
图5-10 EM算法中目标函数与下界函数的之间的关系

5.3.4 EM算法推导

通过构建目标函数的下界函数来处理隐含变量的似然函数,该下界函数更容易优化,并通过求解下界函数的极值,构造新的下界函数,通过迭代的方法,使下界函数收敛于局部最优值。
假设概率分布p(x|\theta)生成可观察样本为X=\{x_1,x_2,\cdots,x_n\},这n个样本互相独立,以及无法观察的隐含数据为Z=\{z_1,z_2,\cdots,z_n\},\{X,Y\}构成完整数据,样本的模型参数为\theta。完整数\{x_i,z_i\}的似然函数为:p(x_i,z_i|\theta)
下界函数通过隐变量的概率分布构造,对每个样本x_i,假设Q_i为隐变量z_i的一个概率密度函数,它们满足概率的规范性,即有:
 \sum_{z_i}Q_i(z_i)=1,Q_i(z_i) \geq 0
利用隐变量的概率分布,对原来的对数似然函数进行恒等变形。
根据随机变量函数的数学期望的定义可得:
把数学期望E看成是关于Q_i(z_i)概率的期望,由式(5.10)可得:
由式(5.10)、(5.11)可得:
式(5.12)为似然函数\mathcal L(\theta)下界函数,满足条件的下界函数有很多。因为EM是迭代算法,并且是求下界函数的极值点来找到下一步迭代的参数\theta,设\theta_t为第t次迭代时参数的估计值。
如何取在\theta_t处下界函数?当然与似然函数\mathcal L(\theta)越接近越好,所以我们希望(5.12)式在\theta_t 这个点能取等号。由Jensen不等式可知,等式成立的条件是随机变量是常数,故在\theta_t点处有:
所以
由此可知,Q_i(z_i)实际上就是隐变量z_i的后验概率p(z_i|x_i,\theta_t)
p(z_i|x_i,\theta_t)表示Q_i(z_i)代入 \mathcal L(\theta)的下界函数中,得:
\mathcal L(\theta)的下界函数中求极大值为下次迭代的参数值?_{t+1},即有:
到这来EM算法的推导就结束了。

下面给出EM算法的具体步骤:
(1) 初始化参数\theta_{0},然后开始循环迭代,第t次迭代的分为两步,即E步和M步。
(2) E步:
基于当前参数估计值\theta_{t},构建目标函数。
具体包括计算给定样本时对隐变量z的条件概率,即
Q_{it}(z_i)=p(z_i|x_i,\theta_t)\tag{5.13}
然后计算Q(\theta,\theta_t)函数。
(3) M步
Q(\theta,\theta_t)函数的极大值,更新参数为\theta _{t+1}.
\theta_{t+1}= \underset{\theta}{argmax} Q(\theta,\theta_t)\tag{5.14}
迭代第(2)和(3)步,直到参数\theta _{t}收敛或到指定的阈值。