当前位置: 首页 > article >正文

循环神经网络RNN-数据流动


1. RNN 的结构概述

RNN 的核心是一个循环单元,它在每个时间步接收两个输入:

  1. 当前时间步的输入数据 x t x_t xt(例如词向量)。
  2. 上一个时间步的隐藏状态 h t − 1 h_{t-1} ht1

然后,RNN 会输出:

  1. 当前时间步的隐藏状态 h t h_t ht(传递给下一个时间步)。
  2. 当前时间步的输出 o t o_t ot(通常用于预测任务)。

2. 数学公式

2.1 RNN 的隐藏状态计算

h t = tanh ( W i h x t + b i h + W h h h t − 1 + b h h ) h_t = \text{tanh}(W_{ih} x_t + b_{ih} + W_{hh} h_{t-1} + b_{hh}) ht=tanh(Wihxt+bih+Whhht1+bhh)

2.2 全连接层的输出计算

o t = W h o h t + b h o o_t = W_{ho} h_t + b_{ho} ot=Whoht+bho

其中:

  • x t x_t xt:当前时间步的输入(向量)。
  • h t − 1 h_{t-1} ht1:上一个时间步的隐藏状态(向量)。
  • h t h_t ht:当前时间步的隐藏状态(向量)。
  • o t o_t ot:当前时间步的输出(向量)。
  • W i h W_{ih} Wih:输入到隐藏层的权重矩阵。
  • W h h W_{hh} Whh:隐藏层到隐藏层的权重矩阵。
  • W h o W_{ho} Who:隐藏层到输出层的权重矩阵。
  • b i h b_{ih} bih b h h b_{hh} bhh:隐藏层的偏置项。
  • b h o b_{ho} bho:输出层的偏置项。

3. 数据的流动

3.1 输入数据 x t x_t xt
  • 形状:[input_dim]
  • 例如,input_dim=100,表示输入是一个 100 维的向量。
3.2 隐藏状态 h t − 1 h_{t-1} ht1
  • 形状:[hidden_dim]
  • 例如,hidden_dim=256,表示隐藏状态是一个 256 维的向量。
3.3 权重矩阵
  • W i h W_{ih} Wih:形状为 [hidden_dim, input_dim]
    • 将输入 x t x_t xtinput_dim 映射到 hidden_dim
  • W h h W_{hh} Whh:形状为 [hidden_dim, hidden_dim]
    • 将隐藏状态 h t − 1 h_{t-1} ht1hidden_dim 映射到 hidden_dim
  • W h o W_{ho} Who:形状为 [output_dim, hidden_dim]
    • 将隐藏状态 h t h_t hthidden_dim 映射到 output_dim
3.4 偏置项
  • b i h b_{ih} bih b h h b_{hh} bhh:形状为 [hidden_dim]
  • b h o b_{ho} bho:形状为 [output_dim]
3.5 计算过程
  1. 计算 W i h x t W_{ih} x_t Wihxt
    • 输入 x t x_t xt 的形状是 [input_dim]
    • 权重 W i h W_{ih} Wih 的形状是 [hidden_dim, input_dim]
    • 结果是 [hidden_dim]
  2. 计算 W h h h t − 1 W_{hh} h_{t-1} Whhht1
    • 隐藏状态 h t − 1 h_{t-1} ht1 的形状是 [hidden_dim]
    • 权重 W h h W_{hh} Whh 的形状是 [hidden_dim, hidden_dim]
    • 结果是 [hidden_dim]
  3. 相加:
    • W i h x t + b i h + W h h h t − 1 + b h h W_{ih} x_t + b_{ih} + W_{hh} h_{t-1} + b_{hh} Wihxt+bih+Whhht1+bhh 的结果形状是 [hidden_dim]
  4. 应用激活函数:
    • tanh \text{tanh} tanh 是逐元素操作的,不会改变形状。
    • 最终结果 h t h_t ht 的形状是 [hidden_dim]
  5. 计算全连接层的输出 o t o_t ot
    • 输入 h t h_t ht 的形状是 [hidden_dim]
    • 权重 W h o W_{ho} Who 的形状是 [output_dim, hidden_dim]
    • 结果是 [output_dim]

4. 具体例子

假设:

  • input_dim=100(输入维度为 100)。
  • hidden_dim=256(隐藏层维度为 256)。
  • output_dim=10(输出维度为 10,例如 10 分类任务)。
  • 输入 x t x_t xt 是一个 100 维的向量。
  • 隐藏状态 h t − 1 h_{t-1} ht1 是一个 256 维的向量。
