写在前面,RNN是经典的用来处理序列数据的神经网络,这里花了点时间学习了一下,顺便非常粗糙地了解了一下NLP的内容,因此在这里整理了一下笔记。

1、知识图谱

针对客观存在的信息,抽取置信度较高的加入到实体库,然后用(实体1,关系,实体2)、(实体、属性,属性值)这样的三元组来实体库间的关系,每一个三元组就是一个“知识”,知识图谱就是若干知识的连接网络。

2、NLP与RNN

● 序列数据
比如说“我手机坏了,我想买个新苹果!”,这句话中的“苹果”指的是手机而不是真正的苹果,那我们之所以会认为是手机,是因为我们结合了前半句“我手机坏了”,才推段出来的。把这个例子抽象出来,所谓的序列数据,就是需要考虑到输入数据的顺序的数据,像本题的句子就是一个典型的时序数据(本例子的后半句中的苹果就是需要考虑前半句的手机),同样的还有股票预测,气温预测等时序数据。

● NLP是做什么的?
NLP是和CV并属深度学习两大领域。NLP针对的问题主要是语言模型、语音识别、机器翻译、自动问答/对话、情绪分析/文本分类/自然语言推理、信息检索、信息抽取、生成类任务、句法规则相关。reference

● RNN为什么更适合序列数据?
RNN是神经网路的一种,跟CNN、DNN(深度神经网络)、GNN、GAN并列的。RNN能够保留上下文信息进行信息传播,因此非常适合进行序列数据的学习,同时参数空间也更小。比如说下图中就是RNN在处理 这个序列数据的时候,都是同一个参数矩阵,因此参数空间不会爆。如果用去取代的话,如果也想处理这个序列数据的话,就得完成下面的步骤:

  • 找到特征的最大长度,然后把短的补到这个特征长度;
  • 然后把合在一起形成(因为其实就是一个整体的输入数据,比如说是一句话的三个单词),然后输入到一个中;
    这样处理之后,的参数规模就是采用RNN的参数的三倍了,随着序列数据的长度越长,这个倍数还会一直增加。

3、RNN

Video_Reference

3.1 RNN的应用举例

像下图所示,输入一个单词,计算得到这个词属于不同的slot的概率(slot就是类别,比如说有目的地、出发点等类别)。

针对同样的一个单词“Taipei”,如果前面一个单词是“arrive”,那“Taipei”被分类成目的地的可能性就更大,如果是“leave”,被分类成出发点的可能性就越大。

3.2 RNN结构图

RNN本身就只有下图左边那个一个模型,但是因为是要进行time steps个循环,所以把每个循环展开就成了右图这种非常容易理解的形式。

3.3 RNN中的time step理解

以输入数据为一个句子为例,如下图所示,每个单词的输入就是一个time step,比如说当“Taipei”为输入数据时,在进行前向传播的时候就会考虑到上一个time step输入的"arrive"的信息。

3.4 前向传播的formulation

其实前向传播就是计算两个值。
s t = ϕ ( U x t + W s t − 1 ) o t = f ( V s t ) \begin{aligned} s_{t} &=\phi\left(U x_{t}+W s_{t-1}\right) \\ o_{t} &=f\left(V s_{t}\right) \end{aligned} st​ot​​=ϕ(Uxt​+Wst−1​)=f(Vst​)​

3. 5 RNN的变体

● Elman Network & Jordan Network
区别就在与存的是输出还是隐藏层的状态。

● Deep RNN
下图就是深层的RNN,其实就是堆叠多几层。

● Bi-RNN
双向RNN,这样不仅能学到时刻的信息,还能学到的信息了。

● Naive RNN(最基本的RNN)
不管是下面的LSTM还是GRU都是针对下图的左边的那个图中的进行改进了而已。所以以后只要提到RNN,都可以先出画出个框架即可。

