| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> NLP入门系列1:attention和transformer -> 正文阅读 |
|
[人工智能]NLP入门系列1:attention和transformer |
NLP入门系列1:attention和transformer1.Attention1.1 Seq2Seq模型Seq2Seq模型,从字面意思上很容易理解:序列to序列模型,接收的输入是一个(单词、字母、图像特征)序列,输出是另外一个序列。seq2seq模型结构在很多任务上都取得了成功,如:机器翻译、文本摘要、图像描述生成。 这种方式有一个很明显的问题,不论我们的输入序列有多大,编码器总是只会生成一个context,这样,序列中所有元素的信息都混合在了一起,并没有进行区分。直观的来理解,当序列较长时,该模型的效果并不会很好。这时候,另一个划时代的产品诞生了。 1.2 AttentionAttention is allllllllll you need!(破音)
在 Bahdanau等2014发布的Neural Machine Translation by Jointly Learning to Align and Translate 和 Luong等2015年发布的Effective Approaches to Attention-based Neural Machine Translation提出了attention机制,2017 年,Google 机器翻译团队发表的《Attention is All You Need》中,完全抛弃了RNN和CNN等网络结构,而仅仅采用Attention机制来进行机器翻译任务,并且取得了很好的效果,注意力机制也成为了大家近期的研究热点。 一个注意力模型不同于经典的序列到序列(seq2seq)模型,主要体现在 2 个方面: 首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态)(对于上文的seq2seq模型来说,该hidden state就是encoder传递给decoder的整体的context):
下图,我们使用另一种方式来可视化注意力,看看在每个解码的时间步中关注输入句子的哪些部分:
当然,通过上图,我们很明显能发现另一个问题,待翻译句子是三个单词,但是翻译出来却是四个单词,如果模型只是简单的对单词进行一一对应,这个“a”的出现就比较奇怪。由此很容易的想到另一个问题,中文和英文不仅仅不是一一对应,甚至语序都会有变化,那么机器是怎么翻译的呢? 其实,注意力模型不是无意识地把输出的第一个单词对应到输入的第一个单词。实际上,它从训练阶段学习到了如何在两种语言中对应单词的关系(在我们的例子中,是法语和英语)。下图展示了注意力机制的准确程度(图片来自于上面提到的论文): 2. Transformer
在理解了attention之后,就可以开始学习transformer了,Transformer 依赖于 Self Attention 的知识。2017 年,Google 提出了 Transformer 模型,用 Self Attention 的结构,取代了以往 NLP 任务中的 RNN 网络结构,在 WMT 2014 Englishto-German 和 WMT 2014 English-to-French两个机器翻译任务上都取得了当时 SOTA( state-of-the-art ) 的效果。 上面列举的这个图,只不过是吧transformer的结构拆解开来了,我们从transformer的整体开始一步步来拆解该模型,就好理解许多。以机器翻译的例子,从总体来看一下transformer。我们把待翻译的句子输入transformer,然后就输出了翻译结果,这和我们平时使用机器翻译的流程是一样的。
输入编码器的文本数据,首先会经过一个 Self Attention 层,这个层处理一个词的时候,不仅会使用这个词本身的信息,也会使用句子中其他词的信息(可以理解为:当我们翻译一个词的时候,不仅会只关注当前的词,也会关注这个词的上下文的其他词的信息,如何使用的方法会在拆解Self Attention的时候具体介绍 )。 接下来,Self Attention 层的输出会经过前馈神经网络(FFNN)。 同理,解码器也具有这两层,但是这两层中间还插入了一个 Encoder-Decoder Attention 层,这个层能帮助解码器聚焦于输入句子的相关部分(Encoder的输出便是直接输入该层,该结构也会在后面详细展示,由于transformer的细节很多,在拆解的过程中,很容易失去整体性,建议在拆解完成后,再看一下transformer介绍开头的结构图,会有豁然开朗的感觉)。 2.1 Self-Attention2.1.1 Self-Attention的作用假设我们想要翻译的句子是:
这个句子中的 it 是一个指代词,那么 it 指的是什么呢?它是指 animal 还是street?这个问题对人来说,是很简单的,但是对算法来说并不是那么容易。当模型在处理(翻译)it 的时候,Self Attention机制能够让模型把it和animal关联起来。 同理,当模型处理句子中的每个词时,Self Attention机制使得模型不仅能够关注这个位置的词,而且能够关注句子中其他位置的词,作为辅助线索,进而可以更好地编码当前位置的词。 2.1.2 Self-Attention的具体结构Attention Score计算 注意,这 3 个新得到的向量一般比原来的词向量的长度更小。假设这 3 个向量的长度是
d
k
e
y
d_{key}
dkey?,而原始的词向量或者最终输出的向量的长度是 512(这 3 个向量的长度,和最终输出的向量长度,是有倍数关系的)。本例是只有一个 head 的 Self-Attention计算过程。
接下来,我们要使用这三个向量计算每个单词的注意力分数(attention score),这里有个小tip:每个单词都有需要计算一个注意力分数。假设我们现在计算第一个词 Thinking 的 Attention Score(注意力分数),需要根据 Thinking 这个词,对句子中的其他每个词都计算一个分数。这些分数决定了我们在编码Thinking这个词时,需要对句子中其他位置的每个词放置多少的注意力。 这些分数,是通过计算 “Thinking” 对应的 Query 向量和其他位置的每个词的 Key 向量的点积,而得到的。如果我们计算句子中第一个位置单词的 Attention Score(注意力分数),那么第一个分数就是
q
1
q_1
q1??和
k
1
k_1
k1??的内积,第二个分数就是
q
1
q_1
q1?? 和
k
2
k_2
k2?? 的内积。 得到每个位置的分数后,将每个分数分别与每个位置词的 Value 向量相乘。对于分数高的位置,相乘后的值就越大,我们把更多的注意力放到了它们身上;对于分数低的位置,相乘后的值就越小,这些位置的词可能是相关性不大的,这样我们就忽略了这些位置的词。一个显而易见的结果是,thinking肯定对自己添加了更多注意力,但是,在例子“The animal didn’t cross the street because it was too tired”中的"it",就是在animal中添加了更多的注意力。 以下,是一个head的self-attention的完整计算过程。 用矩阵计算 Attention Score 然后,我们可以将上述的一个head的self-attention的计算过程压缩为一步来处理 2.2 multi-head attention(多头注意力机制)Transformer 的论文通过增加多头注意力机制(一组注意力称为一个 attention head),进一步完善了 Self Attention 层。这种机制从如下两个方面增强了 attention 层的能力:
接着,我们把每组 K, Q, V 计算得到每组的 Z 矩阵,就得到 8 个 Z 矩阵。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 19:55:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |