RNN LSTM

参考资料:

  • 《机器学习2022》李宏毅
  • 史上最详细循环神经网络讲解(RNN/LSTM/GRU) - 知乎 (zhihu.com)
  • LSTM如何来避免梯度弥散和梯度爆炸? - 知乎 (zhihu.com)

1 RNN 的结构

首先考虑这样一个 slot filling 问题:

image-20230702152122630

注意到,上图中 Taipei 的输出为 destination。如果我们只是单纯地将每个词向量输入到一个神经网络中,那么对于"leave Taipei on …" 这句话,模型对 Taipei 的输出也会是 destination,但我们希望它是 departure。要实现这一目的,必须要引入当前向量与上下文的关系,于是就有了循环神经网络(RNN):

image-20230702163833223

注意到,RNN 与一般的神经网络的主要区别在与将隐层的上一次输出保存并作为本次的输入,即:
O t = g ( V ⋅ S t ) S t = f ( U ⋅ X t + W ⋅ S t − 1 ) \begin{align} O_t&=g(V\cdot S_t)\notag\\ S_t&=f(U\cdot X_t+W\cdot S_{t-1})\notag \end{align} OtSt=g(VSt)=f(UXt+WSt1)

矩阵 U , W , V U,W,V U,W,V 即为 RNN 的参数,与 t t t 无关。

引入时间这一维度,RNN 可以表示为如下结构:

image-20230702152604317

如果采用双向 RNN ,则每个向量都可以充分地考虑到上下文。

2 RNN 的梯度消失与梯度爆炸

考虑这样一个简单的 RNN 结构:

假设神经元没有激活函数(激活函数的导数一般是恒 < 1 <1 <1 的),则有:
S 1 = W x X 1 + W s S 0 + b 1 O 1 = W o S 1 + b 2 S 2 = W x X 2 + W s S 1 + b 1 O 2 = W o S 2 + b 2 S 3 = W x X 3 + W s S 2 + b 1 O 3 = W o S 3 + b 2 \begin{align} S_1&=W_xX_1+W_sS_0+b_1\quad&O_1=W_oS_1+b_2\notag\\ S_2&=W_xX_2+W_sS_1+b_1\quad&O_2=W_oS_2+b_2\notag\\ S_3&=W_xX_3+W_sS_2+b_1\quad&O_3=W_oS_3+b_2\notag\\ \end{align} S1S2S3=WxX1+WsS0+b1=WxX2+WsS1+b1=WxX3+WsS2+b1O1=WoS1+b2O2=WoS2+b2O3=WoS3+b2
t 3 t_3 t3 时刻的损失函数为 L 3 L_3 L3 ,则有:
∂ L 3 ∂ W o = ∂ L 3 ∂ O 3 ∂ O 3 ∂ W o ∂ L 3 ∂ W x = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ( X 3 + W s ( X 2 + W s X 1 ) ) ∂ L 3 ∂ W s = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ( S 2 + W s ( S 1 + W s S 0 ) ) \begin{align} \frac{\partial L_3}{\partial W_o}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial W_o}\notag\\ \frac{\partial L_3}{\partial W_x}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\bigg(X_3+W_s\Big(X_2+W_sX_1\Big)\bigg)\notag\\ \frac{\partial L_3}{\partial W_s}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\bigg(S_2+W_s\Big(S_1+W_sS_0\Big)\bigg)\notag\\ \end{align} WoL3WxL3WsL3=O3L3WoO3=O3L3S3O3(X3+Ws(X2+WsX1))=O3L3S3O3(S2+Ws(S1+WsS0))

这部分的公式和参考资料里的不太一样,但我感觉参考资料里的公式不太严格吧?