● LSTM
其实就是对naive rnn里边的按照下面的方式替换掉就行了。就加了三个门,门的作用跟门的名字是绑定在一起的。



● GRU
跟LSTM的类比

  • GRU里边的 h t − 1 h^{t-1} ht−1相当于LSTM里边的 c t − 1 c^{t-1} ct−1,都代表之前的记忆
  • GRU的update门相当于LSTM中的forget门
    因为GRU里边针对隐藏层(历史信息)的输出的式子如下:
    h t = z ⊙ h t − 1 + ( 1 − z ) ⊙ h ′ h^{t}=z \odot h^{t-1}+(1-z) \odot h^{\prime} ht=z⊙ht−1+(1−z)⊙h′

LSTM针对隐藏层(历史信息)的输出的式子如下:
c t = z f ⊙ c t − 1 + z i ⊙ z c^{t}=z^{f} \odot c^{t-1}+z^{i} \odot z ct=zf⊙ct−1+zi⊙z

明显对称,同时针对GRU为什么能使用(1-z)来代表类似输入门的效果,可以理解成,忘记越多的历史信息,就要输入越多改成的信息,因此用(1-z)去取代输入门逻辑上是近似相等的。

● GRU里边的reset门主要用于构建下式的 h ′ h' h′,类似与LSTM中的z
h t = z ⊙ h t − 1 + ( 1 − z ) ⊙ h ′ h^{t}=z \odot h^{t-1}+(1-z) \odot h^{\prime} ht=z⊙ht−1+(1−z)⊙h′

reset门参与运算的式子如下
h ′ = h t − 1 ⊙ r + x t × w h^{\prime}=h^{t-1} \odot r+x^{t} \times w h′=ht−1⊙r+xt×w

3.6 Sequence Generation

怎么利用RNN产生一个sequence?
● 产生一个句子
训练完一个RNN模型之后,给模型喂一个开始信号,然后句子就会逐渐产生一句话,直到产生一个句子,识别到EOS信号就停止产生。

● 训练RNN模型的具体流程
输入BOS之后得到第一个预测的word set里边的probility,然后标签是“春”,然后就是经典 的交叉熵求这个loss,然后把正确答案“春”作为下个block的输入,然后把预测出来的word set的probility,同理继续求cross entropy,然后把“眠”作为第三个block的输入,继续下去。(至于为什么要用reference作为下一个block的输入而不用当前block的prediction作为输入,下面3.9会解释)

● Image -> Sequence
这里需要注意,像素间的sequence关系更多是4邻接或8邻接,而不是单纯的展开成一维的从头到尾的连接。

3.7 Condition Generation

像上述3.6中的产生句子的例子中,针对每一个block产生的预测结果是我们如果采用的是sample的方法的,这样产生的就是一个随机的句子,而我们更想得到的效果就是machine能够根据提供的一个condition产生一个sequence。

● Image Condition
根据输入的图片,产生一段描述图片的句子。把输入的图片采用CNN转成一个vector,然后把这个vector作为每个RNN block的输入之一,另外一个输入就是上一个block的预测结果。

● Sequence -to- sequence
以翻译一个句子为例,condition就是一个待翻译的句子。这种seq2seq模型最经典就是两个结构,encoder和decoder,两者都是RNN结构,encoder最后一个block的输出其实已经包含了整个句子的信息,然后作为decoder的输入vector给到每一个block。

3.8 Attention-based model (Dynamic Conditional Generation)

在3.7中我们都是把encoder部分的最后一个输出作为一个总的condition输入到decoder部分,这样做会loss掉很多局部信息,因此就有了升级版的能够把encoder局部信息作为decoder输入的动态调整的conditional generation方法。就像下图这个例子,把“机”和“器”合在一起作为decoder第一个block的输入,把“学”和“习”作为第二个block的输入,这样比将“机器学习”整一个句子作为每一个block的输入会取得更好的效果。所以这个方法又叫Attention-based model,通过引入注意力机制,从而做到“每次应该把那些字作为一个整体输入到decoder中”。

