很久以前看吴恩达老师的视频和西瓜书时用jupyter写的,今天想起来就把它转到这里,真的挺方便

基础模型:Sequence to sequence(序列)模型在机器翻译和语音识别方面都有着广泛的应用。

机器翻译:使用“编码网络(encoder network)”+“解码网络(decoder network)”两个RNN模型组合的形式来解决。encoder network将输入语句编码为一个特征向量,传递给decoder network,完成翻译。

from IPython.display import Image
libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "19.png", width=600, height=100)

encoder vector代表了输入语句的编码特征。encoder network和decoder network都是RNN模型,可使用GRU或LSTM单元。

这种模型也可以应用到图像捕捉领域。图像捕捉,即捕捉图像中主体动作和行为,描述图像内容。

首先,可以将图片输入到CNN,例如使用预训练好的AlexNet,删去最后的softmax层,保留至最后的全连接层。则该全连接层就构成了一个图片的特征向量(编码向量),表征了图片特征信息。然后,将encoder vector输入至RNN,即decoder network中,进行解码翻译。

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "20.png", width=600, height=100)


Sequence to sequence machine translation模型与我们第一节课介绍的language模型有一些相似,但也存在不同之处。二者模型结构如下所示:

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "21.png", width=600, height=100)

Language model是自动生成一条完整语句,语句是随机的。而machine translation model是根据输入语句,进行翻译,生成另外一条完整语句。decoder network与language model是相似的,encoder network可以看成是language model的a<0>a^{<0>}a<0>.
也就是说,machine translation model是加了条件的Language model。

所以,machine translation的目标就是根据输入语句,作为条件,找到最佳翻译语句,使其概率最大:

maxP(y<1>,y<2>,⋯,y<Ty>∣x<1>,x<2>,⋯,x<Tx>)max P(y^{<1>},y^{<2>},⋯,y^{<Ty>}|x^{<1>},x^{<2>},⋯,x^{<Tx>})maxP(y<1>,y<2>,⋯,y<Ty>∣x<1>,x<2>,⋯,x<Tx>)

优化目标是让正确翻译对应的$ P(y{<1>},y{<2>},⋯,y{<Ty>}|x{<1>},x{<2>},⋯,x{})$ 最大。

优化方法:贪婪搜索:Greedy search根据条件,每次只寻找一个最佳单词作为翻译输出,力求把每个单词都翻译准确。缺点:每次只搜索一个单词,没有考虑该单词前后关系;运算成本较大。

Beam Search(定向搜索):优化了贪婪搜索,每次找出预测概率最大的B个单词。B为超参数。

B=1时,Beam Search就是贪婪搜索。

1.从词汇表中找出翻译的第一个单词概率最大的B个预测单词。
概率表示为:P(y^<1>∣x)P(\hat y^{<1>}|x)P(y^​<1>∣x)

2.再以这B个单词为初始条件(a(0)a^{(0)}a(0))计算第二个单词的概率,选出B个预测值。
联合概率表示为:P(y^<2>∣x,y^<1>)P(\hat y^{<2>}|x,\hat y^{<1>})P(y^​<2>∣x,y^​<1>)

3.以开始的B个单词结合了B个预测值之后 为初始条件,继续进行
联合概率表示为:P(y^<3>∣x,y^<1>,y^<2>)P(\hat y^{<3>}|x,\hat y^{<1>},\hat y^{<2>})P(y^​<3>∣x,y^​<1>,y^​<2>)

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "22.png", width=600, height=100)
#beam search就是对以下概率对最大化
#符号是乘积运算

beam search的改进:

长度归一化:以上式子中每一项p都是小于1的,假设要预测的序列很长,那么就会有很多P相乘,会得到很小很小的数字,导致电脑的浮点不能精确得储存。所以将上述式子变成log形式求和的模式。

argmax∑t=1TyP(y^<t>∣x,y^<1>,⋯,y^<t−1>)arg max∑_{t=1}^{T_y}P(\hat y^{<t>}|x,\hat y^{<1>},⋯,\hat y^{<t−1>})argmax∑t=1Ty​​P(y^​<t>∣x,y^​<1>,⋯,y^​<t−1>)

当序列很长的时候,每一项的概率值很小,那么log之后就为负,所有log项相加就会越来越负,使得模型更倾向于输出较短的句子。
解决方法:上面那个句子除以句子长度,实现长度归一化。

argmax1Ty∑t=1TyP(y^<t>∣x,y^<1>,⋯,y^<t−1>)arg max \frac 1{T_y}∑_{t=1}^{T_y}P(\hat y^{<t>}|x,\hat y^{<1>},⋯,\hat y^{<t−1>})argmaxTy​1​∑t=1Ty​​P(y^​<t>∣x,y^​<1>,⋯,y^​<t−1>)

实际应用中,会引入归一化因子α(超参数):

argmax1Tyα∑t=1TyP(y^<t>∣x,y^<1>,⋯,y^<t−1>)arg max \frac 1{T_y^α}∑_{t=1}^{T_y}P(\hat y^{<t>}|x,\hat y^{<1>},⋯,\hat y^{<t−1>})argmaxTyα​1​∑t=1Ty​​P(y^​<t>∣x,y^​<1>,⋯,y^​<t−1>)

若α=1,则完全进行长度归一化;若α=0,则不进行长度归一化。一般令α=0.7.

Error analysis in beam search:首先,为待翻译语句建立人工翻译,记为y∗y^∗y∗。在RNN模型上使用beam search算法,得到机器翻译,记为y^\hat yy^​。

对于一个输入语句,分别计算输出是y∗y^∗y∗的概率P(y∗y^∗y∗|x)和y^\hat yy^​的概率P(y^\hat yy^​|x)。

然后比较大小:

P(y∗y^∗y∗|x)>P(y^\hat yy^​|x):Beam search算法有误,可以调试参数B。

P(y∗y^∗y∗|x)<P(y^\hat yy^​|x):RNN模型有误,可以增加网络层数,使用正则化,增加训练样本数目等方法来优化。

对机器翻译进行打分。以人工翻译为标准,观察机器翻译与人工翻译的符合度进行打分。

1.机器翻译的单词出现在人工翻译中的总次数除以机器翻译单词数目。

2.bleu score:1中是对一个单词进行操作,现在同时对两个连续单词进行打分。机器翻译中连续的2个单词出现在机器翻译中的次数之和除以机器翻译中连续的2个单词出现在人工翻译中的总次数。

对于机器翻译语句过短而造成的得分“虚高”的情况,引入参数因子brevity penalty,记为BP。

注意力模型:因为单纯的encoder-decoder RNN对较长语句的把握较差,因为encoder阶段要记住整句输入再传递给decoder进行翻译,于是提出“注意力机制”。

对待长语句,正确的翻译方法是将长语句分段,每次只对长语句的一部分进行翻译。即局部聚焦.

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "23.png", width=600, height=100)
#注意力模型

attention model仍由类似的编码网络(下)和解码网络(上)构成。其中,S由原语句附近单元共同决定,原则上说,离得越近,注意力权重(attention weights)越大,相当于在你当前的注意力区域有个滑动窗。

注意力模型:采用双向RNN,每个a<t′>表示:

a<t′>=(a→<t′>,a←<t′>)a^{<t′>}=(a^{→<t′>},a^{←<t′>})a<t′>=(a→<t′>,a←<t′>)

RNN编码生成特征,注意力权重用α表示,C是各个RNN神经元经过注意力权重得到的参数值。

例如,α<1,t′>α^{<1,t′>}α<1,t′>表示机器翻译的第一个单词“jane”对应的第t’个RNN神经元对应的注意力权重,C<1>C^{<1>}C<1>表示机器翻译第一个单词“jane”对应的解码网络输入参数。满足:

∑t′α<1,t′>=1∑_{t′}α^{<1,t′>}=1∑t′​α<1,t′>=1

C<1>=∑t′α<1,t′>⋅a<t′>C^{<1>}=∑_{t′}α^{<1,t′>}⋅a^{<t′>}C<1>=∑t′​α<1,t′>⋅a<t′>
也就是说,α<t,t′>α^{<t,t′>}α<t,t′>表示输出y^<t>\hat y^{<t>}y^​<t>对RNN单元a<t′>a^{<t′>}a<t′>的注意力权重因子。

为了让α<t,t′>α^{<t,t′>}α<t,t′>之和为1,利用softamx思想,引入参数e<t,t′>e^{<t,t′>}e<t,t′>,使得:

α<t,t′>=e<t,t′>∑t′Txe<t,t′>α^{<t,t′>}=\frac {e^{<t,t′>}}{∑^{Tx}_{t′}e^{<t,t′>}}α<t,t′>=∑t′Tx​e<t,t′>e<t,t′>​

求e<t,t′>e^{<t,t′>}e<t,t′>:建立一个简单的神经网络,如下图所示。输入是S<t−1>和a<t′>,输出是e<t,t′>S^{<t−1>}和a^{<t′>},输出是e^{<t,t′>}S<t−1>和a<t′>,输出是e<t,t′>。

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "24.png", width=600, height=100)


Attention model的一个缺点是其计算量较大,若输入句子长度为Tx,输出句子长度为Ty,则计算时间约为Tx∗Ty。但是,其性能提升很多,计算量大一些也是可以接受的。

Attention model还能有效处理很多机器翻译问题。

Speech recognition:语音识别的输入是声音,量化成时间序列。更一般地,可以把信号转化为频域信号,即声谱图(spectrogram),再进入RNN模型进行语音识别。

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "25.png", width=500, height=100)

CTC模型(Connectionist temporal classification)

语音识别的注意力模型(attention model):语音识别的输入时间序列都比较长,而翻译的语句通常很短,Tx与Ty差别很大。为了让Tx=Ty,可以把输出相应字符重复并加入空白(下划线”_“)。

没有被空白符”_“分割的重复字符将被折叠到一起,即表示一个字符。通过这样,使得Tx=Ty。

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "26.png", width=500, height=100)