4.1 输入 x t x_t xt
  • 形状:[100]
  • 例如: x t = [ x 1 , x 2 , … , x 100 ] x_t = [x_1, x_2, \dots, x_{100}] xt=[x1,x2,,x100]
4.2 隐藏状态 h t − 1 h_{t-1} ht1
  • 形状:[256]
  • 例如: h t − 1 = [ h 1 , h 2 , … , h 256 ] h_{t-1} = [h_1, h_2, \dots, h_{256}] ht1=[h1,h2,,h256]
4.3 权重矩阵
  • W i h W_{ih} Wih:形状为 [256, 100]
    • 例如:
      W i h = [ w 11 w 12 … w 1 , 100 w 21 w 22 … w 2 , 100 ⋮ ⋮ ⋱ ⋮ w 256 , 1 w 256 , 2 … w 256 , 100 ] W_{ih} = \begin{bmatrix} w_{11} & w_{12} & \dots & w_{1,100} \\ w_{21} & w_{22} & \dots & w_{2,100} \\ \vdots & \vdots & \ddots & \vdots \\ w_{256,1} & w_{256,2} & \dots & w_{256,100} \end{bmatrix} Wih= w11w21w256,1w12w22w256,2w1,100w2,100w256,100
  • W h h W_{hh} Whh:形状为 [256, 256]
    • 例如:
      W h h = [ w 11 w 12 … w 1 , 256 w 21 w 22 … w 2 , 256 ⋮ ⋮ ⋱ ⋮ w 256 , 1 w 256 , 2 … w 256 , 256 ] W_{hh} = \begin{bmatrix} w_{11} & w_{12} & \dots & w_{1,256} \\ w_{21} & w_{22} & \dots & w_{2,256} \\ \vdots & \vdots & \ddots & \vdots \\ w_{256,1} & w_{256,2} & \dots & w_{256,256} \end{bmatrix} Whh= w11w21w256,1w12w22w256,2w1,256w2,256w256,256
  • W h o W_{ho} Who:形状为 [10, 256]
    • 例如:
      W h o = [ w 11 w 12 … w 1 , 256 w 21 w 22 … w 2 , 256 ⋮ ⋮ ⋱ ⋮ w 10 , 1 w 10 , 2 … w 10 , 256 ] W_{ho} = \begin{bmatrix} w_{11} & w_{12} & \dots & w_{1,256} \\ w_{21} & w_{22} & \dots & w_{2,256} \\ \vdots & \vdots & \ddots & \vdots \\ w_{10,1} & w_{10,2} & \dots & w_{10,256} \end{bmatrix} Who= w11w21w10,1w12w22w10,2w1,256w2,256w10,256
4.4 偏置项
  • b i h b_{ih} bih b h h b_{hh} bhh:形状为 [256]
    • 例如: b i h = [ b 1 , b 2 , … , b 256 ] b_{ih} = [b_1, b_2, \dots, b_{256}] bih=[b1,b2,,b256]
  • b h o b_{ho} bho:形状为 [10]
    • 例如: b h o = [ b 1 , b 2 , … , b 10 ] b_{ho} = [b_1, b_2, \dots, b_{10}] bho=[b1,b2,,b10]