● attention的设计方式

  • 1、首先我们给定一个初始的,然后通过一个match方法,把在encoder里边的每个block的输出,即下图中的每个做一次处理计算得到和的相似程度(比如说代表的是和的相似性),至于这个match方法应该是什么,slide也给出三个方法(下图右边)。

  • 2、算出对每个的相似程度之后得到列表,然后把经过一个softmax之后得到,然后通过下面这个公式计算出,其实就是代表着decoder的上一个状态的历史信息,这个代表的意思就是我根据上一个状态的历史信息,然后根据和全局信息的相似度(就是注意力机制)找到的要重点学习的部分信息,从而作为decoder里边该层block里边输入的信息。
    c 0 = α ^ 0 1 h 1 + α ^ 0 2 h 2 + α ^ 0 3 h 3 + α ^ 0 4 h 4 c^{0}=\widehat{\alpha}_{0}^{1} h^{1}+\widehat{\alpha}_{0}^{2} h^{2}+\widehat{\alpha}_{0}^{3} h^{3}+\widehat{\alpha}_{0}^{4} h^{4} c0=α 01​h1+α 02​h2+α 03​h3+α 04​h4



    ● Image Caption Generation
    把这种注意力机制应用到图像上。首先就是把图片分割成几块,然后同样在decoder部分先算出每一块和历史信息的相似度,然后算出学习的部分。

3.9 Tips for Generation

● Mismatch between Train and Test

  • 问题描述
    在Trainning的时候,我们使用reference作为输入,而在testing的时候,我们是用上一个time stage的预测该block的输入。这样,在训练的是后,就算有一个block预测错了,那也不会影响下一个block的输入,但是testing的时候就会出现一步错,步步错的情况了。更形象一点就是下图的左边两幅树图,上面是trainning,下面是testing,在训练的时候,我们只走了一个分支,但是在testing中是很容易走入没训练过的分支的,那为什么trainning的时候不像testing那样直接用上一个blcok的预测作为输入呢?

  • trainning 保持用reference作为输入的原因
    因为如果在trainning的时候用的是上一个block的预测作为输入的话,会很难train起来。以下图为例,如果一开始第一个block预测的是B(答案是A),第二个block以第一个block的预测(B)作为输入,然后输出A(答案是B),这样再使用cross-entropy之后,训练了一阵子之后,第一个block的输出已经能输出正确答案A了,但是第二个block之前的训练过程都是基于上一个block传入的是B进行训练的,所以这段训练过程就作废了,现在得重新以上一个block传入的是A来开始训练,所以就会很难训练。那还不如就让每一个block的输入就是以答案为标准,这样起码不会浪费时间。

  • Scheduled Sampling
    如果训练采用的是完全用reference作为blcok的input,这样testing就容易出现一步错步步错的情况,如果采用prediction作为blcok的input的话,就会浪费大量的时间,因此有个折中办法,就是在训练前期先用reference作为input,待训练较稳定之后,就用predicetion作为input。


