知行编程网知行编程网  2022-05-01 15:00 知行编程网 隐藏边栏 |   抢沙发  2 
文章评分 0 次,平均分 0.0

RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现


来自 | 知乎

作者 | Lucas

地址 | https://zhuanlan.zhihu.com/p/85995376

专栏 | 深度学习与情感计算

编辑 | 机器学习算法与自然语言处理



RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现



循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,也就是说隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。简单来说,设计 RNN 就是为了处理序列数据。如果说 CNN 是对人类视觉的仿真,那 RNN 不妨先看作是对人类记忆能力的模拟。

为什么需要 RNN? 和 CNN 的主要区别?

  • CNN 相当于人类视觉,是没有记忆能力的,没有办法根据以前的记忆来处理新任务。而 RNN 是基于人的记忆的想法,期望网络能够机主前面出现的特征,根据特征完成下游任务。

  • CNN 需要固定长度的输入、输出,RNN 的输入和输出可以是不定长且不等长的

  • CNN 只有 one-to-one 一种结构,而 RNN 有多种结构。


结构组成

一个简单 RNN 由三个部分组成,输入层、隐藏层,输出层(废话)如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:

RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现
其中,t 是时刻, x 是输入层, s 是隐藏层, o 是输出层,矩阵 W 就是隐藏层上一次的值作为这一次的输入的权重。

为什么循环神经网络可以往前看任意多个输入值呢?

看啊这个是输出层 o和隐藏层 s 的计算公式

如果把公式 2 一直往公式 1 里带,则有:

记忆能力

该模型具有一定的记忆能力,能够按时序依次处理任意长度的信息。前面的输入对未来产生影响。什么意思呢下图所示。当我们将“ What time is it ?" 每个词进入神经网络后都会对下一个词产生影响,

RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现

缺点:梯度消失和梯度爆炸

RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现

通过上面的例子,我们已经发现,短期的记忆影响较大(如橙色区域),但是长期的记忆影响就很小(如黑色和绿色区域),这就是 RNN 存在的短期记忆问题。

莫烦 Python 这里讲解的非常生动形象:

‘我今天要做红烧排骨, 首先要准备排骨, 然后…., 最后美味的一道菜就出锅了’。现在请 RNN 来分析, 我今天做的到底是什么菜呢. RNN可能会给出“辣子鸡”这个答案. 由于判断失误, RNN就要开始学习 这个长序列 X 和 ‘红烧排骨’ 的关系 , 而RNN需要的关键信息 ”红烧排骨”却出现在句子开头。

RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现
梯度消失示意
RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现
梯度爆炸示意

红烧排骨这个信息原的记忆要进过长途跋涉才能抵达最后一个时间点. 然后我们得到误差, 而且在 反向传递 得到的误差的时候, 他在每一步都会 乘以一个自己的参数 W. 如果这个 W 是一个小于1 的数, 比如0.9. 这个0.9 不断乘以误差, 误差传到初始时间点也会是一个接近于零的数, 所以对于初始时刻, 误差相当于就消失了. 我们把这个问题叫做梯度消失或者梯度弥散 Gradient vanishing. 反之如果 W 是一个大于1 的数, 比如1.1 不断累乘, 则到最后变成了无穷大的数, RNN被这无穷大的数撑死了, 这种情况我们叫做梯度爆炸, 这就是普通 RNN 没有办法回忆起久远记忆的原因.

在此感谢 

@莫烦

 前辈关于机器学习机器学习基础知识的讲解,让晚辈能够迅速成长,知识分享是人的一种高贵品质。我由衷感谢您!



基础模型的 PyTorch 实现

        return torch.zeros(1, self.hidden_size)



参考资料

morvanzhou.github.io/tu

easyai.tech/ai-definiti


代码地址:

github.com/zy1996code/n

<section style="margin-right: 8px;margin-left: 8px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;widows: 1;line-height: 1.75em;"><strong><span style="letter-spacing: 0.5px;font-size: 14px;"><strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;">—</span></strong>完<strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;font-size: 14px;"><strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;">—</span></strong></span></strong></span></strong></section><section style="white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;widows: 1;color: rgb(255, 97, 149);"><section powered-by="xiumi.us"><section style="margin-top: 15px;margin-bottom: 25px;opacity: 0.8;"><section><section style="letter-spacing: 0.544px;"><section powered-by="xiumi.us"><section style="margin-top: 15px;margin-bottom: 25px;opacity: 0.8;"><section><section style="margin-right: 8px;margin-bottom: 15px;margin-left: 8px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-family: sans-serif;font-size: 12px;line-height: 25.5938px;letter-spacing: 3px;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-size: 16px;font-family: 微软雅黑;caret-color: red;">为您推荐</span></strong></span></section><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-family: sans-serif;font-size: 12px;line-height: 1.75em;letter-spacing: 0px;">神经网络激励函数的作用是什么?有没有形象的解释?<br  /></p><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-family: sans-serif;font-size: 12px;line-height: 1.75em;letter-spacing: 0px;">“12306”的架构到底有多牛逼?<br  /></p><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-family: sans-serif;font-size: 12px;line-height: 1.75em;letter-spacing: 0px;">网传饶毅举报多位学者论文造假?官方回应了<br  /></p><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-family: sans-serif;font-size: 12px;line-height: 1.75em;letter-spacing: 0px;">阿里如何抗住90秒100亿?看这篇你就明白了!<br  /></p><p style="margin-right: 8px;margin-bottom: 5px;margin-left: 8px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-family: sans-serif;font-size: 12px;line-height: 1.75em;letter-spacing: 0px;">深度学习必懂的13种概率分布</p></section></section></section></section></section></section></section></section>

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享