所以,任意时刻损失函数对 W x , W s W_x,W_s Wx,Ws 的偏导为:
∂ L t ∂ W x = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ∑ k = 1 t W s t − k X k ∂ L t ∂ W s = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ∑ k = 1 t W s t − k S k − 1 \begin{align} \frac{\partial L_t}{\partial W_x}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\sum\limits_{k=1}^{t}W_s^{t-k}X_k\notag\\ \frac{\partial L_t}{\partial W_s}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\sum\limits_{k=1}^{t}W_s^{t-k}S_{k-1}\notag\\ \end{align} WxLtWsLt=O3L3S3O3k=1tWstkXk=O3L3S3O3k=1tWstkSk1
W s ∈ ( 0 , 1 ) W_s\in(0,1) Ws(0,1) 时,损失函数对 W x , W s W_x,W_s Wx,Ws 的偏导会逐渐“遗忘”距离较远的梯度,所以模型很难学习到距离较远的依赖关系。

W s > 1 W_s>1 Ws>1 时,前面的梯度对当前的影响会随着距离增加而指数级增大,甚至变成 NaN.

3 LSTM

LSTM(Long Short-term Memory) 是 RNN 的变体,并且已经逐渐成为了 RNN 的代名词,其基本结构如下图所示:

image-20230702153438853

相比普通的 RNN ,LSTM增加了输入门、输出门和遗忘门。

image-20230702185523392

上图中, z f , z i , z , z o z_f,z_i,z,z_o zf,zi,z,zo 均有相应的权值矩阵乘上拼接后的输入向量得到。

LSTM 可以解决 RNN 梯度消失的问题,因为如果不考虑遗忘门,距离再远的梯度也可以通过 c i → ⋯ → c t − 1 → c t c_{i}\rightarrow\cdots\rightarrow c_{t-1}\rightarrow c_t cict1ct 这条路径无损地传递到到当前的梯度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/37746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java

记数组nums的长度为n。从先nums左侧开始遍历&#xff0c;如果遇到的是奇数&#xff0c;就表示这个元素已经调整完成&#xff0c;继续从左往右遍历&#xff0c;直到遇到一个偶数。然后从nums右侧开始遍历&#xff0c;如果遇到的是偶数&#xff0c;就表示这个元素已经调整完成了&…

[JVM] 1. 初步认识JVM

核心思想&#xff1a; “Write Once, Run anywhere”. 各种语言通过编译器转换成字节码文件&#xff0c;在JVM上运行。 一、Java虚拟机 Java虚拟机是一台执行Java字节码的虚拟计算机&#xff0c;它拥有独立的运行机制&#xff0c;其运行的Java字节码也未必由Java语言编译而成…

辅助驾驶功能开发-功能规范篇(27)-2-导航式巡航辅助NCA

书接上回 2.2.2.3规划控制模块 2.2.2.3.1.全局导航规划 当用户输入导航终点时&#xff0c;全局导航规划模块会根据高精地图的覆盖区域将全局导航路径分为ICA,NCA可用段。实现ICA/NCA功能的划分及自动升降级。 当自车未按照导航路径行驶时(如未使出指定匝道&#xff0c;路口未…

折叠屏手机的屏幕,华为Mate X3给出了一份“内外兼修”的解决方案

说起折叠屏手机&#xff0c;屏幕一直都是这个领域的重头戏&#xff0c;很多人都对折叠屏手机有一种刻板印象&#xff0c;那就是脆弱。但是&#xff0c;3月份华为最新推出的Mate X3可以说是非常的亮眼&#xff0c;在内外屏幕、水滴铰链、影像系统等多个核心部件的全方位提升&…

Python面向对象学习整理(一)

一、面向对象中的几点概念 1.1 什么是类&#xff1f; 类&#xff1a;用户定义的对象原型&#xff08;prototype&#xff09;&#xff0c;该原型定义了一组可描述该类任何对象的属性&#xff0c;属性是数据成员&#xff08;类变量 和 实例变量&#xff09;和方法&#xff0c;可…

FPGA实验三:状态机的设计

目录 一、实验目的 二、实验要求 三、实验代码 1.design source文件部分代码 2.测试文件代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 &#xff08;1&#xff09;设计好序列检测器 &#xff08;2&#xff09;仿真波形&#xff08;检测11010&#xff09; 3…

Python爬虫实战之原神公告获取

