2021 MIT || 麻省理工机器学习导论(二)RNN LSTMs循环神经网络

2021 MIT || 麻省理工机器学习导论(二)

YOUTube:MIT 6.S191: Introduction to Deep Learning(要梯子,可以去B站上找找,好像也有)

这些是我在学习一点机器学习后,回过头来重新学习相关的基础,内容主要包含了上课的笔记,以及一些见解。关于各个模块更详细的内容请另寻它处,这篇笔记主要是对机器学习框架的构建。

上一节课,我们介绍了感知机,以及一些神经网络的架构。

这节课,我们开始一步一步的介绍如何利网络来处理序列数据。

序列的意义(The significance of sequence)

给你一个球,让你预测这个球接下来的运动轨迹

image-20210812151631997

由于我们对球的不了解,所以我们显然只能随意的猜测。

但是,如果我们给出球之前的运动轨迹,那么我们可以有根据的预测出球接下的轨迹。

image-20210812100053667

而对于序列的预测,就跟这个球的预测相似。

生活中的序列

  • 音频:一段完整的音频可以被切割成一个序列

image-20210812100753399 ⟶ \longrightarrow image-20210812100743558

文本:一个句子可以被拆成一个个单词或字母。

image-20210812101050019

image-20210812101122825image-20210812101130355

时间步(time step)

每一个独立的字母或者单词,可以被看做序列中的时间步。

用处

我们可以通过序列预测生活中的很多东西:

动作预测,基因序列预测,气候预测等等

序列网络模型

这个是我们上节课中介绍的预测模型:

用于预测一个学生是否可以通过考试,这种模型并没有与序列相关。

image-20210812101705269

以下三种是三种常见的序列模型

多对一

输入一段话(多个输入),得到这个句子的情绪(一个输出)

一对多

输入一张图片(一个输入),得到用一段话来描述(多个输出)

多对多

文本翻译

image-20210812101658076

那么为了得到序列间的关系,网络架构应该发生怎么样的变化呢?

架构

这个是上节课我们介绍的多层感知机,它的输入x代表一个时间步

image-20210812104848713

我们在接下来的介绍中将它简化为下图(我们暂且叫它细胞块)

image-20210812105015539

其中 x t x_t xt​​代表时间步为t的输入。

我们的输入为 x t x_t xt

输出为向量 y t ^ \hat{y_t} yt^

递归的神经元

