当前位置: 首页 > 编程日记 > 正文

吴恩达老师深度学习视频课笔记:序列模型和注意力机制

基础模型:比如你想通过输入一个法语句子来将它翻译成一个英语句子,如下图,seq2seq模型,用x<1>一直到x<5>来表示输入句子的单词,然后我们用y<1>到y<6>来表示输出的句子的单词,如何训练一个新的网络,来输入序列x和输出序列y,这里有一些方法。首先,我们先建立一个网络,这个网络叫做编码网络,它是一个RNN的结构,RNN的单元可以是GRU,也可以是LSTM,每次只向该网络中输入一个法语单词,将输入序列接收完毕后,这个RNN网络会输出一个向量来代表这个输入序列。之后,你可以建立一个解码网络,它以编码网络的输出作为输入,之后它可以被训练为每次输出一个翻译后的单词,一直到它输出序列的结尾或者句子的结尾标记,这个解码网络的工作就结束了。

图像描述(image captioning):如下图,给出一张图片,比如这张猫的图片,它能自动地输出该图片的描述,一只猫坐在椅子上。如何训练出这样的网络通过输出图像来输出描述?方法如下:将图片输入到卷积神经网络中,比如一个预训练的AlexNet结构,然后让其学习图片的编码,或者学习图片的一系列特征,如果去掉最后的softmax单元,这个预训练的AlexNet结构会输出一个4096维的特征向量,向量表示的是这张图片的描述,所以这个预训练网络可以是图像的编码网络,接着你可以把这个向量输入到RNN中,RNN要做的就是生成图像的描述,每次生成一个单词,让网络输出序列或者说一个一个地输出单词序列。

Picking the most likely sentence: 如下图,你可以把机器翻译想成是建立一个条件语言模型。在语言模型中,能够估计句子的可能性,你也可以将它用于生成一个新的句子。机器翻译,如图中,用绿色表示encoder网络,用紫色表示decoder网络,decoder网络和语言模型很相似。机器翻译模型其实和语言模型非常相似,不同在于语言模型总是以零向量开始,而encoder网络会计算出一系列向量来表示输入句子而不是以零向量开始。所以把机器翻译叫做条件语言模型。

通过模型将法语翻译成英文:如下图,通过输入的法语句子,模型将会告诉你各种英文翻译所对应的可能性。你并不是从得到的分布中进行随机取样,而是你要找到一个英语句子y使得条件概率最大化。所以在开发机器翻译系统时,你需要作的一件事就是想出一个算法用来找出合适的y值使得该项最大化。而解决这种问题最通用的算法就是束搜索(beam search)。

为什么不用贪心搜索(greedy search)?贪心搜索是一种来自计算机科学的算法,生成第一个词的分布以后,它将会根据你的条件语言模型挑选出最有可能的第一个词,进入你的机器翻译模型中,在挑选出第一个最有可能的第一个词后,它将会继续挑选出最有可能的第二个词,然后继续挑选第三个最有可能的词,这种算法就叫做贪心搜索。但是你真正需要的是一次性挑选出整个单词序列来使得整体的概率最大化。一次仅仅挑选一个词并不是最佳的选择。

束搜索(beam search):如下图,输入法语句子翻译成英语句子。束搜索算法首先做的就是挑选要输出的英语翻译中的第一个单词,如一个10000个词的词汇表,在束搜索的第一步中评估第一个单词的概率值,束搜索算法会考虑多个选择,束搜索算法会有一个参数B,叫束宽,在这个例子中束宽设成3,意味着束搜索不会只考虑一个可能结果而是一次会考虑3个。束搜索算法会把结果存到计算机内存里以便后面尝试用这三个词。如果束宽设的不一样第一个单词的最可能的选择也不一样。为了执行束搜索的第一步你需要输入法语句子到编码网络然后会解码这个网络。束搜索算法的第二步,会针对每个第一个单词考虑第二个单词是什么,在第二步中我们更关心的是要找到最可能的第一个和第二个单词对,所以不仅仅是第二个单词有最大的概率而是第一个第二个单词对有最大的概率。然后用于下一次束搜索,最终这个过程的输出一次增加一个单词,束搜索最终会找到英语句子。如果束宽设为1实际上就变成了贪婪搜索算法。

