赞
踩
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121387285
目录
5.1 前向计算/预测: 隐藏层的数学公式(Elman网络)
5.2 循环神经网络的工作原理 - 反向计算:训练 =>BPTT算法
上图的案例是:“非时序”单元的网络结构,即“组合”逻辑的网络结构。
在上图案例中:
(1)内部结构
相对于“组合”网络,“时序”网络多出来的逻辑包括:
(2)等效结构
与组合电路不同的是,RNN网络(不包括输出层)包括了两个输入,两个输出,两个权重矩阵,一组神经元。
备注:
(3)RNN网络的两种类型
现在一般说的RNN(包括LSTM、GRU等等)都是用Elman network
循环神经网络的核心是“循环”!讲清楚“循环”的含义和实现,才能真正的理解循环神经网络。
把T时刻的隐藏层的输出,作为T + 1时刻的隐藏状态S的输入,就构成了上图中的蓝色的“循环线”。
蓝色的循环线,到底如何实现呢?
是RNN神经网络自身来实现“循环”?
还是由RNN网络外部的使用者来实现“循环”呢?
其实RNN网络本身并没有对此作出限制,这两种形式或方式都有:
(1)压缩/单体结构:RNN网络的使用者实现串联
(2)展开/串联结构: RNN网络自身实现串联
2.5 RNN的压缩结构:由外部的RNN网络的使用者来实现“循环”
(1)网络的基本结构
(2)时间序列输入的实现流程
在这种模式下,RNN的使用者,负责读取T时刻的隐层状态的输出,并在T+1时刻,把T时刻的状态值作为隐层状态S, 与T+1时刻的X一起,作为隐藏层神经元的输入, 如下所示:
伪代码实现方法:
hide_state = {0}
output, hide_state = rnn.forward (Xt + 0, hide_state)
output, hide_state = rnn.forward (Xt + 1, hide_state)
output, hide_state = rnn.forward (Xt +2, hide_state)
(3)优点
(4)缺点
2.6 RNN展开结构:由RNN网络自身来实现序列内的“循环”?
(1)网络的基本结构
(2)时间序列输入的实现流程
当RNN网络的使用者, 其待处理的序列数据的长度Seq_len > RNN能够并行处理的序列数据的长度m时,RNN网络的使用者,负责待处理原始序列数据的分割,分割成长度为m的序列,并由它负责把长度为m的不同序列串联起来。
hide_state = {0}
output, hide_state = rnn.forward ([Xt+0, Xt+1, ...., Xt+m-1], hide_state)
output, hide_state = rnn.forward ([Xt+m+0, Xt+m+1, ...., Xt+2m-1], hide_state)
output, hide_state = rnn.forward ([Xt+2m+0, Xt+2m+1, ...., Xt+3m-1], hide_state)
备注:
(3)优点
(4)缺点
(5)特点
2.7 RNN的堆叠结构:
RNN堆叠是在原有隐层的基础之上,堆叠更多的隐层(不包括输入和输出层),包括其隐层状态保持器。
双向循环网络是两套隐层,一套为前向层,另一套是后向层,他们有独立的W矩阵和状态张量。
RNN与CNN类似,都是特征提取的功能,本身并不能独立组网(神经网络),还需要输入层,实现样本数据的输入。还需要输出层,完成根据特征进行分类或其他功能的输出。
不同的组网形态,有不同的应用场景。
有了RNN前向传播算法的基础,就容易推导出RNN反向传播算法的流程了。
RNN反向传播算法的思路和DNN(组合逻辑网络)是一样的,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c 。
由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。当然这里的BPTT和DNN也有很大的不同点,即这里所有的U,W,V,b,c在序列的各个位置是共享的,反向传播时我们更新的是相同的参数。
为了简化描述,这里的损失函数我们为对数损失函数,输出的激活函数为softmax函数,隐藏层的激活函数为tanh函数。
对于RNN,由于我们在序列的每个位置都有损失函数,因此最终的损失LL 为:
其中V,c, 的梯度计算是比较简单的:
但是W,U,b 的梯度计算就比较的复杂了。从RNN的模型可以看出,在反向传播时,在在某一序列位置t的梯度损失由当前位置的输出对应的梯度损失和序列索引位置t+1t+1 时的梯度损失两部分共同决定。对于W 在某一序列位置t的梯度损失需要反向传播一步步的计算。我们定义序列索引tt 位置的隐藏状态的梯度为:
这样我们可以像DNN一样从δ(t+1) 递推δ(t)
对于δ(τ) ,由于它的后面没有其他的序列索引了,因此有:
有了δ(t) ,计算W,U,b 就容易了,这里给出W,U,b 的梯度计算表达式:
(超详细!!)Pytorch循环神经网络(RNN)快速入门与实战_热爱技术,热爱生活!-CSDN博客_rnn循环神经网络
循环神经网络RNN打开手册 - 知乎 (zhihu.com)
复旦大学机器学习公开课:77-循环神经网络的训练和示例,教育,资格考试,好看视频
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121387285
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。