触发字检测:使用RNN模型来建立,RNN检测到触发字后输出1,非触发字输出0。

模型缺点:触发字较非触发字数目少得多,即正负样本分布不均。一种解决办法是在出现一个触发字时,将其附近的RNN都输出1。

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "27.png", width=500, height=100)

libo="C:/Users/libo/Desktop/machine learning/序列模型/图片/"
Image(filename = libo + "28.png", width=500, height=100)

序列模型与注意力机制相关推荐

  1. 一文读懂序列建模(deeplearning.ai)之序列模型与注意力机制

    https://www.toutiao.com/a6663809864260649485/ 作者:Pulkit Sharma,2019年1月21日 翻译:陈之炎 校对:丁楠雅 本文约11000字,建议 ...

  2. 深度学习笔记 第五门课 序列模型 第三周 序列模型和注意力机制

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  3. 05.序列模型 W3.序列模型和注意力机制(作业:机器翻译+触发词检测)

    文章目录 作业1:机器翻译 1. 日期转换 1.1 数据集 2. 用注意力模型进行机器翻译 2.1 注意力机制 3. 可视化注意力 作业2:触发词检测 1. 数据合成:创建语音数据集 1.1 听一下数 ...

  4. 05.序列模型 W3.序列模型和注意力机制

    文章目录 1. 基础模型 2. 选择最可能的句子 3. 集束搜索(Beam Search) 4. 改进集束搜索 5. 集束搜索的误差分析 6. Bleu 得分 7. 注意力模型直观理解 8. 注意力模 ...

  5. 5-3 Coursera吴恩达《序列模型》 第三周课程笔记-序列模型和注意力机制

    上一周的课程5-2 Coursera吴恩达<序列模型> 第二周课程笔记-自然语言处理和词嵌入介绍了自然语言处理相关内容,例如词汇表征.词嵌入.嵌入矩阵和负采样等概念,以及Word2Vec和 ...

  6. 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制

    第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...

  7. 第三周 序列模型和注意力机制(Sequence models Attention mechanism)

    第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 **第三周 序列模型和注意力机制(**Sequence models &a ...

  8. 完结篇 | 吴恩达《序列模型》精炼笔记(3)-- 序列模型和注意力机制

    AI有道 不可错过的AI技术公众号 关注 1 Basic Models Sequence to sequence(序列)模型在机器翻译和语音识别方面都有着广泛的应用.下面,我们来看一个机器翻译的简单例 ...

  9. DLNg第三周:序列模型和注意力机制

    1.基础模型 将法语翻译为英语,分为编码和解码阶段,将一个序列变为另一个序列.即序列对序列模型. 从图中识别出物体的状态,将图片转换为文字. 先使用CNN处理图片,再使用RNN将其转换为语言描述. 2 ...

最新文章

  1. python可抓取数据包括什么_Python对JS型数据抓取有什么特别好的方法吗,pythonjs型抓取,想写一个爬虫,但是需要抓...
  2. 机器学习图像源代码_使用带有代码的机器学习进行快速房地产图像分类
  3. Cannot modify the value of a static config: spark.sql.queryExecutionListeners
  4. django mysql 2059_Django mysqlclient后端生成django.db.utils。操作错误:(2059,NULL)在Windows中...
  5. vue如何获取div的宽度_vue获取dom元素高度的方法
  6. hashmap删除指定key_Java集合:HashMap底层实现和原理(源码解析)
  7. window10c语言软件下载,win10中文语言包下载
  8. java web 课程设计_javaweb期末课程设计
  9. 一个月通过软考中级软件设计师
  10. UE4/UE5 python打包Pak和Runtime加载Pak
  11. 我的Effective C++读书笔记
  12. 架构师接龙:黄冬邓毅
  13. Oracle RAC集群安装,从零开始
  14. OpenCV—Python 图像加减乘除-逻辑运算
  15. 计算机向u盘拷贝速度慢,U盘读写拷贝速度慢的解决措施
  16. matplotlib图表多曲线多纵轴绘制工具方法
  17. 网页占满整个屏幕_CSS网页背景图片等比例占满整个页面的解决方案
  18. Wolfram Alpha:下一个Cuil还是下一个Google?
  19. 科技周刊第五期:科学技术在发展中的作用
  20. IT界CICD新词-Dummy

热门文章

  1. 腾讯QQ/TM珊瑚虫外挂 2.3.4 QQ IP数据库
  2. 检讨书生成微信小程序工具源码-支持流量主
  3. Nutz3---nutz实现主键自增
  4. 一些做谱面会用上的工具
  5. 四川师范大学雷怡教授团队揭示伴侣声音促进个体的安全学习
  6. flac3d软件计算机配置,flac3d中文使用指导.doc
  7. 快速软件开发——软件开发基本原则
  8. 单路服务器芯片组的发展
  9. Linux系统管理之LVM案例
  10. 【Xlinx】【ZynqMP】petalinux2020.1版本QSPI FLASH启动linux教程