Transformer模型与ChatGPT技术分析
Transformer模型与ChatGPT技术分析
Transformer:让ChatGPT站在肩膀上的巨人?
ChatGPT以近乎狂热之势席卷了全网。在沉浸于“ChatGPT潮”的同时,让我们也来深入了解一下它和基石技术 - 大模型 Transformer吧。
Transformers是可以被设计用来翻译文本、写诗和文章的模型,甚至可以生成计算机代码。很多备受瞩目的模型就是基于Transfomer, 如风靡全网的ChatGPT, AlphaFold 2(这个模型可以根据蛋白质的基因序列预测其结构),以及其他强大的自然语言处理(NLP)模型,如GPT-3、BERT、T5、Switch、Meena等等。
如果你想在机器学习,特别是NLP方面跟上时代的步伐,那么至少要对Transformers有一定的了解。因此,在这篇文章中,我们将讨论Transformers是什么,它们如何工作,以及它们为什么如此有影响力。
Transformers是神经网络架构的一种类型。简而言之,神经网络是一种非常有效的模型类型,用于分析图像、视频、音频和文本等复杂数据类型。但有不同类型的神经网络为不同类型的数据进行优化。例如,对于分析图像,我们通常会使用卷积神经网络[1]或 “CNNs”。其实可以说它们模仿了人脑处理视觉信息的方式。
卷积神经网络,由Wikicommons的Renanar2提供
而自2012年[2]左右开始,我们在用CNN解决视觉问题方面已经相当成功,比如识别照片中的物体、识别人脸和手写数字。但在很长一段时间里,没有任何类似的好方法存在于语言任务(翻译、文本总结、文本生成、命名实体识别等)的处理中。这是不幸的,因为语言是我们人类交流的主要方式。
在2017年出现Transformers之前,我们使用深度学习来理解文本的方式是使用一种叫做循环神经网络或RNN的模型:
RNN的图片,由Wikimedia提供
比方说,你想把一个英语句子翻译成法语。RNN会把英语句子作为输入,一次处理一个词,然后按顺序输出它们的法语对应词。这里的关键是“按顺序”。在语言中,单词的顺序很重要,不能随便更改。
"Jane went looking for trouble."
上面这句话与下面下面这句话的意思完全不同。
"Trouble went looking for Jane."
因此,任何要理解语言的模型都必须捕捉到单词的顺序,而递归神经网络(recurrent neural networks)通过一次处理一个单词的方法来做到这一点。
但是,RNN也存在很多问题。首先,它们在处理大型文本序列时很吃力,比如长段文本或文章。当到了一个段落的结尾时,它们会忘记开头发生了什么。例如,一个基于RNN的翻译模型可能难以记住一个长段落的主题。
更糟的是,RNNs很难训练。它们很容易受到所谓的梯度消失/膨胀问题[3]影响(有时你只需重新开始训练,然后祈祷)。更麻烦的是,由于它们是按顺序处理单词,RNNs很难达到并行化。这意味着你不能通过使用更多的GPU来加快训练,这反过来意味着你不能在所有的数据上训练它们。
01 进入Transformers的世界
Transformers是由谷歌和多伦多大学的研究人员在2017年开发的,最初是为了做翻译。但与递归神经网络(RNN)不同,Transformers可以非常有效地进行并行化操作。这意味着,如果有合适的硬件条件,你可以训练一些真正的大模型。
多大的大模型?
非常大。
如果要说一件关于 Transformers 的事情,那应该会是:将一个具有良好扩展性的模型与一个巨大的数据集相结合,其结果可能会让你大吃一惊。
02 Transformers是如何工作的?
原始论文中的Transformer示意图
虽然原始论文[4]的图表有点吓人,但Transformer背后的创新可以归结为三个主要概念。
- Positional Encodings位置编码
- Attention注意力
- Self-Attention自注意力
2.1
让我们从第一个——位置编码开始介绍。比方说,我们正试图将文本从英语翻译成法语。RNNs,即用AI进行文本翻译的老方法,通过按顺序处理单词来理解词序。但这也是使它们难以并行化的原因。
Transformers通过一种叫做位置编码的创新方法绕过了这个障碍。这个想法是把你的输入序列中的所有单词(在这个例子中是一个英语句子)用它的顺序给每个单词附加一个数字。因此,要给你的网络提供一个序列,如:
[("Dale", 1), ("says", 2), ("hello", 3), ("world", 4)]
从概念上讲,你可以认为这是把理解词序的负担从神经网络的结构转移到数据本身。
起初,在Transformers对任何数据进行训练之前,它不知道如何解释这些位置编码。但随着模型看到越来越多的句子及其编码的例子,它学会了如何有效地使用它们。
我在这里做了许多简化——原作者是使用正弦函数来进行位置编码,而不是简单的整数1、2、3、4,但重点是一样的。将词序存储为数据,而不是结构,这样神经网络就变得更容易训练了。
2.2
Transformers的下一个重要部分叫做注意力。
注意力是一种神经网络结构,如果你在学习机器学习,你就能够经常听到。事实上,2017年介绍Transformers的论文的标题并不叫《We Present You the Transformer》。相反,它被称为 “Attention is All You Need”。
注意力[5]是在论文的两年前,即2015年,在文本翻译的背景下引入的。为了理解它,请看原始论文中的这个例句。
The agreement on the European Economic Area was signed in August 1992.
现在想一下,将这句话翻译成法语的相应内容:
L’accord sur la zone économique européenne a été signé en août 1992.
翻译这句话的一个坏方法是:通过英语句子中的每个单词找到其法语的对应词,一次一个单词。这样做效果并不好,原因有几个。首先,法语翻译中的一些词被颠倒了:英语是 “European Economic Area”,而法语是 “la zone économique européenne”。另外,法语是一种带有性别色彩的语言。形容词 “économique” 和 “européenne” 必须采用阴性形式,以配合阴性对象 “la zone”。
注意力(Attention)是一种机制,允许文本模型在决定如何翻译输出句子中的单词时 “查看” 原句中的每一个单词。这里有该过程的可视化图片,来自那篇关于注意力的论文。
原图来自论文《Neural Machine Translation by Jointly Learning to Align and Translate (2015)》
这是一种热力图,显示了模型在输出法语句子中的每个词时 “关注” 的地方。正如我们想要的那样,当模型输出 “européenne” 这个词时,它重点关注了 “European”和 “Economic”这两个输入词。
那么,模型是如何知道它在每个步骤中应该 “关注”哪些词的呢?这是从训练数据中学习到的东西。通过看到数以千计的法语和英语句子的例子,该模型学会了哪些类型的词是相互依赖的。它学会了如何遵循词性别、复数和其他语法规则。
自2015年出现以来,注意力机制一直是自然语言处理的一个非常有用的工具,但在其原始形式下,它是与递归神经网络一起使用的。所以,2017年Transformers论文的创新之处在于,在某些部分完全抛弃了RNN。这就是为什么2017年的论文被称为 “Attention is all you need”。
2.3
Transformers的最后一部分(也许是最有影响的一部分)是对注意力的一种改变,称为 “自注意力”。
我们刚才谈到的那种注意力有助于在英语和法语句子中对齐单词,这对翻译很重要。但是,如果你不是要翻译单词,而是要建立一个能够理解语言中潜在意义和模式的模型——一种可以用来完成任何数量的语言任务的模型,那该怎么办呢?
一般来说,使神经网络变得强大、令人激动和酷的原因是它们通常会自动建立它们所训练的数据的有意义的内部表示。例如,当你检查视觉神经网络的各层时,你会发现有几组神经元可以“识别”边缘、形状,甚至像眼睛和嘴巴这样的高级结构。一个根据文本数据训练的模型可能会自动学习语篇、语法规则,以及单词是否是同义词。
一个神经网络学习的语言内部表征越好,它在任何语言任务中的表现就越好。而事实证明,如果把注意力放在输入文本本身上,它可以是一个非常有效的方法。
以这两句话为例。
“Server, can I have the check?”
“Looks like I just crashed the server.”
server这个词在这里有两种截然不同的意思,我们人类可以通过观察周围的词来轻易地将其区分开来。自注意力允许神经网络在它周围的词的背景下理解一个词。
因此,当一个模型处理第一句中的 “server”一词时,它可能会注意到“check”一词。
在第二句中,该模型可能会注意到 “crashed”这个词,以确定“server”是指一台机器。
自注意力有助于神经网络区分单词、进行语篇标记、实体解析、学习语义角色以及更多[6]。
如果你想了解更深入的技术解释,我强烈建议你看看Jay Alammar的博文:http://jalammar.github.io/illustrated-transformer/。
03 Transformers能做什么?
BERT是最受欢迎的基于Transformers的模型之一,是 “Bidirectional Encoder Representations from Transformers” 的简称。它是由谷歌的研究人员在2018年推出的,并很快进入了几乎所有的NLP项目(包括谷歌搜索[7])。
BERT指的不仅仅是一种模型架构,而是一个经过训练的模型本身,你可以在这里(https://github.com/google-research/bert)免费下载和使用它。它是由谷歌的研究人员在一个巨大的文本语料库上训练出来的,并且已经成为NLP的瑞士军刀,可以扩展解决一堆不同的任务,比如。
文本总结
- 问题回答
- 文本分类
- 命名实体解析
- 文本相似性
- 攻击性/冒犯性语言检测
- 了解用户查询内容
- ...
BERT证明,你可以在无标签的数据上进行训练来创建比较好的语言模型,比如从维基百科和Reddit收集的文本,然后这些大型 “基础”模型可以用特定领域的数据来适应许多不同的使用情况。
由OpenAI创建的模型GPT-3[8],其生成文本的能力有目共睹。(编者:最近爆火的ChatGPT也有Transformer的功劳!)。谷歌研究院推出的Meena[9]是一款基于Transformers的聊天机器人(akhem,“conversational agent”),可以就几乎任何话题进行对话(本文作者曾经花了20分钟与Meena争论什么是人类)。
Transformers也在NLP之外掀起了波澜,它可以谱写音乐,通过文本描述中生成图像,并预测蛋白质结构。
参考资料
- https://en.wikipedia.org/wiki/Convolutional_neural_network
- https://qz.com/1034972/the-data-that-changed-the-direction-of-ai-research-and-possibly-the-world/
- https://towardsdatascience.com/the-exploding-and-vanishing-gradients-problem-in-time-series-6b87d558d22
- https://arxiv.org/abs/1706.03762
- https://arxiv.org/pdf/1409.0473.pdf
- https://arxiv.org/abs/1905.05950
chatGPT原理剖析之Transformer
上次我们只是大概性的了解了下chatGPT,今天我们的任务是更进一步地去认识它的内部世界。
Transformer是chatGPT非常复杂的一个内部结构,大话这个主题,真是有些挑战,至少要自己必须理解它。好在我在5年前,研习过另外一个语言模型Bert,这也是GOOGLE的重磅产品,它的内部就是采用的Transformer,并且也是他们提出的Transformer。这次因为chatGPT的大火,我又将其研读了一次。上次研读时,Transformer算是非常新的概念了,所能看的资源比较少,特别是国内的资料更是少。这次研读时发现国内有了很多对国外解读的翻译,便是方便了很多。
估计你我都不是搞这个专业的,于是我尽可能地用大白话去说,你就将就着听咯。下面我们开始。
Transforme是GOOGLE,这位IT界的领头羊贡献的语言模型,下面我引用百科的定义:
Transformer模型(直译为“变换器”)是一种采用自注意力机制的深度学习模型,这一机制可以按输入数据各部分重要性的不同而分配不同的权重。该模型主要用于自然语言处理(NLP)与计算机视觉(CV)领域。与循环神经网络(RNN)一样,Transformer模型旨在处理自然语言等顺序输入数据,可应用于翻译、文本摘要等任务。
重点的词,我用红色标了出来,下面的任务是让我们先以最快的速度解决掉这几个概念。
首先,我们来看深度学习模型,正如上面的图示,深度学习模型就是一个非常复杂的网络结构,它将样本输入后经过复杂的处理,然后去学习样本的特征,再根据样本的特征信息来识别新的文字或图像。
然后,我们来看循环神经网络(RNN),它是神经网络中的一种。如上图所示,它是一个顺序结构,即一步一步地处理输入的数据。用个表达式就可以如下图所示:
即在当前状态下,有了新的输入,产生新的状态出来。正因为这种模型不能并行处理,所以非常不适合当今训练大数据的需求。但它非常符合我们思维方式,如下面所示用来做翻译时的场景,是不是非常符合我们内心中的翻译过程呢?
还有两处标红的概念,我们先不做解释,等你看完了文章自然就明白了,之所以标红是因为它们就是Transformer的特色,你需要在心中先记住它们。
下面我们将进入Transformer的内部来看个究竟,我们来看下面这张图:
这张复杂的让人不由得恐惧的图,所示的就是Transformer的内部。为了更加直观一些,我们将它分成输入,输出,处理过程3个部分。
在输入端,我们再来看下面这个图:
注意的是我们输入的词不是原样送进入处理的,首先要经过编码,编码的过程就是上面的图示,最终得到一个输入矩阵。词的Embedding是由某种预训练得到,主要是把单词转换成相应的向量,比如:queen=king-man+woman。位置Embedding,GOOGLE采用了下面的公式得到:
将单词的词 Embedding 和位置 Embedding 相加,就可以得到单词的表示向量 x,x 就是 Transformer 的输入。
在输出端就是它的输出了,如果是翻译那就是翻译后的结果,这没有什么好说的了。
下面的我们重点是处于中间的处理部分。首先我们将处理部分分成Encoder层和Decoder层。看下图:
在Encoder层,输入编码器的文本数据,在处理过程中带上了全局信息,即上下文信息,这有助于关联当前词和其他词。
在Decoder层,被编码的信息被层层解码,通过联系上下文,从词库中找到那个最高概率的翻译词出来,这样这个词就被翻译了。
注意这里给出的RNN的串行结构,实际中应该是并行的,看下图所示:
现在我们将镜头再离中间处理部分进一些,我们来看看它中间的那些部件。看下图:
这是一个Encoder的内部,它包含一个自注意力机制和一个前馈神经网络。
首先来看自注意力机制,看下图:
左边是一个注意力机制,由边是多头注意力机制,在Transformer中是多头的。我们先看单头的,它其实就是一个公式,公式如下:
大体上解释下上面的公式,Q,K,V是我们通过将词的Embedding值与WQ,WK,WV相乘的结果,WQ,WK,WV则是我们要训练的参数,原始值可以给个随机数。如果忽略激活函数 softmax 的话,那么事实上它就是三个 n×dk,dk×m,m×dv 的矩阵相乘,最后的结果就是一个 n×dv 的矩阵。即Q跟K的相关度,再乘上一个放大,缩小值V,这样就会将相关的放大,不相关的缩小。softmax函数用来归一化,就是让它们统一到统一个维度和尺度,下面除去的那个值,则是起到调节作用,防止出格。比如,下面引自网络的例子:
首先,根据公式我们算出了Thinking这个词跟自己和其他词的相关度,最后将这些值相加,就得到了这个词的自注意力值,即图中的Z1。
上面是单头的情况,如果是多头,就如下所示的情况,跟上面相比只是多个几个层而已,单个的自注意力机制是相同的。
下面这个例子更加直观的可以看出自注意力机制的作用,如下图所示:
当输入The animal didn’t cross the street because it was too tired时,我们想让机器知道其中的it指代的是什么?从上图中我们看到,模型通过自注意力机制,分析出了这里的it与The animal最为相关,另外一个是tried,根据The animal跟it的属性相同,就可以断定it就是指代的The animal。上面展示的是8个自注意力机制的情况,通过每个自注意力机制的关注度不同,我们可以得到更多的维度,因为每个自注意力机制的权重矩阵是不同的。这样我们的模型就具备了上下文相关的特性,让模型的输出内容更为连贯。说完了自注意力机制,剩下的内容就是前馈神经网络了,它用来不断地优化我们训练的参数,让模型更智能。即,自注意力机制处理后的数据被送到前馈神经网络中,在这里评估我们的处理结果,根据评估结果,更新我们的参数。最后,在Decoder端也具有这两层,但是这两层中间还插入了一个 Encoder-Decoder Attention 层,这个层能帮助解码器聚焦于输入句子的相关部分。这篇文章省略了一些复杂的细节,所以更适合我们用于了解Transformer,所分析的是17年由GOOGLE提供的论文内容,不清楚如今的chatGPT是否有些改动,估计改动不大吧。
参考文献:《Attention Is All You Need》链接地址:https://arxiv.org/abs/1706.03762Transformer 模型详解 - 简书 (jianshu.com)图解Transformer(完整版)!- 腾讯云开发者社区-腾讯云 (tencent.com)一文读懂「Attention is All You Need」| 附代码实现-阿里云开发者社区 (aliyun.com)The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)
参考文献链接
https://mp.weixin.qq.com/s/gplDAetjvWot743n4ikz3A
https://mp.weixin.qq.com/s/Xir675qmOxod22DrJOqK1A
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-04-11 OpenCL与Cuda技术
2021-04-11 人工智能信息图
2021-04-11 NVIDIA DGX SUPERPOD 企业解决方案
2020-04-11 将视频插入视频:CVPR2019论文解析
2020-04-11 全景分割:CVPR2019论文解析
2020-04-11 2.5D Visual Sound:CVPR2019论文解析