改进束搜索(refinements to beam search):长度归一化就是对束搜索算法稍作调整的一种方式能够帮助你得到更好的结果。如下图,束搜索就是最大化这个概率,实际中总是记录概率的对数和而不是概率的乘积。

如何选择束宽B?B越大,你考虑的选择越多,你找到的句子可能越好,但是B越大,你的算法的计算代价越大。在产品中,经常看到将束宽设到10,也取决于不同应用,也有取更大值的如100,1000等。

束搜索的误差分析:束搜索算法是一种近似搜索算法,也被称作启发式搜索算法,它不总是输出可能性最大的句子,它仅记录着B为前3或者前10种可能。对束搜索算法进行误差分析(error analysis with beam search),如下图,判断是RNN网络还是束搜索导致的问题,先遍历开发集,然后在其中找出算法产生的错误,能够执行误差分析得出束搜索算法和RNN模型出错的比例是多少,你就可以对开发集中的每一个错误例子,尝试确定这些错误是搜索算法出了问题还是RNN模型出了问题。

Bleu score: 机器翻译的一个难题是一个法语句子可以有多种英文翻译,而且都同样好,所以当有同样好的答案时,怎样评估一个机器翻译系统?常见的解决办法是通过一个叫做BLEU得分的东西来解决。如下图,BLEU得分是一个有用的单一实数评估指标,用于评估生成文本的算法,判断输出的结果是否与人工写出的参考文本的含义相似.

Attention model intuition: 如下图,注意力模型(attention model)非常适用于机器翻译中的长句子。对于长句子,人工会一边读一边翻译,在神经网络中记忆非常长句子是非常困难的。注意力模型翻译的很像人类一次翻译句子的一部分。注意力模型会计算注意力权重,图中α表示注意力权重。

Attention model: 如下图,假定有一个输入句子并使用双向的RNN或者双向的GRU或者双向的LSTM去计算每个词的特征。对于前向传播,你有第一个时间步的前向传播的激活值,第一个时间步后向传播的激活值,第二个时间步的前向传播激活值,第二个时间步后向的激活值,以此类推。它们一共向前了5个时间步,也向后了5个时间步,a<0>和a<6>都是0的因子,a<t>是时间步t上的特征向量。α为注意力参数,告诉我们应该花多少注意力,也告诉我们上下文有多少取决于我们得到的特征。

语音识别:有一个音频片段x,你的任务是自动生成文本y。用一个很大的数据集,可能长达300个或3000个小时。可以将注意力模型或CTC损失函数应用到语音识别系统中,如下图:

Trigger word detection: 触发字系统(trigger word system):随着语音识别的发展越来越多的设备可以通过你的声音来唤醒,这有时被叫做触发字检测系统。触发字系统的例子包括,如下图:Amazon echo, 它通过单词Alexa唤醒;百度DuerOS设备通过”小度你好”来唤醒;苹果的Siri用Hey Siri来唤醒;Google Home使用Okey Googel来唤醒。

GitHub: https://github.com/fengbingchun/NN_Test

相关文章:

七个开发者成就百亿市值公司?这个技术思路如今让阿里发扬光大

2015年&#xff0c;马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell 这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是&#xff0c;这么知名的游戏公司开发团队当时却不足7人&#xff01;整个团队好像cell一样&am…

Linux学习笔记之文件管理和目录管理类命令

在开始理解Linux文件管理和目录类命令之前&#xff0c;有必要先说一下&#xff0c;关于操作系统在计算机中都做了哪些工作。0、操作系统的工作1、文件管理&#xff0c;增删改查2、目录管理3、进程管理4、软件安装5、运行程序6、网络管理7、设备管理本次笔记介绍的是文件管理和目…

张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”

整理 | AI科技大本营编辑部出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 31 日&#xff0c;由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕&#xff0c;本次大会吸引了国际人工智能领域的顶级专家学者参加&#xff0c;围绕人工智能基础…

ssqlit3.0数据库使用方法

由于考虑将来还要开发Android版本app&#xff0c;为了移植方便&#xff0c;所以使用了sqlite3来做数据持久化&#xff0c;到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries&#xff0c;点击“”按钮&…

GCC中通过--wrap选项使用包装函数

在使用GCC编译器时&#xff0c;如果不想工程使用系统的库函数&#xff0c;例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free, new/delete函数&#xff0c;可以有两种方法&#xff1a; (1). 使用LD_PRELOAD环境变量&#xff1a;可以设置共享库的路径&…

[原]对Linux环境下任务调度一点认识

我一直以来有一个误解&#xff0c;那就是在终端运行某个程序时&#xff0c;按下Ctrl D时我误以为就是杀死了这个进程&#xff0c;今天才知道原来不是。比如我利用libevent在Linux环境下写了一个网络监听程序&#xff0c;当启动程序之后&#xff0c;就会一直监听本地的6789端口…

决策树的C++实现(CART)

关于决策树的介绍可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78880934 CART算法的决策树的Python实现可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78881143 这里参考 https://machinelearningmastery.com/impl…

iOS开发-由浅至深学习block

作者&#xff1a;Sindri的小巢&#xff08;简书&#xff09; 关于block 在iOS 4.0之后&#xff0c;block横空出世&#xff0c;它本身封装了一段代码并将这段代码当做变量&#xff0c;通过block()的方式进行回调。这不免让我们想到在C函数中&#xff0c;我们可以定义一个指向函数…

Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream

【进群了解最新免费公开课、技术沙龙信息】作者 | Jesus Rodriguez译者 | 陆离编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型&#xff0c;最近&#xff0c;谷歌和微软分别…

fragment 横竖屏 不重建

2019独角兽企业重金招聘Python工程师标准>>> android:configChanges"screenSize|orientation" 这样设置 切屏时都不会重新调用fragment里面的onCreateView了 转载于:https://my.oschina.net/u/1777508/blog/317811

二叉树简介及C++实现

二叉树是每个结点最多有两个子树的树结构&#xff0c;即结点的度最大为2。通常子树被称作”左子树”和”右子树”。二叉树是一个连通的无环图。 二叉树是递归定义的&#xff0c;其结点有左右子树之分&#xff0c;逻辑上二叉树有五种基本形态&#xff1a;(1)、空二叉树&#xf…

swift实现ios类似微信输入框跟随键盘弹出的效果

为什么要做这个效果 在聊天app&#xff0c;例如微信中&#xff0c;你会注意到一个效果&#xff0c;就是在你点击输入框时输入框会跟随键盘一起向上弹出&#xff0c;当你点击其他地方时&#xff0c;输入框又会跟随键盘一起向下收回&#xff0c;二者完全无缝连接&#xff0c;那么…

行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...

作者 | Jiaxu Miao、Yu Wu、Ping Liu、Yuhang Ding、Yi Yang译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】在以人搜人的场景中&#xff0c;行人会经常被各种物体遮挡。之前的行人再识别&#xff08;re-id&#xff09;方法…

WinAPI: Arc - 绘制弧线

为什么80%的码农都做不了架构师&#xff1f;>>> //声明: Arc(DC: HDC; {设备环境句柄}X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL;//举例: procedure TForm1.FormPaint(Sender: TObject); constx1 10;y1 10;…

提高C++性能的编程技术笔记:跟踪实例+测试代码

当提高性能时,我们必须记住以下几点&#xff1a; (1). 内存不是无限大的。虚拟内存系统使得内存看起来是无限的&#xff0c;而事实上并非如此。 (2). 内存访问开销不是均衡的。对缓存、主内存和磁盘的访问开销不在同一个数量级之上。 (3). 我们的程序没有专用的CPU&#xff…

2019年不可错过的45个AI开源工具,你想要的都在这里

整理 | Jane 出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100)一个好工具&#xff0c;能提高开发效率&#xff0c;优化项目研发过程&#xff0c;无论是企业还是开发者个人都在寻求适合自己的开发工具。但是&#xff0c;选择正确的工具并不容易&#xff0c;有时这甚至是…

swift中delegate与block的反向传值

swift.jpg入门级 此处只简单举例并不深究&#xff0c;深究我也深究不来。对于初学者来说delegate或block都不是一下子能理解的&#xff0c;所以我的建议和体会就是&#xff0c;理不理解咱先不说&#xff0c;我先把这个格式记住&#xff0c;对就是格式&#xff0c;delegate或blo…

Direct2D (15) : 剪辑

