上海高端网站制作公司,如何做企业税收筹划,微营销实战技巧全集,推广seo是什么意思参考博客
Class 5: 序列模型Sequence Models
Week 1: 循环神经网络RNN (Recurrent) 文章目录Class 5: 序列模型Sequence ModelsWeek 1: 循环神经网络RNN (Recurrent)目录序列模型-循环神经网络1.序列模型的应用2.数学符号3.循环神经网络模型传统标准的神经网络循环神经网络的…参考博客
Class 5: 序列模型Sequence Models
Week 1: 循环神经网络RNN (Recurrent) 文章目录Class 5: 序列模型Sequence ModelsWeek 1: 循环神经网络RNN (Recurrent)目录序列模型-循环神经网络1.序列模型的应用2.数学符号3.循环神经网络模型传统标准的神经网络循环神经网络的前向传播4.穿越时间的反向传播5.不同类型的RNN6.语言模型和序列生成什么是语言模型7.新序列采样8.RNN的梯度消失9.GRU单元10.LSTM11. 双向RNN12.深层RNN目录
本课程将教你如何建立自然语言音频和其他序列数据的模型。 由于深入的学习序列算法的运行速度远远超过两年前这使得语音识别音乐合成聊天机器人机器翻译自然语言理解等许多令人兴奋的应用成为可能。 通过本课程你将学到 了解常见的序列模型是如何创建的能够知道如何选择常见的序列模型并知道如何训练他们知道如何将序列模型应用在常见的应用上如文本的翻译自然语言处理文本的合成等等 序列模型-循环神经网络
1.序列模型的应用
循环神经网络RNN之类的模型在语音识别、自然语言处理和其他领域中引起变革。
语音识别将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。音乐生成生成音乐乐谱。只有输出的音乐乐谱是序列数据输入可以是空或者一个整数。情感分类将输入的评论句子转换为相应的等级或评分。输入是一个序列输出则是一个单独的类别。DNA序列分析找到输入的DNA序列的蛋白质表达的子序列。机器翻译两种不同语言之间的想换转换。输入和输出均为序列数据。视频行为识别识别输入的视频帧序列中的人物行为。命名实体识别从输入的句子中识别实体的名字 在进行语音识别时给定了一个输入音频片段 并要求输出对应的文字记录 。这个例子里输入和输出数据都是序列模型因为 是一个按时播放的音频片段输出 是一系列单词。所以之后将要学到的一些序列模型如循环神经网络等等在语音识别方面是非常有用的。音乐生成问题是使用序列数据的另一个例子在这个例子中只有输出数据 是序列而输入数据可以是空集也可以是个单一的整数这个数可能指代你想要生成的音乐风格也可能是你想要生成的那首曲子的头几个音符。输入的 可以是空的或者就是个数字然后输出序列 。在处理情感分类时输入数据 是序列你会得到类似这样的输入“There is nothing to like in this movie.”你认为这句评论对应几星序列模型在DNA序列分析中也十分有用你的DNA可以用A、C、G、T四个字母来表示。所以给定一段DNA序列你能够标记出哪部分是匹配某种蛋白质的吗在机器翻译过程中你会得到这样的输入句“Voulez-vou chante avecmoi?”法语要和我一起唱么然后要求你输出另一种语言的翻译结果。在进行视频行为识别时你可能会得到一系列视频帧然后要求你识别其中的行为。在进行命名实体识别时可能会给定一个句子要你识别出句中的人名。 所以这些问题都可以被称作使用标签数据 作为训练集的监督学习。但从这一系列例子中你可以看出序列问题有很多不同类型。有些问题里输入数据 和输出数据都是序列但就算在那种情况下和有时也会不一样长。或者像上图编号1所示和上图编号2的和有相同的数据长度。在另一些问题里只有 或者只有是序列。
2.数学符号
本节先从定义符号开始一步步构建序列模型。
比如说你想要建立一个序列模型它的输入语句是这样的“Harry Potter and Herminoe Granger invented a new spell.”(这些人名都是出自于J.K.Rowling笔下的系列小说Harry Potter)。假如你想要建立一个能够自动识别句中人名位置的序列模型那么这就是一个命名实体识别问题这常用于搜索引擎比如说索引过去24小时内所有新闻报道提及的人名用这种方式就能够恰当地进行索引。命名实体识别系统可以用来查找不同类型的文本中的人名、公司名、时间、地点、国家名和货币名等等。 现在给定这样的输入数据假如你想要一个序列模型输出使得输入的每个单词都对应一个输出值同时这个能够表明输入的单词是否是人名的一部分。技术上来说这也许不是最好的输出形式还有更加复杂的输出形式它不仅能够表明输入词是否是人名的一部分它还能够告诉你这个人名在这个句子里从哪里开始到哪里结束。比如Harry Potter上图编号1所示、Hermione Granger上图标号2所示。
更简单的那种输出形式:
这个输入数据是9个单词组成的序列所以最终我们会有9个特征集和来表示这9个单词并按序列中的位置进行索引、、等等一直到来索引不同的位置我将用来索引这个序列的中间位置。意味着它们是时序序列但不论是否是时序序列我们都将用来索引序列中的位置。
输出数据也是一样我们还是用、、等等一直到来表示输出数据。同时我们用来表示输入序列的长度这个例子中输入是9个单词所以。我们用来表示输出序列的长度。在这个例子里上个视频里你知道和可以有不同的值。
你应该记得我们之前用的符号我们用来表示第个训练样本所以为了指代第个元素或者说是训练样本i的序列中第个元素用这个符号来表示。如果是序列长度那么你的训练集里不同的训练样本就会有不同的长度所以就代表第个训练样本的输入序列长度。同样代表第个训练样本中第个元素就是第个训练样本的输出序列的长度。
所以在这个例子中但如果另一个样本是由15个单词组成的句子那么对于这个训练样本。
既然我们这个例子是NLP也就是自然语言处理这是我们初次涉足自然语言处理一件我们需要事先决定的事是怎样表示一个序列里单独的单词你会怎样表示像Harry这样的单词实际应该是什么
接下来我们讨论一下怎样表示一个句子里单个的词。想要表示一个句子里的单词第一件事是做一张词表有时也称为词典意思是列一列你的表示方法中用到的单词。这个词表下图所示中的第一个词是a也就是说词典中的第一个单词是a第二个单词是Aaron然后更下面一些是单词and再后面你会找到Harry然后找到Potter这样一直到最后词典里最后一个单词可能是Zulu。 因此a是第一个单词Aaron是第二个单词在这个词典里and出现在367这个位置上Harry是在4075这个位置Potter在6830词典里的最后一个单词Zulu可能是第10,000个单词。所以在这个例子中我用了10,000个单词大小的词典这对现代自然语言处理应用来说太小了。对于商业应用来说或者对于一般规模的商业应用来说30,000到50,000词大小的词典比较常见但是100,000词的也不是没有而且有些大型互联网公司会用百万词甚至更大的词典。许多商业应用用的词典可能是30,000词也可能是50,000词。不过我将用10,000词大小的词典做说明因为这是一个很好用的整数。
如果你选定了10,000词的词典构建这个词典的一个方法是遍历你的训练集并且找到前10,000个常用词你也可以去浏览一些网络词典它能告诉你英语里最常用的10,000个单词接下来你可以用one-hot表示法来表示词典里的每个单词。
举个例子在这里表示Harry这个单词它就是一个第4075行是1其余值都是0的向量上图编号1所示因为那是Harry在这个词典里的位置。
同样是个第6830行是1其余位置都是0的向量上图编号2所示。
and在词典里排第367所以就是第367行是1其余值都是0的向量上图编号3所示。如果你的词典大小是10,000的话那么这里的每个向量都是10,000维的。
因为a是字典第一个单词对应a那么这个向量的第一个位置为1其余位置都是0的向量上图编号4所示。
所以这种表示方法中指代句子里的任意词它就是个one-hot向量因为它只有一个值是1其余值都是0所以你会有9个one-hot向量来表示这个句中的9个单词目的是用这样的表示方式表示用序列模型在和目标输出之间学习建立一个映射。我会把它当作监督学习的问题我确信会给定带有标签的数据。
那么还剩下最后一件事我们将在之后的视频讨论如果你遇到了一个不在你词表中的单词答案就是创建一个新的标记也就是一个叫做Unknow Word的伪造单词用作为标记来表示不在词表中的单词我们之后会讨论更多有关这个的内容。
总结一下本节课的内容我们描述了一套符号用来表述你的训练集里的序列数据和在下节课我们开始讲述循环神经网络中如何构建到的映射。
3.循环神经网络模型
传统标准的神经网络
对于学习X和Y的映射我们可以很直接的想到一种方法就是使用传统的标准神经网络。也许我们可以将输入的序列X以某种方式进行字典编码以后如one-hot编码输入到一个多层的深度神经网络中最后得到对应的输出Y。如下图所示 但是结果表明这种方法并不好主要是存在下面两个问题
一、是输入和输出数据在不同例子中可以有不同的长度不是所有的例子都有着同样输入长度或是同样输出长度的。即使每个句子都有最大长度也许你能够填充pad或零填充zero pad使每个输入语句都达到最大长度但仍然看起来不是一个好的表达方式。
二、一个像这样单纯的神经网络结构它并不共享从文本的不同位置上学到的特征。具体来说如果神经网络已经学习到了在位置1出现的Harry可能是人名的一部分那么如果Harry出现在其他位置比如时它也能够自动识别其为人名的一部分的话这就很棒了。这可能类似于你在卷积神经网络中看到的你希望将部分图片里学到的内容快速推广到图片的其他部分而我们希望对序列数据也有相似的效果。和你在卷积网络中学到的类似用一个更好的表达方式也能够让你减少模型中参数的数量。
之前我们提到过这些上图编号1所示的…………都是10,000维的one-hot向量因此这会是十分庞大的输入层。如果总的输入大小是最大单词数乘以10,000那么第一层的权重矩阵就会有着巨量的参数。但循环神经网络就没有上述的两个问题。
循环神经网络作为一种新型的网络结构在处理序列数据问题上则不存在上面的两个缺点。在每一个时间步中循环神经网络会传递一个激活值到下一个时间步中用于下一时间步的计算。如下图所示 这里需要注意在零时刻我们需要编造一个激活值通常输入一个零向量有的研究人员会使用随机的方法对该初始激活向量进行初始化。同时上图中右边的循环神经网络的绘制结构与左边是等价的。
循环神经网络是从左到右扫描数据的同时共享每个时间步的参数。 上述循环神经网络结构的缺点每个预测输出y^t仅使用了前面的输入信息而没有使用后面的信息。Bidirectional RNN双向循环神经网络可以解决这种存在的缺点。
循环神经网络的前向传播 RNN前向传播示意图:
4.穿越时间的反向传播
之前我们已经学过了循环神经网络的基础结构在本节视频中我们将来了解反向传播是怎样在循环神经网络中运行的。和之前一样当你在编程框架中实现循环神经网络时编程框架通常会自动处理反向传播。但我认为在循环神经网络中对反向传播的运行有一个粗略的认识还是非常有用的让我们来一探究竟 5.不同类型的RNN
对于RNN不同的问题需要不同的输入输出结构。 6.语言模型和序列生成
在自然语言处理中构建语言模型是最基础的也是最重要的工作之一并且能用RNN很好地实现。
什么是语言模型
对于下面的例子两句话有相似的发音但是想表达的意义和正确性却不相同如何让我们的构建的语音识别系统能够输出正确地给出想要的输出。也就是对于语言模型来说从输入的句子中评估各个句子中各个单词出现的可能性进而给出整个句子出现的可能性。
7.新序列采样 8.RNN的梯度消失 对于梯度消失问题在RNN的结构中是我们首要关心的问题也更难解决虽然梯度爆炸在RNN中也会出现但对于梯度爆炸问题因为参数会指数级的梯度会让我们的网络参数变得很大得到很多的Nan或者数值溢出所以梯度爆炸是很容易发现的我们的解决方法就是用梯度修剪也就是观察梯度向量如果其大于某个阈值则对其进行缩放保证它不会太大。
9.GRU单元 10.LSTM
GRU能够让我们在序列中学习到更深的联系长短期记忆long short-term memory, LSTM对捕捉序列中更深层次的联系要比GRU更加有效。
11. 双向RNN 12.深层RNN