同学你好!本文章于2021年末编写,获得广泛的好评!
故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,
Pytorch深度学习·理论篇(2023版)目录地址为:
CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇
以下为2021版原文~~~~
1 循环神经网络结构概述
循环神经网络(Recurrent Neural Network,RNN)是一个具有记忆功能的网络模型。它可以发现样本彼此之间的相互关系。它多用于处理带有序列特征的样本数据。
1.1 生物大脑中的循环神经网络
当获得“我找你来玩游”信息后,大脑的语言模型会自动预测后一个字为“戏”,而不是“乐”“泳”等其他字。
每个预测的结果都会放到下个输入里面进行运算,与下一次的食人鱼一起来生成下一次的结果。
链式地、有顺序地存储信息”很节省空间,对于中间状态的序列,大脑没有选择直接记住,而是存储计算方达。当我们需要取值时,直接将具体的数据输入,通过计算得出相应的给果。
1.2 循环神经网络的应用领域
对于序列化的特征任务,适合用循环神经网路来解决。这类任务包括情感分析、关键字提取、语音识别、机器翻译和股票分析等。
1.3 循环神经网络的正向传播过程
假设有3个时序t1,t2,t3,如图7-26所示,循环神经网络的处理过程可以分解成以下3个步骤:
(1)开始时t1通过自己的输入权重和0作为输入,生成了out1;
(2)out1通过自己的权重生成了h1,然后和t2与经过输入权重转化后一起作为输入,生成了out2;
(3)out2通过同样的隐藏层权重生成了h2,然后和t3经过输入权重转化后一起作为输入,生成了out3。
使得模型的结果既有该样本之前序列的信息,又含有该样本身的数据信息,从而使网络具有记忆功能。
2 BP算法与BPTT算法的原理剖析
2.1 BP算法==》卷积神经网络
假设有一个包含一个隐藏层的神经网络,隐藏层只有一个节点。该神经网络在BP算法中具体的实现过程如下。
(1)有一个批次的数据,含有3个数据A、B、C,批次中每个样本有两个数(x1、x2)通过权重(w1、w2)来到隐藏层H并生成批次h,如图7-27中w1和w2所在的两条直线方向。
(2)该批次的h通过隐藏层权重p1生成最终的输出结果y。
(3)y与最终的标签p比较,生成输出层误差loss(y,p)。
(4)loss(y,p)与生成y的导数相乘,得到DeL_y。DeL_y为输出层所需要的修改值。
(5)将h的转置与DeL_y相乘得到DeL_p1,这是源于h与p1相乘得到的y(见第2步.
(6)最终将该批次的DeL_p1,求和并更新到p1。
(7)同理,再将误差反向传递到上一层:计算Del_h。得到Del_h后再计算权重(w1,w2)的Del值并更新。
2.2 BPTT算法(BP算法+序列序列)==》循环神经网络
在图7-28中,同样是一个批次的数据ABC,按顺序进入循环神经网络。正向传播的实例是,B正在进入神经网络的过程,可以看到A的h参与了进来,一起经过p1生成了B的y。因为C还没有进入,为了清晰,所以这里用灰色(虚线方框)来表示。
当所有块都进入之后,会将p标签与输出进行Del_y的运算。由于C块中的y值是最后生成的,因此我们先从C块开始对h的输出传递误差Del_h。
图7-28中的反向传播是表示C块已经反向传播完成,开始B块反向传播的状态,可以看到B块Del_h是由B块的Del_y和C块的Del_h(图7-28中的fur _Del_h)通过计算得来的。
2.3 对比
这就是与BP算法不同的地方(在BP算法中Del_h直接与自己的Del_y相关,不会与其他的值有联系)。作为一个批次的数据,正向传播时是沿着4BC的顺序升当反向传播时,就按照正向传播的相反顺序接照每个节点的CBA顺序,挨个计算并传递梯度。
2.4 代码代补充 P149