深度学习入门笔记 —— 循环神经网络 RNN

首先,明确 RNN 的主要任务是用于文本分类,而解决文本分类任务最经典的模型是词袋模型(Bag-of-Words Model),如图所示,输入是三个句子,词袋模型首先要定义一个词汇表 vocabulary,里面记录了单词与数字的对应关系,共 9 个单词,所以特征矩阵就有 9 列;然后特征矩阵的每一行对应一个输入样本,统计这 9 个单词在句子中的出现次数(词频),填入对应单词的位置即可;最后将特征矩阵与标签 y 训练分类器。主要缺点就是忽略了单词之间的顺序关系,只保留了出现次数。

在这里插入图片描述

用一维卷积神经网络也可以处理文本数据。类比于处理图像的二维卷积神经网络,是用一个固定大小的卷积核在图像上滑动,进行加权求和;一维的情况就是用一个固定长度(图中长度为 3)的卷积核在文本上滑动,只需要将字母对应到某个数字(如 26 个字母对应 0 到 25),然后加权求和即可。

在这里插入图片描述

然而,单词之间的顺序关系会直接影响句子的意思,所以必须考虑顺序关系。

在这里插入图片描述

循环神经网络可以表示为图片左边的一般形式,或者将其展开为右边的形式。实际上就是每个隐藏层单元都要同时接收时刻 t 的输入 x,以及时刻 t - 1 的隐藏层单元输出 h

在这里插入图片描述

显然,我们可以构造多层的循环神经网络,就是让时刻 t 的输入 x 经过多个隐藏层单元才会输出 y

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

序列模型根据输入和输出的关系可以分为三种:多对一一对多多对多。多对一的例子是情感分析或者文本分类,输入是多个单词而输出是一个标签;一对多的例子是图像描述,输入是一张图像而输出是一段话(多个单词);多对多可以分为直接的和延迟的,例如视频描述就是多张图像直接地对应多个描述,语言翻译则是一段话延迟地对应一段话,因为直接翻译语言之间的单词往往是不准确的。

在这里插入图片描述

在这里插入图片描述

与前馈神经网络相比,RNN 也就是多了在不同时刻的隐藏层单元之间的权重矩阵,计算加权和的方法还是一样的,得到加权和就能通过激活函数得到激活值,最终也可以得到输出。

在这里插入图片描述
在这里插入图片描述

用损失函数衡量预测输出与实际输出的差距,然后求损失函数关于权重的偏导数(链式法则),即可用梯度下降法更新权重参数。

在这里插入图片描述

但是,用链式法则计算时刻 t 的激活值相对于时刻 k 的激活值的偏导数时,会出现多个时刻之间偏导数的乘积,由此可能导致梯度消失或者梯度爆炸的问题。

在这里插入图片描述

解决方法有:1、梯度裁剪,就是限制梯度不要大于某个值,但只能解决梯度爆炸的问题;2、限制反向传播的时刻长度,也就是求时刻 t 激活值相对于时刻 k 激活值的偏导数时,不要令 k 等于 0 到 t 求和,而是限制 k 等于例如 t - 20 到 t 求和等等,这样就不会让太多梯度值相乘了;3、LSTM 或 GRU,有一篇十分详细的博客推荐大家看看。

在这里插入图片描述

个人对 LSTM 的理解就是,三个门遗忘门输入门输出门,都是当前时刻 t 的输入 x 与上一时刻 t - 1 的隐状态变量 h 相乘后再经过 Sigmoid 函数的结果,取值为 0 到 1。于是这个结果可被视作系数,在遗忘门中会与细胞状态 c (长期记忆)相乘,在输入门中与当前时刻的 tanh 激活值(短期记忆)相乘,在输出门中与长短期记忆之和的 tanh 相乘。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以一个文本分类任务(多对一)为例,步骤有四个:1、构建词汇表,一个单词对应一个数字;2、将句子根据词汇表转换为向量;3、将每个单词转换为 One-hot 向量,一个句子就变成一个矩阵;4、将每个单词向量与 Embedding Matrix 相乘,得到一个嵌入向量(嵌入向量的维度超参数),这个向量相当于是该单词的特征向量。

在这里插入图片描述

但是用 One-hot 对单词编码再做矩阵乘法,会出现很多计算浪费(乘以 0),所以实际上都是为词汇表找到一个 Embedding Matrix,然后单词对应到数字再对应到矩阵中的某个向量即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值