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

【NLP高频面题】LSTM的前向计算如何进行加速?

【NLP高频面题】LSTM的前向计算如何进行加速?

重要性:★★★

核心思想:将小矩阵合并成大矩阵再进行梯度分块(Reduce → Map)。

  1. 合并计算遗忘门、输入门、输出门和新增信息的仿射变换,使用“大矩阵”加速运算
  2. 通过slice 节点将矩阵分成了 4 份,因此它的反向传播需要整合 4 个梯度

现在我们先来整理一下 LSTM 中进行的计算,如下所示:

这里需要注意式中的 4 个仿射变换。这里的仿射变换是指 x W x + h W h + b xW_x + hW_h + b xWx+hWh+b 这样的式子。4 个仿射变换,其实可以整合为通过 1 个式子进行,如下图所示。

整合4个权重,通过1次仿射变换进行4个计算:

如此,原本单独执行 4 次的仿射变换通过 1 次计算即可完成,可以加快计算速度。这是因为矩阵库计算“大矩阵”时通常会更快。

整合4个权重进行仿射变换的LSTM的计算图:

仿射变换的形状的改变:

批大小是 N,输入数据的维数是 D,记忆单元和隐藏状态的维数都是 H。另外,计算结果 A 中保存了 4 个仿射变换的结果。因此,通过 A[:, :H]、A[:, H:2H] 这样的切片取出数据,并分配给之后的运算节点。

slice节点的正向传播(上)和反向传播(下):


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

相关文章:

  • AUTOSAR从入门到精通-城市NOA(领航辅助驾驶)
  • 自定义BeanPostProcessor实现自动注入标注了特定注解的Bean
  • Excel中函数SIGN()的用法
  • Java 视频处理:基于 MD5 校验秒传及 ffmpeg 切片合并的实现
  • 爬虫第二篇
  • 重拾Python学习,先从把python删除开始。。。
  • 遥感应用论文精选
  • C++ 面向对象(继承)
  • 机器学习皮马印第安人糖尿病数据集预测报告
  • C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果
  • # 爬楼梯问题:常见数列的解法总结
  • 冬季深圳小览
  • Pytorch深度学习指南 卷I --编程基础(A Beginner‘s Guide) 第0章
  • “深入浅出”系列之C++:(6)CMake构建项目
  • 蓝桥杯3525 公因数匹配 | 枚举+数学
  • DDD - 如何设计支持快速交付的DDD技术中台
  • 软工:第一部分(初识软工)
  • “深入浅出”系列之数通篇:(5)TCP的三次握手和四次挥手
  • JavaScript中提高效率的技巧一
  • A5.Springboot-LLama3.2服务自动化构建(二)——Jenkins流水线构建配置初始化设置
  • 解决QT中报错xxx.h:4:10: ‘QMainWindow‘ file not found
  • Electron 开发者的 Tauri 2.0 实战指南:安全实践
  • 深入Kafka KRaft模式:生产环境配置详解
  • docker中常用的镜像和容器命令
  • day01_项目介绍和环境搭建
  • 新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