基于注意力机制的seq2seq网络

六月 北京 | 高性能计算之GPU CUDA培训

6月22-24日 640?wx_fmt=jpeg 三天密集式学习  快速带你入门 阅读全文 >


正文共1680个字,26张图,预计阅读时间10分钟。


seq2seq的用途有很多,比如机器翻译,写诗,作曲,看图写文字等等用途很广泛!该模型最早在2014年被Cho和Sutskever先后提出,前者将该模型命名为“Encoder-Decoder Model”也就是编码-解码模型,后者将其命名为“Sequence to Sequence Model”也就是序列到序列模型,两者有一些细节上的差异,但总体大致思想基本相同。


seq2seq根据字面意思来看就是序列到序列,再具体点就是输入一个序列(可以是一句话,一个图片等)输出另一个序列。这里以RNN为基础的机器翻译为例,介绍seq2seq和attention注意力机制。(seq2seq实现的方法有很多,比如MLP,CNN,RNN等)

这是机器翻译的部分数据 (法语->英语):


640?wx_fmt=jpeg


我们先了解下机器翻译的大致流程:


640?wx_fmt=jpeg


大致意思就是根据输入的文本,神经网络开始学习和记忆,这个就是所谓的Encoder编码过程;然后根据自己的记忆,把文本一一翻译出来,这个就是所谓的Decoder解码过程。

现在再让我们更进一步了解seq2seq的具体流程:


640?wx_fmt=jpeg

我来一一讲解这张图的每一个细节:


640?wx_fmt=png这个是某个时刻t的RNN隐层单元,R,O代表里面的两个gate,下表E/D代表这个是Encoder/Decoder过程。

640?wx_fmt=png这个在Encoder是某个时刻输入词,在Decoder是上一个预测的词。

640?wx_fmt=png这个是Encoder的最后一个单元,里面的隐层存着记忆单元呢,Decoder需要根据Encoder的这个记忆单元隐层把帮助自己一个一个的预测词。


所以需要传到个个Decoder中。


下面这个是Decoder的核心过程,拿一次预测举例子:

640?wx_fmt=jpeg

640?wx_fmt=png是上一个预测词,这里是fox。640?wx_fmt=png是上次预测完的记忆单元,640?wx_fmt=png是Encoder的隐藏单元。640?wx_fmt=png的计算方式为,g为一种方法(神经网络中一般为每个参数*W,最后求和输出。

下面公式都类似):


640?wx_fmt=png

640?wx_fmt=png是本次,这里是s4,640?wx_fmt=png的计算方式为:

640?wx_fmt=png


这是简单的理论部分,看看这个实践图吧:


Encoder

640?wx_fmt=jpeg


Decoder

640?wx_fmt=jpeg


虽然这个model是GRU,但不光是GRU,LSTM等都可以。


seq2seq就这样讲完了。下面该到注意力机制登上历史舞台!


Attention Mechanism 注意力机制


从字面意思我们能联想到自己的注意力吧。对,就是这样的。每当我们专注学习时,我们的目光会聚焦在正在学的东西上,但是我们眼前不能专注的也不是啥也看不见,仅仅是模糊而已。转移到数学分析下,就是我们专注的占得我们经历的大部分,比如给个数值0.8(满分为1),其他的模糊情景为0.01,0.03,0.07。。。总和为0.2。


这个注意力机制就是这样的!在机器翻译中,我们需要一个词一个词的翻译,当我们翻译某个词的时候,我们主要是需要这个词,而其他的词信息用的就是很少了,所以就是说网络把精力大部分放到了将要翻译的这个词了,但是其他也得照顾到,因为翻译一个词需要上下文的意思,比如单复数的写法就需要上下文吧。


你看,这个是不是和人的注意力差不多啊。这个也可以从我们生活经常做的例子来说就是你看着手机走路,你的注意力在手机上,但是你也能走路,而且还能避开各种人群(当然,撞树啥的只能怪你给手机分配的注意力太大了QAQ)。


看一下基本的流程图:


640?wx_fmt=jpeg


这些黄色的深浅代表当翻译每个词的注意力的分配。


具体网络分布图为:


640?wx_fmt=jpeg

再具体下,以这个例子为例:


640?wx_fmt=jpeg


Encoder用的是是双向RNN,当RNN单元循环回来的时候都会有一个输出给了你将要翻译的词对应的attend,而此时肯定是它的最下方的词应该是注意力最集中的,所以它对应的权重肯定是最大的。


这里的权重分配公式为:


640?wx_fmt=png

从最上面下来的是640?wx_fmt=png640?wx_fmt=png是第j个Encoder隐层出来的记忆单元。


所有的分打出来后,要做下归一化:

640?wx_fmt=png

这个跟Softmax差不多。


然后对他们进行求和传送给640?wx_fmt=png

640?wx_fmt=png


这个注意力机制大大提高了机器翻译的能力当然也包括其他的领域。


原文链接:https://mp.weixin.qq.com/s/8CXHuB2eQc1cs4XC2U2sLA


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

640?wx_fmt=jpeg

大家都在看

640.png?

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

Seq2Seq模型是一种常见的序列到序列的模型,主要用于机器翻译、对话生成等任务。虽然Seq2Seq模型已经取得了一定的成功,但仍存在一些可以改进的方法。以下是几种改进方法: 1. 使用注意力机制(Attention Mechanism):传统的Seq2Seq模型在编码器和解码器之间只传递最后一个隐藏状态,这可能导致信息丢失。引入注意力机制可以使解码器在生成每个输出时能够关注到编码器中不同位置的信息,从而提高模型性能。 2. 使用双向循环神经网络(Bi-directional RNN):传统的Seq2Seq模型中,编码器只使用了正向的循环神经网络来编码输入序列,这可能导致信息不完整。使用双向循环神经网络可以同时考虑输入序列的正向和反向信息,提高编码器的表达能力。 3. 使用更复杂的解码器结构:传统的Seq2Seq模型使用简单的循环神经网络作为解码器,可能限制了模型生成句子的能力。可以尝试使用更复杂的解码器结构,如基于注意力机制的解码器、Transformer等,以提高模型生成能力。 4. 增加模型的深度和宽度:传统的Seq2Seq模型通常只有几层循环神经网络或者注意力层,可能限制了模型的表达能力。可以尝试增加模型的深度和宽度,增加网络的层数或每层的隐藏单元数,以提高模型的性能。 5. 数据增强和预训练模型:通过增加训练数据、使用数据增强技术(如数据重复、噪声添加等)可以提高模型的鲁棒性和泛化能力。另外,可以使用预训练的语言模型作为Seq2Seq模型的初始化参数,以提升初始表现和收敛速度。 以上是一些可以改进Seq2Seq模型的方法,具体选择哪种方法需要根据具体任务和数据来进行调试和选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值