前言 好久不见了吧&#xff0c;博主最近也是成为了准高三&#xff0c;没有太多时间去创作文章了&#xff0c;所以这篇文章很有可能是高考前最后一篇文章了(也不一定&#x1f609;) 言归正传&#xff0c;本次文章主要讲解如何去爬取原神官网的公告(我不玩原神&#xff01;&…

英飞凌BLDC驱动芯片替换-屹晶微

EG12521替代IR2106&#xff0c;NCP5106 EG2003替代IR2003 EG2103替代IR2103、IRS2003&#xff0c;IRS2108 EG2104替代IR2104 EG2104D替代IR2104、IR2008、IR2004 EG2104M替代IR2104、IR2008、IR2004 EG2104S替代IR2104 EG2106替代IR2106、IR2101、FAN7382、IRS2005、NCP…

使用flask开启一个简单的应用

Flask是非常流行的 Python Web框架&#xff0c;它能如此流行&#xff0c;原因主要有如下几点: 。有非常齐全的官方文档,上手非常方便。 。有非常好的扩展机制和第三方扩展环境&#xff0c;.工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易。 。社区活跃度非常高。…

基于springboot的智慧养老系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

less 笔记

1 margin-left 之后有 margin: 0 导致margin-left 无效 --> 不能重复定义 .btn-group {margin-left: calc(100% - 350px);display: inline-block;margin: 0; // 重复定义 导致上面 没有效果padding: 0; } 2 一定要F12检查元素 看各个div的宽度是否太长 导致靠左靠右 计算不…

[SSM]Spring6基础

目录 一、Spring启示录 1.1OCP开闭原则 1.2DIP依赖倒置原则 1.3IoC控制反转 1.4DI依赖注入 二、Spring概述 2.1Spring简介 2.2Spring八大模块 2.3Spring特点 三、Spring的入门程序 3.1Spring的文件 3.2第一个Spring程序 3.3第一个Spring程序详细剖析 3.4Spring6启…

Vue绑定class样式

效果&#xff1a;指定变换成某种颜色 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{backg…

谈谈——互联网生活中的隐私保护

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

打包apk时出现Execution failed for task ‘:app:lintVitalRelease

程序可以正常运行&#xff0c;但是打包apk的时候报Execution failed for task ‘:app:lintVitalRelease导致打包失败&#xff0c;原因是执行lintVitalRelease失败了&#xff0c;存在错误。解决办法&#xff1a;在app模块的build.gradle的Android里面添加如下代码&#xff1a; l…

Nacos服务注册和配置中心(Config,Eureka,Bus)2

Nacos数据模型 Nacos领域模型,Namespace命名空间、Group分组、集群这些都是为了进行归类管理&#xff0c;把服务和配置文件进行归类&#xff0c;归类之后就可以实现一定的效果&#xff0c;比如隔离。对于服务来说&#xff0c;不同命名空间中的服务不能够互相访问调用 N…

Spring Boot 中的熔断器:原理和使用

Spring Boot 中的熔断器&#xff1a;原理和使用 什么是熔断器&#xff1f; 熔断器是一种用于处理分布式系统中故障的设计模式。它可以防止出现故障的服务对整个系统造成连锁反应。熔断器通过监控故障服务的调用情况&#xff0c;当故障服务出现问题时&#xff0c;熔断器会迅速…

MacOS使用USB接口与IPhone进行Socket通信

演示效果如下: 开源地址: GitHub - rsms/peertalk: iOS and Mac Cocoa library for communicating over USB 克隆源码: git clone https://github.com/rsms/peertalk.git 克隆后打开peertalk然后启动xcode工程 先启动MacOS服务端工程,再启动iOS客户端工程 客户端 服务端

MySQl数据库第八课-------SQL命令查询-------主要命脉

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————— 目录 查询数据 条件 逻辑运算符 模糊查询 范围查询 in 判断空 UNION 排序 聚合 分组&#xff1a;group by —————————…

C++中随机数的使用总结

随机数 rand() 随机数发生器 #include <stdio.h> #include <unistd.h> #include <iostream> #include <string>using namespace std;int main(int argc, char *argv[]) {cout << "this is main()" << endl;cout << rand…