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

3. RNN及其变体_LSTMGUR

1. LSTM 模型

图中每个黄色块都是一个 linear全连接层、3个σ代表3个门值,值域(0,1),它是黄色的,所以每个门的门值对应一个全连接层;

(LSTM的输入包含三部分:当前时间步输入Xt、上一时间步的隐藏层张量输出结果 hidden、上一时间步的C(细胞状态);细胞状态:图中下面部分进行复制:一个output输出、一个 ht传入下一层,所以上面没有交叉的部分称为细胞状态。)


1️⃣ 遗忘门结构分析:将当前时间步输入 xt与上一时间步隐藏层状态 ht-1进行 concat拼接得到 [xt, ht-1],然后通过一个 linear全连接层做变换,最后通过 sigmoid函数进行激活得到一个遗忘门门值 ft,(sigmoid值域(0,1)则 ft值(0,1)),好比一扇门开合的大小程度,门值都将作用在通过该扇门的张量,遗忘门门值将作用的上一层的细胞状态上,代表遗忘过去的多少信息,又因为遗忘门门值是由 xt,ht-1计算得来的,因此整个公式意味着根据当前时间步输入和上一个时间步隐含状态 ht-1来决定遗忘多少上一层的细胞状态所携带的过往信息;
(① concat之后一定要经过一个全连接层,全连接层的核心目标是为了进行形状的转化。② 对于xt, ht-1作用得到一个门值,作用的地方是上一层的细胞状态,上一层的细胞状态包含前文信息,遗忘门会选择性部分遗忘即 选择性部分记忆,并非全部记忆;对于 RNN它的缺点是:链式法则需要考虑到全部,每一个词都要记忆,每次都要对最前面的词进行求导,链式法则时会乘很多元素;现在遗忘门会将前文信息选择性的遗忘删除,使得在连乘时元素个数减少,因此遗忘门可以缓解梯度消失现象。如何判断遗忘?:假设开始时遗忘门的门值都是 1即都进行了保留,但模型本身有损失,损失大效果差,黄色部分是一个 linear层,权重也会更新,导致门值一定也会更新。遗忘门门值获取:由当前时间步的 xt与上一时间步隐藏层张量的结果 ht-1拼接后,经过一个全连接层,再经过一个 sigmoid激活函数,得到一个遗忘门门值 ft;f即 forget)

