课件下载地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/RNN (v2).pdf
视频:https://www.bilibili.com/video/av9770190/?p=25
讲解LSTM最好的文章:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
RNN是一种比较复杂的网络结构,每一个layer还会利用上一个layer的一些信息。

比如说,我们要做slot filling的task。我们有两个句子,一个是“arrive Taipei on November 2nd”,另一个是“leave Taipei on November 2nd”。我们可以发现在第一个句子中,Taipei是destination,而第二个句子中Taipei是departure。如果我们不去考虑Taipei前一个词的话,Taipei的vector只有一个,那么同样的vector进来吐出的predict就是一致的。所以我们在做的时候就需要把前一个的结果存起来,在下一个词进来的时候用了参考。

所以这样我们就在neuron中设计一个hidden layer来存储这个值,如下图中a1,a2所示,相当于让神经网络拥有记忆能力。

我们用这个网络来举例。假设我们每个weight都是1,bias=0,每个activation都是linear的。那么我们现在有一个序列(1,1),(1,1),(2,2),那么一开始memory里面的值是(a1=0,a2=0),现在将序列第一个值传入network,我们得到(x1=1,x2=1),因为active function都是linear的,所以经过第一个hidden layer,我们输出的就是1×a1+1×a2+1×x1+1×x2,其中a1=a2=0,两个节点一致。所以第一个hidden layer得到(2,2)(绿色方块所示),同时我们将(2,2)保存起来,更新一下得到(a1=2,a2=2),output layer是(4,4),所以得到第一个(y1=4,y2=4)。第二个input (1,1),同样计算一下,hidden layer得到的是(6,6)和(a1=6,a2=6),output layer是(12,12)。同理第三个input最后得到的output是(32,32),所最后得到的三个output序列是(4,4),(12,12),(32,32)。以此类推。

那么我们可以想一下,如果现在的序列顺序变化一下,结果是否会不一致?如果现在的序列是(1,1),(2,2),(1,1),我们得到的是(4,4),(16,16),(36,36)。结果发生了变化。所以RNN对序列是敏感的,这样的特性就表示,在slot filling的task里面,我们前面的arrive和leave将会影响后面接着的Taipei的结果。

当然RNN也可以是深度的,即有多层hidden layer(绿色方框),设计上就是

这种深度的设计有两种方法

Elaman Network中,store的值是hidden layer里的值;Jordan Networkde 的store里存的是output的值

传说Jordan Network一般效果会比较好。另外RNN也可以双向训练:将双向RNN的输出结果都存在y(t)单元中。

这里也需要注意一下,RNN不是训练好多个NN,而是一个NN用好多遍。所以可以看到RNN里面的这些network的参数都是一致的。

那这个是一个非常原始简单的RNN,每一个输入都会被memory记住。现在RNN的标准做法基本上已经是LSTM。LSTM是一个更加复杂的设计,最简单的设计,每一个neuron都有四个输入,而一般的NN只有一个输入。

LSTM的一个简单结构长这样:(某些公司在招聘AI算法工程师时,会考察应聘者画出LSTM的结构,如vivo)
这里给读者遗留一个小case:LSTM是谁的缩写,Long Short-Term Memory 还是Long-Short Term Memory?二者字面表达的意思是不一样的~

具体表示如下:

C表示Memory中存储的原始值,C’表示新的存储值。
可以看到,一个output受到三个gate的影响,首先是input gate决定一个input是否可以进入memory cell,forget gate决定是否要忘记之前的memory,而output gate决定最后是否可以输出。这样一个非常复杂的neuron。

那么实作上这个neuron是如何工作的呢?假设我们现在有一个最简单的LSTM,每个gate的input都是一样的vector,那么我们这边在做的时候就是每一个input乘以每个gate的matrix,然后通过active function进行计算。这里做一个最简单的人肉LSTM。假设我们有一个序列是:

