首页 > 其他分享 >RNN的前向传播

RNN的前向传播

时间:2024-10-10 19:48:25浏览次数:9  
标签:输出 RNN tanh self 矩阵 ht 传播 函数

学习[#深度学习继卷积之后—RNN-CSDN博客]之后看会更加理解

循环神经网络前向公式

zt:t-1时刻的隐层状态(ht-1)乘上对应的隐藏状态权重矩阵(U) 再加上t时刻输入的X和权重参数矩阵W相乘 就是隐藏层的净输入 

ht:对计算的zt添加一个激活函数tanh激活函数

这里有个问题

为什么CNN的激活函数使用relu,RNN的激活函数使用tanh?

CNN使用ReLU激活函数的原因是ReLU能够更好地处理卷积层输出中的非线性特征,他的导数是0或1,避免和Sigmoid函数出现一样的问题:当输入值非常大或非常小的时候容易出现梯度消失的问题。
RNN不使用ReLU的原因是ReLU的输出范围在 [0, +∞) 上,会导致输出值非常的大,而使用tanh,他的输出范围在[-1, 1] 上,相当于对输出进行了标准化使得网络更容易训练,此外,tanh 激活函数具有平滑的导数,有助于梯度传播和避免梯度消失问题。但是由于tanh导数的取值范围为 (0,1],因此长时间依赖关系仍然可能导致梯度消失或爆炸问题。因此,一般需要采用梯度裁剪等技术来进一步避免这些问题。
 

yt(输出):因为要输出结果查看概率所以要加一个softmax激活函数进行归一化

(Sigmoid函数的输出范围是0到1。由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化)

ht(隐层):加了一个tanh激活函数

python代码

(注意下图的隐藏状态权重矩阵是W不是U)

import numpy as np


def forward_propagation(self,x):
    #样本个数 也就是时间长度
    T = len(x)
    #初始化0时刻的h0
    h = np.zeros(T + 1,self.hidden_dim)
    h[-1] = np.zeros(self.hidden_dim)
    #预测值的个数和形状输出输入时保持一致
    y_hat = np.zeros((T,self.in_shape))
    for t in np.arange(T):
        #reshape(-1,1)变成多行1列
        x_t = np.array(x[t]).reshape(-1,1)
        #reshape(-1)变成向量
        z = (self.U.dot(x_t) + self.W.dot(h[t-1].reshape(-1,1))).reshape(-1)
        h[t] = self.tanh(z)
        o_t = self.V.dot(h[t])
        y_hat[t] = self.softmax(o_t)
    return y_hat,h

循环神经网络前向传播计算流程

假设在t时刻:

zt:

        Uxt:xt(K * 1大小的矩阵) 与U(H * K大小的矩阵)相乘 顺序为U * x ->(H * K) * (K * 1) 因为两个矩阵要是想相乘需要满足,第一个矩阵的列数等于第二个矩阵的行数  详细内容请看[矩阵相乘的要求-CSDN博客]得到一个H*1大小的矩阵

        Wht:W隐藏状态权重矩阵(H * H大小的矩阵)与t-1时刻的隐藏层的净输入ht-1(H * 1大小的矩阵)相乘 顺序为W * ht-1 -> (H * H)*(H * 1) 得到一个 H * 1大小的矩阵

这样Uxt与Wht的矩阵大小就相同了 然后可以进行相加得到zt

ht:

        上一个隐藏层的净输入经过激活函数tanh之后的值 矩阵大小还是H * 1

ot:

        ot就是没有经过归一化处理之前的值 

        V权重矩阵( K* H大小的矩阵)与ht(H * 1大小的矩阵)相乘得到一个K * 1大小的矩阵

yt:

        输出值 ot经过softmax激活函数归一化处理之后输出的值 

Lt:

        t时刻的交叉熵损失函数值

标签:输出,RNN,tanh,self,矩阵,ht,传播,函数
From: https://blog.csdn.net/disciplining/article/details/142767529

相关文章

  • 深度学习:循环神经网络RNN
    目录一、神经网络的历程1.传统神经网络存在的问题2.提出一种新的神经网络二、RNN基本结构1.RNN基本结构2.RNN的独特结构3.RNN的局限性一、神经网络的历程1.传统神经网络存在的问题无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。因为传统神经网......
  • 长短期记忆(LSTM)网络是如何解决RNN中的长期依赖问题的?
    长短期记忆网络(LongShort-TermMemory,LSTM)是一种特殊的递归神经网络(RecurrentNeuralNetwork,RNN),它通过设计一种巧妙的架构来解决传统RNN在处理长期依赖问题时遇到的梯度消失或梯度爆炸问题。LSTM的关键创新在于其内部的记忆单元和三个门控机制:输入门、遗忘门和输出门,......
  • 《神经网络》—— 循环神经网络RNN(Recurrent Neural Network)
    文章目录一、RNN简单介绍二、RNN基本结构1.隐藏中的计算2.输出层的计算3.循环三、RNN优缺点1.优点2.缺点一、RNN简单介绍循环神经网络(RecurrentNeuralNetwork,RNN)是一种用于处理序列数据的神经网络架构。与传统的前馈神经网络(FeedforwardNeuralNetwork......
  • RNN(循环神经网络)简介及应用
    一、引言在深度学习领域,神经网络被广泛应用于各种任务,从图像识别到语音合成。但对于序列数据处理的任务,如自然语言处理(NLP)、语音识别或时间序列预测等,传统的前馈神经网络(FeedforwardNeuralNetworks)显得力不从心。这是因为序列数据中存在着时间上的依赖关系,即序列中的每个元......
  • 【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
      目录......
  • 前向传播和后向传播是啥玩意儿
    前向传播(ForwardPropagation)和后向传播(BackwardPropagation)是神经网络训练的两个关键步骤,它们共同作用来调整网络中的权重,从而最小化误差。让我们分开解释这两个概念:1.前向传播(ForwardPropagation)前向传播是神经网络从输入到输出的计算过程。在这个过程中,输入数据逐层......
  • crnn_migraphx用于端到端地对不定长的文本序列进行识别的OCR模型
    CRNN论文AnEnd-to-EndTrainableNeuralNetworkforImage-basedSequenceRecognitionandItsApplicationtoSceneTextRecognitionhttps://arxiv.org/abs/1507.05717模型结构CRNN模型的主要结构包括基于CNN的图像特征提取模块以及基于双向LSTM的文字序列特征提取......
  • Spring事务传播机制(最全示例)
    我们在使用Spring框架进行开发时,经常在service层写很多方法,而且这些方法都是带事务的,那么Spring的事务怎么在多个方法之间传播呢?今天我们就仔细聊一聊。Spring的事务传播机制主要解决在多个方法之间,事务如何传递的问题,通常有7种传播类型:REQUIREDSUPPORTSMANDATORYREQUIRES_N......
  • 动手学深度学习8.7. 通过时间反向传播-笔记&练习(PyTorch)
    本节课程地址:本节无视频本节教材地址:8.7.通过时间反向传播—动手学深度学习2.0.0documentation(d2l.ai)本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>bptt.ipynb通过时间反向传播到目前为止,我们已经反复提到像梯度爆炸或梯度消失,以及需要对循环......
  • 短信作为信息传播工具的优势与局限性
    便捷性:短信作为一种即时通讯方式,能够迅速地将信息从一个设备或用户传递到另一个,无需复杂的设置或网络连接。对于没有数据计划或处于弱信号区域的人来说,短信仍然是一种可靠的通讯方式。即时性:尽管现在的社交媒体和即时通讯应用很流行,但短信仍然具有即时性。它可以在几秒钟内......