4.5 计算过程
  1. 计算 W i h x t W_{ih} x_t Wihxt
    W i h x t = [ w 11 x 1 + w 12 x 2 + ⋯ + w 1 , 100 x 100 w 21 x 1 + w 22 x 2 + ⋯ + w 2 , 100 x 100 ⋮ w 256 , 1 x 1 + w 256 , 2 x 2 + ⋯ + w 256 , 100 x 100 ] W_{ih} x_t = \begin{bmatrix} w_{11} x_1 + w_{12} x_2 + \dots + w_{1,100} x_{100} \\ w_{21} x_1 + w_{22} x_2 + \dots + w_{2,100} x_{100} \\ \vdots \\ w_{256,1} x_1 + w_{256,2} x_2 + \dots + w_{256,100} x_{100} \end{bmatrix} Wihxt= w11x1+w12x2++w1,100x100w21x1+w22x2++w2,100x100w256,1x1+w256,2x2++w256,100x100
    结果是一个 256 维的向量。

  2. 计算 W h h h t − 1 W_{hh} h_{t-1} Whhht1
    W h h h t − 1 = [ w 11 h 1 + w 12 h 2 + ⋯ + w 1 , 256 h 256 w 21 h 1 + w 22 h 2 + ⋯ + w 2 , 256 h 256 ⋮ w 256 , 1 h 1 + w 256 , 2 h 2 + ⋯ + w 256 , 256 h 256 ] W_{hh} h_{t-1} = \begin{bmatrix} w_{11} h_1 + w_{12} h_2 + \dots + w_{1,256} h_{256} \\ w_{21} h_1 + w_{22} h_2 + \dots + w_{2,256} h_{256} \\ \vdots \\ w_{256,1} h_1 + w_{256,2} h_2 + \dots + w_{256,256} h_{256} \end{bmatrix} Whhht1= w11h1+w12h2++w1,256h256w21h1+w22h2++w2,256h256w256,1h1+w256,2h2++w256,256h256
    结果是一个 256 维的向量。

  3. 相加:
    W i h x t + b i h + W h h h t − 1 + b h h W_{ih} x_t + b_{ih} + W_{hh} h_{t-1} + b_{hh} Wihxt+bih+Whhht1+bhh
    结果是一个 256 维的向量。

  4. 应用激活函数:
    h t = tanh ( W i h x t + b i h + W h h h t − 1 + b h h ) h_t = \text{tanh}(W_{ih} x_t + b_{ih} + W_{hh} h_{t-1} + b_{hh}) ht=tanh(Wihxt+bih+Whhht1+bhh)
    结果是一个 256 维的向量。

  5. 计算全连接层的输出 o t o_t ot
    o t = W h o h t + b h o o_t = W_{ho} h_t + b_{ho} ot=Whoht+bho
    其中:

    • W h o W_{ho} Who 的形状是 [10, 256]
    • h t h_t ht 的形状是 [256]
    • 结果是 [10]

    例如:
    o t = [ w 11 h 1 + w 12 h 2 + ⋯ + w 1 , 256 h 256 w 21 h 1 + w 22 h 2 + ⋯ + w 2 , 256 h 256 ⋮ w 10 , 1 h 1 + w 10 , 2 h 2 + ⋯ + w 10 , 256 h 256 ] o_t = \begin{bmatrix} w_{11} h_1 + w_{12} h_2 + \dots + w_{1,256} h_{256} \\ w_{21} h_1 + w_{22} h_2 + \dots + w_{2,256} h_{256} \\ \vdots \\ w_{10,1} h_1 + w_{10,2} h_2 + \dots + w_{10,256} h_{256} \end{bmatrix} ot= w11h1+w12h2++w1,256h256w21h1+w22h2++w2,256h256w10,1h1+w10,2h2++w10,256h256
    结果是一个 10 维的向量。


5. 总结

  • 数据
    • 输入 x t x_t xt:形状为 [input_dim]
    • 隐藏状态 h t − 1 h_{t-1} ht1:形状为 [hidden_dim]
    • 输出 o t o_t ot:形状为 [output_dim]
  • 权重
    • W i h W_{ih} Wih:形状为 [hidden_dim, input_dim]
    • W h h W_{hh} Whh:形状为 [hidden_dim, hidden_dim]
    • W h o W_{ho} Who:形状为 [output_dim, hidden_dim]
  • 偏置
    • b i h b_{ih} bih b h h b_{hh} bhh:形状为 [hidden_dim]
    • b h o b_{ho} bho:形状为 [output_dim]

通过以上步骤,RNN 在每个时间步将输入 x t x_t xt 和隐藏状态 h t − 1 h_{t-1} ht1 转换为新的隐藏状态 h t h_t ht,并通过全连接层得到输出 o t o_t ot

RNN数据流图



http://www.kler.cn/a/508865.html

相关文章:

  • 无降智o1 pro——一次特别的ChatGPT专业模式探索
  • 【Go】Go Gorm 详解
  • 利用EXCEL进行XXE攻击
  • HTML中link的用法
  • SpringSecurity详解
  • YOLOv10-1.1部分代码阅读笔记-build.py
  • 图数据库 | 18、高可用分布式设计(中)
  • .NET 学习:从基础到进阶的全面指南
  • 【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)
  • 【Pytorch实用教程】TCN(Temporal Convolutional Network,时序卷积网络)简介
  • 解决el-select回显问题:使其显示label值
  • [操作系统] 进程的概念与基础操作详解
  • 5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署
  • SSH config
  • 麒麟v10 安装php5.6
  • 第83期 | GPTSecurity周报
  • Linux的常用命令(一)
  • 在Mac mini上实现本地话部署AI和知识库
  • C++实现设计模式--- 观察者模式 (Observer)
  • 从 JIRA 数据到可视化洞察:使用 Python 创建自定义图表
  • yolo训练数据集样本的标签形状一致是什么意思
  • ReactiveSwift 简单使用
  • ThreeJS能力演示——界面点选交互能力
  • 探索基于机器学习的信用评分:从数据到洞察
  • Android BottomNavigationView不加icon使text垂直居中,完美解决。
  • PyTorch使用教程(4)-torch.nn