我们希望,当x2=1的时候,我们将x1加入memory中,当x2=−1的时候,memory重置为0,当x3=1的时候,我们输出结果。

那么我们再假设一个很简单的LSTM,长这样:

这个cell的input activate function是linear的,memory cell的activate function也是linear的。

那么我们可以将上面的序列简化一下

现在,将第一个元素放进来,我们得到是3,input gate部分的结果是90,经过activate function得到的是1,所以允许通过进入memory cell。forget gate这里计算的结果是110,经过activate function(Sigmoid)是1,所以我们记住这个值(这里要注意,虽然这个gate叫forget gate,但是当取值是1的时候其实是记住,0的时候是遗忘)。然后到output gate这里,output gate计算是-10,activate function输出是0,所以我们不output结果。

输入下一个元素(4,1,0)。直接输入计算是4,经过input gate,得到的是4。因为原来memory cell里面已经存了3,所以这一轮的计算是原来的memory加上新进入的4,得到7。然后output gate依然关闭,所以memory cell还是存7。

第三个元素类似的计算,发现input gate关闭,所以没法进入memory cell,因此memory cell没有更新。同时output gate关闭,没有输出。

第四个元素进入,input gate关闭,memory cell不更新,但是这时候output gate的activate function得到1,所以开放输出结果。因为之前memory cell里面存放的是7,所以输出7。但是要注意一点,虽然memory cell的值输出了,里面的值并没有被清空,仍然保留着,所以这个时候的memory cell还是7。

最后一个元素进入,input gate关闭,memory cell不更新,这时候,forget gate的activate function得到的是0,所以我们清空记忆,memory cell里面现在是0。output gate仍然关闭,所以没有output。

上面五个过程用图表示如下:




那时做的时候,一个简化的LSTM是:

如图中,我们输入一个原始的xt,会通过四个linear transform变成四个vector,然后每个vector输入到LSTM对应的gate。这里要注意的是,转换后的z有多少个维度,那么我们就需要建立多少个LSTM的cell,同时,每次进入cell训练的只是z的一个维度。

这是实作上的运算过程:

上面是最simple的LSTM,实际的LSTM如下图:输入不仅是xt,还有ct和ht-1。

嗯,复杂。不过这是现在LSTM的标准做法。不用担心,虽然上述结构你可能不太清楚,但是Keras可以直接调用LSTM。

RNN很难训练,因为有个问题就是可能梯度爆炸,有可能梯度消失。我们用一个最简单的模型来体验一下这个问题。假设我们现在的模型是非常simple的RNN,activate function是linear的,如下图:

我们可以发现,如果我们有1000个cell,那么我们的weight从1 update到1.01的时候,到了第一千个输出就从原来的1变成了2w,梯度爆炸了。但是当我们weight从1 update到0.99,那么到了第一千个输出就变成了0。更极端一点,如果我们因为之前选择了一个很大的lr,那么我们一步就把weight调到了0.01,我们发现,第一千个输出还是0。所以一般的RNN难以训练是有两个问题的,一个是梯度爆炸,一个是梯度消失。

那么LSTM在实现的时候,因为有了forget gate的存在,只要forget gate长期保持开启,那么很久以前的数据会持续影响后面的数据,所以可以抹消掉梯度消失的问题。另外memory cell里面的值是加起来而不是simple RNN里面直接抹消的,所以这也是能解决梯度消失的问题。

原文参考:https://samaelchen.github.io/machine_learning_step16/