循环神经网络,注意力机制小结相关推荐

  1. 神经网络注意力机制--Attention in Neural Networks

    Attention in Neural Networks and How to Use It http://akosiorek.github.io/ml/2017/10/14/visual-atten ...

  2. 神经网络 注意力机制 Q K V 理解

    注意力机制 公式 为了简单假定       Q矩阵 K矩阵一样 Q                                                   K转置              ...

  3. 神经网络 || 注意力机制的Pytorch代码实现

    文章目录 1 注意力机制的诞生 2 介绍SeNet模型及Pytorch代码实现 1 注意力机制的诞生 注意力机制,起初是作为自然语言处理中的工作为大家熟知,文章Attention is all you ...

  4. 神经网络注意力机制可视化,人工神经网络可视化

    直接用神经网络工具箱构建bp神经网络,希望能给个例子说明,有注解最好,本人matlab新手,谢谢 10 BP(BackPropagation)神经网络是1986年由Rumelhart和McCellan ...

  5. 基于卷积神经网络和注意力机制的人眼闭合检测算法

    基于卷积神经网络和注意力机制的人眼闭合检测算法 前言 卷积神经网络 注意力机制 数据集 源代码 致谢 结语 前言 卷积神经网络 近年来,基于神经网络的识别方法已经成为一个热门的研究专题,该方法可用于特 ...

  6. 神经网络(六)循环神经网络

    一.增加记忆功能 1.可计算问题 其中函数不涉及记忆问题,可以使用前馈神经网络计算 但是图灵机涉及记忆问题,需要为神经网络增加记忆能力 2.如何增加记忆能力 ①时延神经网络 额外增加一个延时单元(用以 ...

  7. 注意力机制(SE, ECA, CBAM, SKNet, scSE, Non-Local, GCNet, ASFF) Pytorch代码

    注意力机制 1 SENet 2 ECANet 3 CBAM 3.1 通道注意力 3.2 空间注意力 3.3 CBAM 4 展示网络层具体信息 5 SKNet 6 scSE 7 Non-Local Ne ...

  8. 如何实现模拟人类视觉注意力的循环神经网络?

    我们观察PPT的时候,面对整个场景,不会一下子处理全部场景信息,而会有选择地分配注意力,每次关注不同的区域,然后将信息整合来得到整个的视觉印象,进而指导后面的眼球运动.将感兴趣的东西放在视野中心,每次 ...

  9. 循环神经网络RNN 2—— attention注意力机制(附代码)

    attention方法是一种注意力机制,很明显,是为了模仿人的观察和思维方式,将注意力集中到关键信息上,虽然还没有像人一样,完全忽略到不重要的信息,但是其效果毋庸置疑,本篇我们来总结注意力机制的不同方 ...

最新文章

  1. linux环境编程-- ftok()函数
  2. 获取服务器路径的方式 【记录】
  3. 约会安排 HDU - 4553
  4. 我可以/应该在事务上下文中使用并行流吗?
  5. jQuery系列:Ajax
  6. idea的使用记录一
  7. 2018.09.14python学习第四天part3
  8. 微信小程序商城毕业设计毕设作品(6)任务书
  9. 国际版云购网站代码开发实现案例
  10. ARUA2017创新转型峰会(ATIC)启动上海
  11. 安卓系统,启用微信浮窗 session 丢失
  12. WebRTC APM
  13. windows7 系统中,IE打开网页窗口提示网页上有错误“无法打开匿名级安全令牌”解决方法
  14. 英文字母间距非常大的问题
  15. C#实现的等额本息法、按月付息到期还本法、一次性还本付息法
  16. U盘制作Ubuntu启动盘后无法格式化解决办法
  17. SQL注入漏洞_封神台第一关
  18. 下载神器:axel aria2 mwget多线程快速下载取代curl和wget的多线程下载命令
  19. 数学建模层次分析法一致性检验建立
  20. java-net-php-python-900jspm跳蚤市场网站管理系统开题ppt计算机毕业设计程序

热门文章

  1. python字典的存储结构_解决python字典结构内存暴涨问题
  2. SpringBoot2集成redis,使用lettuce客户端
  3. shell操作mysql数据库 基本命令
  4. 2023山东建筑大学考研介绍
  5. HCIA之ARP协议
  6. SpringBoot教程(14) JUnit5详解 断言 assertEquals assertSame assertThrows assertThat
  7. 鸿蒙系统出了旧的华为手机用哪个系统,大家不要沮丧了,荣耀手机还是可以升级鸿蒙系统的...
  8. MySql之表的增删改查
  9. 新学期,新气象,新学期flag
  10. mysql还原数据的方法_MySQL 数据还原