经元一个时间步的向量输入后,都会得到一个对应的输出向量。而每一个细胞块之间是不存在联系。为了获取前后时间步之间的联系,我们便把这个细胞块得到的信息传递(

每一个时间步的向量输入后,都会得到一个对应的输出向量。而每一个细胞块之间是不存在联系。为了获取前后时间步之间的联系,我们便把这个细胞块得到的信息传递( h t h_t ht)给下一个细胞块,以便于下一个细胞块在做判断的时候可以结合过去的信息。
y ^ = f ( x t , h t − 1 ) \hat{y}=f(x_t,h_{t-1}) y^=f(xt,ht1)
这个图片可以很好的体现出递归的思想:

image-20210812105916333
记忆块的获取

h t = f W ( x t , h t − 1 ) h_t=f_W{(x_t,h_{t-1})} ht=fW(xt,ht1)

f W f_W fW是带有参数的的函数(即可以通过训练改变参数)。可以理解为一些卷积+激活函数的操作。

更新隐藏状态

h t = t a n h ( W h h T h t − 1 + W x h T x t ) h_t=tanh(W^T_{hh}h_{t-1}+W^T_{xh}x_t) ht=tanh(WhhTht1+WxhTxt)

得到输出

y ^ = W h y T h t \hat y=W^T_{hy}h_t y^=WhyTht

PS

注意,其中的参数矩阵 W h h , W h y , W x h W_{hh},W_{hy},W_{xh} Whh,Why,Wxh在不同时间步中是共用的,这样可以降低模型的大小。

image-20210812111703338

优点

  • 解决长变量序列
  • 建立长范围的依赖
  • 包含顺序信息
  • 共享参数

我们把这种网络叫做Recurrent Neural Network (RNN)

RNN

我们要搭建一个预测单词循环神经网络

input

网络肯定不能直接理解单词的含义,所以我们应该把单词转化为用数字代表的向量,把数字输入网络。

image-20210812121933738

我们要把每个单词转化为固定长度的向量。

one-hot

下面介绍one-hot:

  • 词库中有N个词,则存在一个长的N向量
  • 对于这个向量的每个下标都代表一个单词
  • 如果这个要表示cat这个单词,并且cat所处的下标为2
  • 那么cat这个单词就可以转化为一列长为N,除了下标为2的值为1,其他值都为0的向量(存在为1,不存在为0)

image-20210812121615269

我们将词向量输入到网络中,这样我们就可以将词库中的词下标索引映射到一个低纬的空间(上图最右边),这样就可以把相关联的词汇划分在一起

当然,还有一些其他的转化方式,请自行搜索

需求

作为预测句子,它肯定要满足一下许多条件:

可以输入一定范围内任意长度的句子

image-20210812122711961

可以获得长距离的信息

image-20210812122659481

可以在考虑句子中词的顺序

image-20210812122734899

我们看到,RNN几乎满足所以需求。

Backpropagation Through Time(BPTT)随时间的反向传播

image-20210812130935860

所有的loss按照时间步的顺序,从最近的时间步到最开始的序列进行回流

image-20210812131350220

在反向传播的过程中计算梯度,涉及到梯度与权重矩阵的相乘。

如果我们要计算梯度 h 0 h_0 h0​,那么其中涉及到 W h h W_{hh} Whh的多次相乘。这就可能会造成一些问题。

  • 梯度爆炸:许多相乘的值都>1,那么势必会导致最后的梯度变的特别大

  • 梯度消失:许多值都<1则会造成,梯度变小趋近于0

    在较短序列中,由于乘的权重个数较少,不易出现问题。但是RNN很明显对长序列的处理,心有余,而力不足。

解决方法

激活函数

选用ReLU为激活函数

image-20210812132855616

其在x<0时梯度为0,在x>0时,梯度不变,恒为1。

所以使用ReLU函数可以防止在x>0时,f’的梯度收缩。

image-20210812130708779

初始化权重
image-20210812133503303

把权重初始化为单位矩阵,这样就能防止权重收缩为0

门控模块

image-20210812130647153

引入一个机制,用来筛选,什么信息能通过,什么不能通过。

其现在作为循环神经网络中最常用的。

Long Short Term Memory networks(LSTMs)长短时记忆网络就是依赖这个门控机制进行搭建的。下面我们便来介绍一下LSTMs。

LSTMs

LSTMs是大多数顺序网络中主力。

这个是RNN中的结构

image-20210812134036643

下面是STMLs的结构

image-20210812134136414
  • image-20210812134612649:点乘
  • image-20210812134633333:sigmoid

注意:

image-20210814163358854

门控

该模块主要是添加了一个控制信息的能力,我们来看看这个是怎么实现的。

image-20210812152334185

sigmoid 是把输入转化为0到1之间。

我们可以把其看作为调制以及捕获信息,在判断信息的重要性。特别重要就为1,全部保留。无用的信息,就为0。

过程

一个LSTMs模块一共包括4步:

  1. Forget
image-20210812152351358

忘记之前的不相关的状态

  1. store

得到当前与过去有关的信息

image-20210812152411375
  1. update

更新得到 c t c_{t} ct

image-20210812152425849
  1. Output

根据 c t − 1 h t − 1 x t c_{t-1} h_{t-1} x_t ct1ht1xt得到输出

image-20210812152438326

通过这样的结构,网络可以更好的捕捉长距离,并且克服了梯度消失的问题

思想

  • 依靠输出维护细胞状态。(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)

缺陷

  1. Encoding bottleneck

用于翻译的网络可能会得到一大段的输入,那么这些输入会将会是很大的向量,而将单词转化为向量的过程就会损失很多重要的信息(个人理解)

  1. slow,no parallelization

网络采用迭代的思想,所以运行的时间长。并且网络无法并行的在GPU上训练。

  1. 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

持续更新……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值