2️⃣ 输入门结构分析:我们看到输入门的计算公式有两个:第一个就是产生输入门门值的公式,它和遗忘门公式几乎相同,区别只是在于它们之后要作用的目标上,这个公式意味着输入信息有多少需要进行过滤;输入门的第二个公式是与传统 RNN的内部结构计算相同,对于 LSTM来讲,它得到的是当前的细胞状态,而不是像经典 RNN一样得到的是隐含状态。
(① xt与 ht-1拼接后经过 linear全连接层线性变换后,经过 sigmoid激活函数后得到一个输入门的门值 it;这个门值乘以 一个xt与 ht-1拼接后经过 linear全连接层线性变换后,经过tanh得到的结果 Ct~(此结果类似传统 RNN输出的结果,对此结果做了输入门的选择:Ct~ 可看作是临时的细胞状态或者说是加了新的 xt之后,当前时间步得到的一个新的临时的细胞状态,但需要通过输入门对其进行选择性的记忆(即经过输入门进行一次过滤));② 输入门包含两部分:获取输入门门值、选择输入的对象(即输入门即将作用的对象):第一部分:输入门门值获取:由 xt、ht-1拼接后送给 linear全连接层,sigmoid后得到输入门门值 it;第二部分:作用的对象:xt、ht-1拼接后送给 linear全连接层,再经过一个 tanh激活函数,得到一个结果 Ct(Ct是加了新的 xt之后,当前时间步得到的一个新的临时的细胞状态,但需要通过输入门对其进行选择性的记忆);

3️⃣ 细胞状态更新分析:细胞更新的结构与计算公式非常容易理解,这里没有全连接层,只是将刚刚得到的遗忘门门值与上一个时间步得到的 C(t-1)相乘,再加上输入门门值与当前时间步得到的未更新 C(t)相乘的结果,最终得到更新后的C(t)作为下一个时间步输入的一部分,整个细胞状态更新过程就是对遗忘门和输入门的应用。

(细胞状态更新用到了遗忘门门值 ft和输入门门值 it,公式:
选择性遗忘:遗忘门 ft作用于上一时间步的细胞状态 Ct-1,ft * Ct-1这个过程是选择性的遗忘’历史的’一些消息 ➕️ 选择性输入:输入门 it作用于’当前’真实输入的一部分 Ct~,哪些重要则记忆,不重要的赋值给小的权重值 = 两者融合:既包含了以前的历史信息、又包含了当前输入的新的信息,最终得到当前时间步新的细胞状态 Ct。得到新的细胞状态 Ct后可直接进行输出,给下一个时间步进行使用;此时当前时间步的细胞状态已经更新完毕。)

对于 ht-1(隐藏状态)和 Ct-1(细胞状态):两者都包含了历史消息:ht-1是一个短期记忆,临时的上下文;Ct-1是一个长期记忆。

2. GUR 模型

http://www.jsqmd.com/news/919272/

相关文章:

  • STM32F103C8T6硬件SPI驱动LCD屏幕,为什么HAL库的HAL_SPI_Transmit()函数反而拖慢了刷新率?
  • 065、相机标定重投影误差居高不下?棋盘格角点检测、标定参数诊断与多轮迭代方案
  • Blender - Study Notes 3
  • FreeRTOS定时器守护任务深度解析:如何像操作系统一样思考并发与调度
  • 数据周刊|2026年5月第4周:数据要素、高质量数据集、AI 合规
  • VoiceFixer语音修复神器:从嘈杂录音到清晰人声的终极解决方案
  • S2.0系列开篇:从抖音到Notion,上瘾设计的底层逻辑
  • Arm架构CPU挂起问题调试指南:使用DS-5与Arm DS
  • 从零构建AI聊天机器人:架构解析与Rasa实战指南
  • 会“做梦“的 AI:用一句话生成可以玩的世界——读懂世界模型 Genie 3
  • ImageGlass:Windows终极免费图片浏览器,支持90+格式的快速轻量解决方案
  • 别再乱用HP接口了!手把手教你为Zynq MPSOC的PL-PS数据流选对AXI接口(ACP/HPC/HP实战避坑)
  • 别再手动算潮汐了!用Linux+OTPS工具箱+TPXO9模型,5分钟搞定批量水位预报
  • ESP32-CAM图像采集与SD卡存储实战指南
  • Namesilo域名购买后,除了A记录,这几种DNS配置新手也一定要知道
  • 重复性误差低至0.01%FS,广东犸力静态扭力传感器精度排名权威解析 - 品牌速递
  • 2026年华为OD机试(A卷,100分)- 货币单位换算(Java JS Python)带详细答案和源码
  • Koodo Reader:打造你的跨平台智能电子书阅读器 [特殊字符]
  • AI工具实战指南:ChatGPT、Grammarly等6款神器构建10倍效率工作流
  • 告别乱码和丢数据:STM32单片机UART串口通信的5个常见坑与调试技巧
  • 告别百度云限速!用Syncthing+cpolar打造你的私人同步网盘(Windows保姆级教程)
  • 基于TL494与H桥的工业级开关电源设计:从原理到调试实战
  • ECharts雷达图实战:手把手教你用Vue3+ECharts打造个人技能可视化面板
  • 保姆级教程:用Helm和Kuberay在K8s上快速部署Ray集群(含避坑指南)
  • 别再只用皮尔逊了!当数据不“乖”时,试试斯皮尔曼相关系数(附Python实战)
  • 保姆级教程:手把手教你用Phonopy-Spectroscopy处理二维材料(如MoS2)的Raman光谱
  • 3步快速实现智慧树自动刷课:免费的Chrome扩展学习助手终极指南
  • 从‘盲猜’到‘明盒’:拆解DINO如何让DETR的Anchor Boxes和Query变得可解释
  • UVa 335 Processing MX Records
  • 把整条 ChatGPT 流水线塞进 8000 行代码:拆解 Karpathy 的 nanochat