2021 MIT || 麻省理工机器学习导论(二)RNN LSTMs循环神经网络
2021 MIT || 麻省理工机器学习导论(二)
YOUTube:MIT 6.S191: Introduction to Deep Learning(要梯子,可以去B站上找找,好像也有)
这些是我在学习一点机器学习后,回过头来重新学习相关的基础,内容主要包含了上课的笔记,以及一些见解。关于各个模块更详细的内容请另寻它处,这篇笔记主要是对机器学习框架的构建。
上一节课,我们介绍了感知机,以及一些神经网络的架构。
这节课,我们开始一步一步的介绍如何利网络来处理序列数据。
序列的意义(The significance of sequence)
给你一个球,让你预测这个球接下来的运动轨迹
由于我们对球的不了解,所以我们显然只能随意的猜测。
但是,如果我们给出球之前的运动轨迹,那么我们可以有根据的预测出球接下的轨迹。
而对于序列的预测,就跟这个球的预测相似。
生活中的序列
- 音频:一段完整的音频可以被切割成一个序列
⟶\longrightarrow⟶
文本:一个句子可以被拆成一个个单词或字母。
时间步(time step)
每一个独立的字母或者单词,可以被看做序列中的时间步。
用处
我们可以通过序列预测生活中的很多东西:
动作预测,基因序列预测,气候预测等等
序列网络模型
这个是我们上节课中介绍的预测模型:
用于预测一个学生是否可以通过考试,这种模型并没有与序列相关。
以下三种是三种常见的序列模型
多对一
输入一段话(多个输入),得到这个句子的情绪(一个输出)
一对多
输入一张图片(一个输入),得到用一段话来描述(多个输出)
多对多
文本翻译
那么为了得到序列间的关系,网络架构应该发生怎么样的变化呢?
架构
这个是上节课我们介绍的多层感知机,它的输入x代表一个时间步
我们在接下来的介绍中将它简化为下图(我们暂且叫它细胞块)
其中xtx_txt代表时间步为t的输入。
我们的输入为xtx_txt
输出为向量yt^\hat{y_t}yt^
递归的神经元
经元一个时间步的向量输入后,都会得到一个对应的输出向量。而每一个细胞块之间是不存在联系。为了获取前后时间步之间的联系,我们便把这个细胞块得到的信息传递(
每一个时间步的向量输入后,都会得到一个对应的输出向量。而每一个细胞块之间是不存在联系。为了获取前后时间步之间的联系,我们便把这个细胞块得到的信息传递(hth_tht)给下一个细胞块,以便于下一个细胞块在做判断的时候可以结合过去的信息。
y^=f(xt,ht−1)\hat{y}=f(x_t,h_{t-1}) y^=f(xt,ht−1)
这个图片可以很好的体现出递归的思想:
记忆块的获取
ht=fW(xt,ht−1)h_t=f_W{(x_t,h_{t-1})} ht=fW(xt,ht−1)
fWf_WfW是带有参数的的函数(即可以通过训练改变参数)。可以理解为一些卷积+激活函数的操作。
更新隐藏状态
ht=tanh(WhhTht−1+WxhTxt)h_t=tanh(W^T_{hh}h_{t-1}+W^T_{xh}x_t) ht=tanh(WhhTht−1+WxhTxt)
得到输出
y^=WhyTht\hat y=W^T_{hy}h_t y^=WhyTht
PS
注意,其中的参数矩阵Whh,Why,WxhW_{hh},W_{hy},W_{xh}Whh,Why,Wxh在不同时间步中是共用的,这样可以降低模型的大小。
优点
- 解决长变量序列
- 建立长范围的依赖
- 包含顺序信息
- 共享参数
我们把这种网络叫做Recurrent Neural Network (RNN)
RNN
我们要搭建一个预测单词循环神经网络
input
网络肯定不能直接理解单词的含义,所以我们应该把单词转化为用数字代表的向量,把数字输入网络。
我们要把每个单词转化为固定长度的向量。
one-hot
下面介绍one-hot:
- 词库中有N个词,则存在一个长的N向量
- 对于这个向量的每个下标都代表一个单词
- 如果这个要表示cat这个单词,并且cat所处的下标为2
- 那么cat这个单词就可以转化为一列长为N,除了下标为2的值为1,其他值都为0的向量(存在为1,不存在为0)
我们将词向量输入到网络中,这样我们就可以将词库中的词下标索引映射到一个低纬的空间(上图最右边),这样就可以把相关联的词汇划分在一起
当然,还有一些其他的转化方式,请自行搜索
需求
作为预测句子,它肯定要满足一下许多条件:
可以输入一定范围内任意长度的句子
可以获得长距离的信息
可以在考虑句子中词的顺序
我们看到,RNN几乎满足所以需求。
Backpropagation Through Time(BPTT)随时间的反向传播
所有的loss按照时间步的顺序,从最近的时间步到最开始的序列进行回流
在反向传播的过程中计算梯度,涉及到梯度与权重矩阵的相乘。
如果我们要计算梯度h0h_0h0,那么其中涉及到WhhW_{hh}Whh的多次相乘。这就可能会造成一些问题。
梯度爆炸:许多相乘的值都>1,那么势必会导致最后的梯度变的特别大
梯度消失:许多值都<1则会造成,梯度变小趋近于0
在较短序列中,由于乘的权重个数较少,不易出现问题。但是RNN很明显对长序列的处理,心有余,而力不足。
解决方法
激活函数
选用ReLU为激活函数
其在x<0时梯度为0,在x>0时,梯度不变,恒为1。
所以使用ReLU函数可以防止在x>0时,f’的梯度收缩。
初始化权重
把权重初始化为单位矩阵,这样就能防止权重收缩为0
门控模块
引入一个机制,用来筛选,什么信息能通过,什么不能通过。
其现在作为循环神经网络中最常用的。
Long Short Term Memory networks(LSTMs)长短时记忆网络就是依赖这个门控机制进行搭建的。下面我们便来介绍一下LSTMs。
LSTMs
LSTMs是大多数顺序网络中主力。
这个是RNN中的结构
下面是STMLs的结构
- :点乘
- :sigmoid
注意:
门控
该模块主要是添加了一个控制信息的能力,我们来看看这个是怎么实现的。
sigmoid 是把输入转化为0到1之间。
我们可以把其看作为调制以及捕获信息,在判断信息的重要性。特别重要就为1,全部保留。无用的信息,就为0。
过程
一个LSTMs模块一共包括4步:
- Forget
忘记之前的不相关的状态
- store
得到当前与过去有关的信息
- update
更新得到ctc_{t}ct
- Output
根据ct−1ht−1xtc_{t-1} h_{t-1} x_tct−1ht−1xt得到输出
通过这样的结构,网络可以更好的捕捉长距离,并且克服了梯度消失的问题
思想
依靠输出维护细胞状态。(Maintain a separate cell state from what is outputted)
使用“门控”来控制信息的流动
通过不间断梯度流的时间反向传播
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJbzo2h2-1628753086407)(https://gitee.com/Black_Friday/blog/raw/master/image/G$%60(DID%5D)]%5DU%5DSEMTN65O4%7B4.png)
缺陷
- Encoding bottleneck
用于翻译的网络可能会得到一大段的输入,那么这些输入会将会是很大的向量,而将单词转化为向量的过程就会损失很多重要的信息(个人理解)
- slow,no parallelization
网络采用迭代的思想,所以运行的时间长。并且网络无法并行的在GPU上训练。
- not long memory
虽然LTMs相比于RNN在获取长文本的能力上有提升,但是对于大段的文本翻译,能力依旧欠缺。
为了克服这些困难,一种叫注意力的方法诞生了
注意力(这部分内容请自行扩展)
这是一个非常牛的思想,也是现在流行的方法,其对于大规模的序列建模问题非常有效。
它不是以往的只能通过Encoder到Decoder来访问状态向量,而是Decoder可以访问原始序列中每个时间步之后的状态 和 网络在训练过程中实践学习到的这些向量的权重(这里你可以查阅相关的Encoder-Decoder知识)。
注意力模块直接从输入中学习哪些点和哪些状态是需要注意,就能轻松的捕获长期依赖。这是因为,训练这样的网络,只需要一次通过这个注意力模块,没有时间反向传播。并且这些注意力提供的机制,是种可以学习的记忆访问。
这个模块之所以被称作注意力,是因为它在学习权重,将注意力放在输入序列的不同部分,以有效的捕捉整个原始序列中的一种可访问的记忆。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoqlBTCY-1628753086408)(https://gitee.com/Black_Friday/blog/raw/master/image/image-20210812144539013.png)]
总结
RNN非常适合于序列建模任务模型序列
模块序列存在递归关系
通过时间反向传播训练RNN
像LSTMs这样的门控细胞让我们可以对长期依赖进行建模
这些模型可以用于音乐生成、分类、机器翻译等的模型
下篇2021 MIT || 麻省理工机器学习导论(三)Convolutional Neural Networks(CNN卷积神经网络)
2021年8月12日15:28:56
持续更新……
2021 MIT || 麻省理工机器学习导论(二)RNN LSTMs循环神经网络相关推荐
- 全球名校AI课程库(25)| MIT麻省理工 · 机器学习导论课程『Introduction to Machine Learning』
- 【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)
[李宏毅机器学习笔记]1.回归问题(Regression) [李宏毅机器学习笔记]2.error产生自哪里? [李宏毅机器学习笔记]3.gradient descent [李宏毅机器学习笔记]4.Cl ...
- 理论——RNN(循环神经网络)与LSTM(长短期记忆神经网络)
这里写目录标题 RNN 背景 结构 应用 梯度消失.爆炸 LSTM 长期依赖问题 LSTM网络 结构 RNN 背景 人类的思考具有连续性,我们常联系过去的经验来理解现在.比如阅读时我们常提及的&quo ...
- DL之RNN:循环神经网络RNN的简介、应用、经典案例之详细攻略
DL之RNN:循环神经网络RNN的简介.应用.经典案例之详细攻略 目录 循环神经网络RNN的简介 1.RNN的分类 1.RNN的常见算法分类 2.RNN的三种分类
- 【直观理解】一文搞懂RNN(循环神经网络)基础篇
推荐阅读时间8min~15min 主要内容简介:神经网络基础.为什么需要RNN.RNN的具体结构.以及RNN应用和一些结论 1神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够 ...
- (pytorch-深度学习)使用pytorch框架nn.RNN实现循环神经网络
使用pytorch框架nn.RNN实现循环神经网络 首先,读取周杰伦专辑歌词数据集. import time import math import numpy as np import torch f ...
- 循环取矩阵的某行_一文搞懂RNN(循环神经网络)基础篇
神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下: 将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特 ...
- Keras——用Keras搭建RNN回归循环神经网络
文章目录 1.前言 2.用Keras搭建RNN回归循环神经网络 2.1.导入必要模块 2.2.超参数设置 2.3.构造数据 2.4.搭建模型 2.5.激活模型 2.6.训练+测试 1.前言 这次我们用 ...
- 自然语言菜鸟学习笔记(七):RNN(循环神经网络)及变体(LSTM、GRU)理解与实现(TensorFlow)
目录 前言 RNN(循环神经网络) 为什么要用循环神经网络(RNN)? 循环神经网络(RNN)可以处理什么类型的任务? 多对一问题 一对多问题 多对多问题 循环神经网络结构 单层网络情况 正向传播 反 ...
最新文章
- vim+快捷键+常用+命令
- pat 1060. Are They Equal (25)
- Win7中aero peek的关闭与开启
- 享元模式 FlyWeight 结构型 设计模式(十五)
- 正则表达式的匹配模式
- 中国中文信息学会:第一届自然语言生成与智能写作大会讲习班正式发布
- 继续完善掼蛋游戏 其次说说朋友的情况
- 统计测序数据reads数和碱基数的几种方法
- linux如何敲打中文,vim敲字如弹琴 - linux-tao的个人空间 - OSCHINA - 中文开源技术交流社区...
- Java集合系列总结
- Linux 高性能服务器编程——多进程编程
- deepin linux mac主题,deepin,安装GNOME桌面环境,类mac界面美化
- 计算机的五笔咋么学,电脑五笔输入法怎么学
- NAND和NOR Flash的区别
- OCCT培训笔记(刘星讲)--第2天
- SMS短信通API——(3)SMS短信通资费标准
- 注册IMDB的API KEY
- 面对境外网络攻击,作为安全技术人员该如何有效防御?
- 依赖包存在,但是仍依然报找不到包的问题
- 基于GEE的制作全球任意地方时间序列数据动画的方法
热门文章
- html嵌入在线word编辑器
- 【进阶技术】一篇文章搞掂:Spring Cloud Stream
- 音频 图像 视频等数据的压缩与存储格式
- 前端:医院挂号平台(html+css+jquery)
- 思维导图 XMind 8 Update 8 Pro for Mac 中文破解版
- JS批量取消抖音关注脚本
- 基于51单片机的自动售货机Proteus仿真
- Springboot项目中com.mysql.cj.jdbc.Driver在yml文件中爆红的原因
- 荣耀战魂冥界回归服务器维护,荣耀战魂万圣节活动冥界的回归玩法及奖励介绍...
- java与移动智能设备开发_移动时,您应该如何处理所有智能家居设备?