| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【NLP】Seq2Seq与Attention(Neural Machine Translation by Jointly Learning to Align and Translate)回顾 -> 正文阅读 |
|
[人工智能]【NLP】Seq2Seq与Attention(Neural Machine Translation by Jointly Learning to Align and Translate)回顾 |
背景Seq2Seq可以使用统计的方式、规则的方式去应对。在印象中,Attention的出现也是从Seq2Seq任务中出现的,在论文:Neural Machine Translation by Jointly Learning to Align and Translate中发表,可以看看该论文中的section2、section3. 具有注意力的 Seq2seq 模型的机制这部分参考了文章:Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention) 序列到序列模型是一种采用一系列项目(单词、字母、图像特征等)并输出另一个项目序列的模型。一个训练有素的模型会像这样工作: 由编码器与解码器组成的模型编码器处理输入序列中的每个token,它将捕获的信息编译成一个向量(称为上下文)。处理完整个输入序列后,编码器将上下文发送到解码器,解码器开始逐项生成输出序列。 按照设计,RNN 在每个时间步都有两个输入:一个输入(在编码器的情况下,输入句子中的一个词)和一个隐藏状态。然而,这个词需要用一个向量来表示。要将单词转换为向量,我们求助于称为“单词嵌入”算法的一类方法。这些将单词转换为向量空间,捕获单词的大量含义/语义信息。 现在我们已经介绍了我们的主要向量/张量,让我们回顾一下 RNN 的机制并建立一种视觉语言来描述这些模型: 下一个 RNN 步骤采用第二个输入向量和隐藏状态 #1 来创建该时间步的输出。在后面的文章中,我们将使用这样的动画来描述神经机器翻译模型中的向量。 在下面的可视化中,编码器或解码器的每个脉冲都是 RNN 处理其输入并为该时间步生成输出。由于编码器和解码器都是 RNN,每一步 RNN 都会进行一些处理,它会根据其输入和之前看到的输入更新其隐藏状态。 让我们看看编码器的隐藏状态。注意最后一个隐藏状态实际上是我们传递给解码器的上下文。
现在让我们看看另一种可视化序列到序列模型的方法。该动画将更容易理解描述这些模型的静态图形。这称为“展开”视图,我们不显示一个解码器,而是为每个时间步显示它的副本。这样我们就可以查看每个时间步的输入和输出。 Attention的使用事实证明,上下文向量是这些类型模型的瓶颈。这使得模型处理长句子变得具有挑战性。Bahdanau et al., 2014 和 Luong et al., 2015 提出了一个解决方案。这些论文引入并改进了一种称为“注意力”的技术,它极大地提高了机器翻译系统的质量。Attention 允许模型根据需要关注输入序列的相关部分。
让我们继续研究这种高度抽象的注意力模型。注意力模型在两个主要方面不同于经典的序列到序列模型: 其次,注意力解码器在产生其输出之前会执行额外的步骤。为了关注与此解码时间步长相关的输入部分,解码器执行以下操作:
该评分练习在解码器端的每个时间步进行。现在让我们在下面的可视化中把整个事情放在一起,看看注意力过程是如何工作的: 1.注意力解码器 RNN 接受 标记的嵌入和初始解码器隐藏状态。 请注意,该模型不仅仅是将输出的第一个词与输入的第一个词对齐。它实际上从训练阶段学习了如何对齐该语言对中的单词(在我们的示例中为法语和英语)。关于这种机制的精确程度的一个例子来自上面列出的注意力论文: 论文中的介绍神经网络机器翻译我们先简要地看看基于RNN的Encoder-Decoder神经网络翻译模型。我摘取原文的部分内容,如下: 编码器则是在给定上下文向量 c c c以及已经预测的结果 { y 1 , ? ? , y t ′ ? 1 } \{y_1,\cdots, y_{t^\prime - 1}\} {y1?,?,yt′?1?}条件下,去预测下一个结果 y t ′ ? 1 y_{t^{\prime - 1}} yt′?1?。那么就有的原文中的公式(2)了,其中 y = ( y 1 , ? ? , y T y ) \mathbf{y}=(y_1, \cdots, y_{T_y}) y=(y1?,?,yTy??).使用条件概率表示就是成了原文公式(3)了,其中 g g g是非线性的,潜在多层函数,且用于输出 y t y_t yt?的, s s s则是RNN的隐层状态。 上面就是神经机器学习的大体过程。下面我们看看原文提出的新颖结构(novel architecture)。 学习对齐和翻译该模型使用bi-RNN作为编码器。结构如下: 新模型的条件概率如下(公式4): 那么 问题来了,这个上下文向量
c
i
c_i
ci?该如何计算呢?其依赖于编码器将输入语句映射到的各个隐层结果
(
h
1
,
?
?
,
h
T
x
)
(h_1,\cdots,h_{T_x})
(h1?,?,hTx??)。
h
i
h_i
hi?包含关于整个输入序列的信息,重点关注输入序列的第
i
i
i个字周围的部分。
α
i
j
=
exp
?
(
e
i
j
)
∑
k
=
1
T
x
exp
?
(
e
i
k
)
\alpha_{i j}=\frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{T_{x}} \exp \left(e_{i k}\right)}
αij?=∑k=1Tx??exp(eik?)exp(eij?)? 我们将对齐模型a参数化为一个前馈神经网络,它与所提出的系统的所有其他组成部分共同训练。请注意,与传统的机器翻译不同,这个对齐并不被认为是一个潜在的变量。相反,对齐模型直接计算一个软对齐,这允许cost函数的梯度通过反向传播。该梯度可用于联合训练对齐模型和整个翻译模型。 到这里基本上已经结束了,当了解了各个模块的意义之后,仔细一看,其实也不难,就是逻辑上可能有点绕。 用图说话上面的公式什么杂七杂八的可能有些乱,如果你的“attention”不够,可能还不懂。下面,我根据自己的理解,绘制一些图,供参考理解,考验绘图能力的时候到了哟。下图以计算 c 2 c_2 c2?为例。 需要说明的是,其中soft align + softmax 是先进行相似度计算,然后使用softmax进行归一化处理。整个流程用一张动图来看是这样子的。 如果原来的公式,概念不理解的话,回过头看看,应该会清楚一些。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/1 23:22:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |