带你玩转序列模型之循环神经网络(一)
目录
一.数学符号
二.循环神经网络RNN
1.图示网络原理和结构
2.RNN计算过程
3.前向传播&反向传播
三.不同类型的循环神经网络
一.数学符号
先来一个很简单的例子,输入一个句子,然后句子中的每一个单词都对应一个输出,表明此单词是否是人名。
x^(i)<t>代表第i个训练样本的序列中第t个元素,同理,y^(i)<t>代表第i个训练样本的序列中第t个元素对应的输出。
训练集里不同的训练样本的序列长度可能不一样。T_x是输入序列的长度,T_y是输出序列的长度。
T^(i)_x代表第i个训练样本的输入序列长度,T^(i)_y代表第i个训练样本的输出序列长度。
然后我们来看一下如何表示句子中的每个单词,即x^<t>到底是表示什么东西?
首先我们需要建立一个我们词典,这个词典中存放我们可能会用的词,然后可以用下标进行索引,
对于一般规模的商业应用来说,30000到50000词大小的词典比较常见,但是100000词的也不是没有,一些大型的互联网公司甚至可能用百万词的词典。
咱们这里用一个10000词的词典来举例,
构建词典的方式:遍历你的训练集,然后统计出使用频率前10000的词放到你的词典中(也可以参考网上的英文词典,他也会告诉你哪些词常用以及频率排名),然后用One-hot表示法来表示你自己创建的词典里的每个单词。如下图所示,训练示例中的每个单词其实都对应一个one-hot向量(10000*1,因为咱们的词典是10000个词),即one-hot向量中值为1对应的那个下标对应到词典中就是x^<t>对应的那个单词。
如果遇到了一个不在你词典当中的单词的话,我们需要做一个标记,也就是一个叫做Unknown Word的伪造单词,我们标记为<UNK>。
另外说明一点,咱们这个问题是用监督学习来做,所以肯定是有标签的。
二.循环神经网络RNN
1.图示网络原理和结构
我们先来看一下解决这个问题用一个咱们之前接触过的一个标准的神经网络怎么样呢?答案是否定的,原因有二:其一是我们不同的训练示例的输入序列和输出序列可能都不一样长,即便我们确定所有序列的最大长度,然后对不到这个长度的序列进行填充,仍旧不是好方法;其二标准的神经网络解决这个问题的话做不到特征信息的共享,比如我们在位置1确定了Harry可能是人名的一部分,然后下一个序列中Harry中又换到了别的位置,那么也将其识别为人名的一部分就很好了,但是标准的NN很难做到这个。
并且我们之前说过我们的one-hot向量是10000维的,所以神经网络的第一个隐藏层就会有很多的参数,过于庞大,然后我们接下来讲的这个网络结构就没有这个问题。
循环神经网络:
如上图,从左侧看起,我们输入一个序列,这个序列中的元素分别是x^<1>~x^<T_x>,上节课已经讲过T_x是输入序列的长度,这里每一个竖条都是单个的隐藏层(并不是一个神经网络,当每个竖条代表两个及两个以上的隐藏层时,就变成了深度循环神经网络了,DRNN),先把序列的第一个元素x^<1>输入网络,得到一个预测yhat^<1>,并且在时间步1时还向后传送了一个激活值a^<1>,然后再向这个神经网络输入序列的第二个元素x^<2>,注意此时预测输出yhat^<2>不是仅仅根据输入x^<2>算出来的,是根据x^<2>和时间步1传过来的a^<1>一块算出来的,然后时间步2不仅输出了yhat^<2>,还往下一步输出了时间步2得到的激活值a^<2>,后面依此类推,直到最后一个元素输入网络得到一个yhat^<T_y>。另外注意时间步1时不光是只输入x^<1>,还输入了初始激活值a^<0>,通常我们把这个初始激活值设为零向量。
上面的文字详细的说明了RNN的部分过程,最右侧红框里的是另外一种表示形式,直观的可以看到是个循环的形式。
然后我们往下看RNN的更详细的过程:
先来说一下RNN的权重参数,x^<t>和神经网络的隐藏层的权重参数是W_ax,对于激活值a^<t>对应的参数是W_aa,对于输出yhat^<t>的对应的参数是W_ya。
但是上面的这个RNN有个缺点就是它在某一时刻的预测仅使用了序列中之前的输入信息,并没有使用序列中后部分的信息,比如我们得到yhat^<3>可以看作仅仅只是通过x^<3>和时间步1和时间步2的信息得来的,而后面的x^<4>~x^<T_x>我们没有用上(对于我们计算yhat^<3>来说),我们会在后面的双向循环神经网络(BRNN)中解决这个问题。不过现在这个单向的循环神经网络已经足够我们解释关键概念。
2.RNN计算过程
然后我们来看一下RNN具体计算了些什么:
循环神经网络中计算a^<t>经常用的激活函数是tanh,有时候也用RELU,但是tanh还是更通常的选择。而计算yhat^<t>时取决于输出是啥,如果二分类,那可能就选用sigmoid,如果是多分类问题,那就选用softmax。
具体计算公式见下图:
把上面的符号简化一下,就会得到下面的式子:
即用矩阵化简了,现代我快忘了基本上(捂脸哭),giao,不过这里先不必深究。大致看懂即可。
3.前向传播&反向传播
前向传播:
损失函数的定义中,比如还是我们上面的那个例子,y^<t>是标签1或0,代表这个单词是否是人名的一部分,然后yhat^<t>就是对于这个单词是否是人名的一部分的预测(一个概率)。损失就是各时间步的损失之和。
反向传播:
不说了吧,没啥可说的,框架都给你自动求导了,看个乐就行了,哈哈(开玩笑,想深究的可以去学反向传播算法)
Backpropagation through time,很cool的一个名字,时间反向传播,只可惜学会了我也回不到过去了(hhhh矫情一波)
三.不同类型的循环神经网络
我们上面讲的那个例子是输入序列的元素个数和输出序列的元素个数一样,Many to Many结构(多对多),即T_x=T_y,但是根据实际情况的不同,还有很多种情况,我们也得相应的修改RNN结构。
下图从左至右依次是多对多,多对一,一对一(一对一只是为了结构完整性画上的,其实不重要)
上图中间那个多对一举例:输入一段电影评论(文本),然后输出一个数(0-5,代表给电影的打分)。
然后下面是一对多和多对多(输入长度≠输出长度)的例子
一对多的例子就是音乐生成,你可以什么都不输入,或者只输入一个数(代表你喜欢的音乐类型或想要生成的音乐的第一个乐符等),然后生成一段音乐(注意这种结构一般会把上个时间步输出的yhat喂入下一个时间步的输入)。如下图左侧部分。
然后多对多(输入长度≠输出长度)的一个例子就是机器翻译,你输入一段英文,然后翻译成一段中文,那么输入输出长度可能不相等,该结构可以看成两部分。左边的输入部分是编码器,右边的输出部分是解码器。如下图右侧部分。
总结:
带你玩转序列模型之循环神经网络(一)相关推荐
- 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN
目录 0. 前言 1. RNN 计算图 2. RNN 前向传播 3. RNN 反向传播 4. 导师驱动过程(teacher forcing) 5. 不同序列长度的 RNN 如果这篇文章对你有一点小小的 ...
- 带你玩转序列模型之seq2seq模型定向(集束)搜索
目录 一.基础模型 二.选择最可能的句子 三.定向搜索 四.改进定向搜索 五.定向搜索的误差分析 一.基础模型 在这一周,你将会学习seq2seq(sequence to sequence)模型,从机 ...
- 带你玩转序列模型之Bleu得分注意力模型语音识别
目录 一.Bleu得分 二.注意力模型直观理解 三.注意力模型 四.语音识别 五.触发字检测 一.Bleu得分 先跳过,等回头用得到了再来补. 二.注意力模型直观理解 在本周大部分时间中,你都在使用这 ...
- 05.序列模型 W1.循环序列模型(作业:手写RNN+恐龙名字生成)
文章目录 作业1:建立你的循环神经网络 1. RNN 前向传播 1.1 RNN 单元 1.2 RNN 前向传播 2. LSTM 网络 2.1 LSTM 单元 2.2 LSTM 前向传播 3. RNN ...
- 05.序列模型 W1.循环序列模型
文章目录 1. 为什么选择序列模型 2. 数学符号 3. 循环Recurrent 神经网络模型 4. 通过时间的反向传播 5. 不同类型的循环神经网络 6. 语言模型和序列生成 7. 对新序列采样 8 ...
- 时序模型:循环神经网络(RNN)
1. 模型定义 循环神经网络(recurrent neural network, RNN)是一类专门设计处理不定长序列数据的神经网络. 与使用一种新计算1作为核心的卷积神经网络不同,循环神经网络仍使用 ...
- 深度学习系列 -- 序列模型之循环序列模型(Recurrent Neural Networks)
目录 1 为什么选择序列模型?(Why Sequence Models?) 2 数学符号(Notation) 3 循环神经网络(Recurrent Neural Network Model) 4 语言 ...
- 2020-10-21 吴恩达DL学习-C5 序列模型-W1 循环序列模型(1.9 GRU门控循环单元-改善梯度消失-在序列中学习非常深的连接-简化和完整版本-记忆细胞)
1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c 2.详细笔记网站(中文):http://www.ai-sta ...
- 【带你玩转主题模型Topic Model】—— 之 利用sklearn 实现Latetnt Dirichlet Allocation(LDA)主题模型
写在前面的话 9月份的第一篇blog, 正好是开学季,作为一个学生,hahahha, 我还是正正经经的贡献一篇认为比较干货的文章给大家吧. 我自己是花了很多时间去看懂LDA的算法了,当然了这篇文章不涉 ...
最新文章
- 阿里二面:redis分布式锁过期了但业务还没有执行完,怎么办
- EChart 标题 title 样式,x轴、y轴坐标显示,调整图表位置等
- 状态模式 设计模式_设计模式:状态
- [译] 论 Rust 和 WebAssembly 对源码地址索引的极限优化
- 使用wxWidgets编程——第一步
- censtos6.5安装java 8_Centos6.5 安装JDK
- Python之字符串正则匹配
- [日推荐]『蓝轨迹外语自学中心』免费的全能外语自学工具
- 拓端tecdat|R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
- zen3架构_曝Zen 3架构IPC性能将比Zen 2提升10~15%
- 单片机入门到高级开挂学习路径(附教程+工具)
- node中Async模块的用法
- JAVA使用RXTX编写串口调试工具-代码分析
- SBUS协议(20200210)
- jsp代码中ArrayList函数提示“无法解释为类型”
- 云服务器如何计算宽带
- win10打印机安装提示无法连接到打印机
- kafka(三):kafka broker
- 怎么用计算机向手机上传照片,老司机教你怎么把手机的照片传到电脑
- 小甲鱼python第二十讲(内嵌函数和闭包)
热门文章
- python画五角星和六角星程序_python画五角星和六角星程序
- HDU 5804 Price List (简单题)
- 产品经理 demo html,18个UI demo设计实例,深挖让用户愉悦的小惊喜
- CSS line-height属性
- android各个版本的新特性
- [转]使用jenkins实现持续集成
- Laravel防范xss攻击
- 中国农业大学专业学位计算机,中国农业大学(专业学位)计算机技术研究生考试科目和考研参考书目...
- 如何有效提升工作效率?其实就是这四点
- 变分原理(Variational Principle)