台大李宏毅机器学习(一)——RNNLSTM相关推荐

  1. 台大李宏毅机器学习课程

    [机器学习入门] 台大李宏毅机器学习课程,转载来自:https://blog.csdn.net/soulmeetliang/article/details/77461607 TOPIC CONTENT ...

  2. 台大李宏毅机器学习公开课2020版登陆B站

    课程简介: 真正大师的课程往往都是免费的,诸如吴恩达,李飞飞等.不过大家应该对李宏毅老师也不陌生吧?很多机器学习初学者,首选李宏毅老师.毕竟中文授课,而且他讲课通俗易懂.课程案例生动有趣(还记得宝可梦 ...

  3. 中文课程!台大李宏毅机器学习公开课2019版上线

    授权转载自机器之心, 未经许可禁止二次转载 台大教授李宏毅的机器学习课程经常被认为是中文开放课程中的首选.李教授的授课风格风趣幽默,通俗易懂,其课程内容中不仅有机器学习.深度学习的基础知识,也会介绍 ...

  4. 台大李宏毅机器学习2021

    ML 2021 Spring (ntu.edu.tw)https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.htmlDiscussion:ML2021S ...

  5. python线性回归预测pm2.5_线性回归预测PM2.5----台大李宏毅机器学习作业1(HW1)

    一.作业说明 给定训练集train.csv,要求根据前9个小时的空气监测情况预测第10个小时的PM2.5含量. 训练集介绍: (1).CSV文件,包含台湾丰原地区240天的气象观测资料(取每个月前20 ...

  6. 台大李宏毅2017机器学习国语课程(更新)

    台大李宏毅2017机器学习国语课程(更新) 本博客转载自:新浪微博爱可可-爱生活 [台大李宏毅2017机器学习国语课程(更新)]"Machine Learning (Hung-yi Lee, ...

  7. 【必收藏】台大李宏毅老师课程 | 资源汇总、笔记总结与索引

    2020年7月20日至2020年8月18日,我刷完了台大李宏毅老师的深度学习/机器学习相关课程,我分为了 64 个大课时,记录了 64 篇笔记. 我对于李老师课程感到惊讶又欣喜: 惊讶在于,李老师能把 ...

  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (1)Introduction of machine Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (1)Introduction of machine Learning 台大李宏毅讲的这门课应该不错,课程链接: http://b ...

  9. 台大李宏毅教授的神经网络教程

    链接: https://pan.baidu.com/s/16mXyYDJnGh5_zRttg-WW5A 密码: fa18 台大李宏毅教授,含ppt.pdf.视频.

最新文章

  1. drop truncate delete区别
  2. Jersey Restful Application with tomcat
  3. CTFshow 命令执行 web76
  4. petshop详解之五:PetShop之业务逻辑层设计
  5. dropbox解决办法
  6. mac部署文件服务器,MAC 搭建本地服务器
  7. KNN算法的简单实现
  8. apple手表android手机,Apple Watch 4发布了,安卓手机用户如何选择呢?
  9. C语言排序方法-----选择排序法
  10. android的多行文本框的值,Swift - 多行文本输入框(UITextView)
  11. JavaWeb初学者session的使用
  12. 【每日算法Day 89】手动实现字符串转整数(atoi)函数,你会吗?
  13. html相册魔方代码,魔方相册制作方法现成的魔方相册代码:
  14. 拼多多业绩增长难继,品牌形象陷于信任危机
  15. [单片机框架][bsp层][N32G4FR][bsp_flash] flash配置和使用
  16. windows虚拟机dhcp服务器,无法访问虚拟机中的DHCP服务器
  17. struct和typedef struct的用法和区别
  18. 外星人入侵游戏python学习心得——创建第一个外星人在左上角
  19. solidworks2014可否保存成以前版本?--问题解决
  20. 联想Thinkpad E420 重装系统

热门文章

  1. C++ Eigen类
  2. JavaScript合并网页表格中内容相同的相邻单元格
  3. DataWorks2.0的“业务流程”与1.0的“工作流”的对比...
  4. python 汉字 和 urlEncode 编码 互转
  5. 我在拼多多的三年......
  6. 几种恒流电路的分析和应用
  7. 年终总结等汇报类PPT写法
  8. Keil uVision5新建工程模板
  9. python求满足条件的值的个数_Python list中选择满足某种条件的数据操作
  10. 创建 dict 的几种方法学习小结