为什么80%的码农都做不了架构师&#xff1f;>>> 绘制在 RenderTarget.PushAxisAlignedClip() 与 RenderTarget.PopAxisAlignedClip() 之间的内容将被指定的矩形剪辑。 uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject); varcvs: TDirect2DCanvas;…

女朋友啥时候怒了?Keras识别面部表情挽救你的膝盖

作者 | 叶圣出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】随着计算机和AI新技术及其涉及自然科学的飞速发展&#xff0c;整个社会上的管理系统高度大大提升&#xff0c;人们对类似人与人之间的交流日渐疲劳而希望有机器的理解。计算机系统和机械人如果需要…

提高C++性能的编程技术笔记:构造函数和析构函数+测试代码

对象的创建和销毁往往会造成性能的损失。在继承层次中&#xff0c;对象的创建将引起其先辈的创建。对象的销毁也是如此。其次&#xff0c;对象相关的开销与对象本身的派生链的长度和复杂性相关。所创建的对象(以及其后销毁的对象)的数量与派生的复杂度成正比。 并不是说继承根…

swim 中一行代码解决收回键盘

//点击空白收回键盘 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { view.endEditing(true) }

WinAPI: SetRect 及初始化矩形的几种办法

为什么80%的码农都做不了架构师&#xff1f;>>> 本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Butto…

Windows10上使用VS2017编译OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.6.2操作步骤

1. 从https://github.com/opencv/opencv/releases 下载opencv-3.4.2.zip并解压缩到D:\soft\OpenCV3.4.2\opencv-3.4.2目录下&#xff1b; 2. 从https://github.com/opencv/opencv_contrib/releases 下载opencv_contrib-3.4.zip并解压缩到D:\soft\OpenCV3.4.2\opencv_contrib-3…

swift 跳转网页写法

var alert : UIAlertView UIAlertView.init(title: "公安出入境网上办事平台", message: "目前您可以使用网页版进行出入境业务预约与查询&#xff0c;是否进入公安出入境办事平台&#xff1f;", delegate: nil, cancelButtonTitle: "取消", o…

智能边缘计算:计算模式的再次轮回

作者 | 刘云新来源 | 微软研究院AI头条&#xff08;ID:MSRAsia&#xff09;【导读】人工智能的蓬勃发展离不开云计算所带来的强大算力&#xff0c;然而随着物联网以及硬件的快速发展&#xff0c;边缘计算正受到越来越多的关注。未来&#xff0c;智能边缘计算将与智能云计算互为…

WinAPI: 钩子回调函数之 SysMsgFilterProc

为什么80%的码农都做不了架构师&#xff1f;>>> SysMsgFilterProc(nCode: Integer; {}wParam: WPARAM; {}lParam: LPARAM {} ): LRESULT; {}//待续...转载于:https://my.oschina.net/hermer/blog/319736

提高C++性能的编程技术笔记:虚函数、返回值优化+测试代码

虚函数&#xff1a;在以下几个方面&#xff0c;虚函数可能会造成性能损失&#xff1a;构造函数必须初始化vptr(虚函数表)&#xff1b;虚函数是通过指针间接调用的&#xff0c;所以必须先得到指向虚函数表的指针&#xff0c;然后再获得正确的函数偏移量&#xff1b;内联是在编译…

ICCV 2019 | 无需数据集的Student Networks

译者 | 李杰 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文是华为诺亚方舟实验室联合北京大学和悉尼大学在ICCV2019的工作。摘要在计算机视觉任务中&#xff0c;为了将预训练的深度神经网络模型应用到各种移动设备上&#xff0c;学习一个轻便的网络越来越重要。…

oc中特殊字符的判断方法

-(BOOL)isSpacesExists { // NSString *_string [NSString stringWithFormat:"123 456"]; NSRange _range [self rangeOfString:" "]; if (_range.location ! NSNotFound) { //有空格 return YES; }else { //没有空格 return NO; } } -(BOOL)i…

理解 Delphi 的类(十) - 深入方法[23] - 重载

为什么80%的码农都做不了架构师&#xff1f;>>> {下面的函数重名, 但参数不一样, 此类情况必须加 overload 指示字;调用时, 会根据参数的类型和个数来决定调用哪一个;这就是重载. }function MyFun(s: string): string; overload; beginResult : 参数是一个字符串: …