RNN LSTM

news2024/11/15 15:32:43

参考资料:

  • 《机器学习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 这条路径无损地传递到到当前的梯度。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云解析DNS

云解析过程&#xff1a; DNS查询的结果通常会在本地域名服务器中进行缓存&#xff0c;如果本地域名服务器中有缓存的情况下&#xff0c;则会跳过如下DNS查询步骤&#xff0c;很快返回解析结果。下面的示例则概述了本地域名服务器没有缓存的情况下&#xff0c;DNS查询所需的8个步…

电路的组成和连接方式-通路、开路、短路

电路是电子设备中最基本的组成部分之一&#xff0c;它由各种电子元件组成&#xff0c;并通过连接方式构建成不同的电路结构。在电路设计和维护中&#xff0c;通路、开路和短路是常见的概念&#xff0c;它们分别代表了电路中不同的连接状态和故障情况。 工具认识&#xff1a; …

万能的微信小程序个人主页:商城系统个人主页、外卖系统个人主页、购票系统个人主页等等【全部源代码分享+页面效果展示+直接复制粘贴编译即可】

前言 以下给出来四个常见的小程序个人主页,分别是商城系统个人主页,外卖系统个人主页,挂号系统个人主页,电影购票系统个人主页。包括完整的页面布局代码,完整的样式代码。使用的时候,只需要将页面代码和样式代码复制到自己项目对应的页面即可。而且可以根据已有代码只需稍…

【机器学习】准确率、精确度、召回率和 F1 定义

一、说明 数据科学家选择目标变量后 - 例如他们希望预测电子表格中的“列”&#xff0c;并完成了转换数据和构建模型的先决条件&#xff0c;最后步骤之一是评估模型的性能。 二、混淆矩阵的模型 2.1 混淆矩阵 选择性能指标通常取决于要解决的业务问题。假设您的数据集中有 10…

电子时钟制作(瑞萨RA)(2)----使用串口进行程序烧写

概述 本篇文章主要介绍如何使用UART串口烧写程序到瑞萨芯片&#xff0c;并以实际项目进行演示。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是芯片型号R7FA2E1A72DFL的开发板&#xff1a; 视频教程 https://www.bilibili.com/video/BV1kX4y1v7tL/ 电子时钟制…

Symbol.for()

示例&#xff1a;Symbol() 和 Symbol.for(‘ ’)的区别 Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中&#xff0c;键为 "foo" Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbolSymbol.for("b…

常见面试题之线程池

1. 说一下线程池的核心参数&#xff08;线程池的执行原理知道嘛&#xff09;&#xff1f; 线程池核心参数主要参考ThreadPoolExecutor这个类的7个参数的构造函数 corePoolSize 核心线程数目 maximumPoolSize 最大线程数目 (核心线程救急线程的最大数目) keepAliveTime 生存…

蘑菇车联用城市级落地讲述自动驾驶新故事

作者 | 魏启扬 来源 | 洞见新研社 “如果不能实现自动驾驶&#xff0c;特斯拉将一文不值”。 这是马斯克在接受媒体采访时的公开发言&#xff0c;这句话的语境是&#xff0c;特斯拉是自动驾驶坚实的拥护者&#xff0c;且一直在付诸行动。 可是特斯拉渐进式的单车智能路线&am…

【游戏逆向】探索可靠的线程检查方法

一、关键的线程检查 在对抗外挂和木马的方案中&#xff0c;不可能将所有的检查操作放在主线程中&#xff0c;因此&#xff0c;在方案中总有一个扫描线程或者环境检查线程必须保持工作&#xff0c;而它们也就成了外挂和木马的重要攻击目标&#xff0c;外挂和木马只要搞定了它们…

【高可用架构】聊聊故障和高可用架构设计

在架构设计中&#xff0c;高性能、高可用、可拓展以及安全等等有多种维度去判断架构的设计纬度&#xff0c;但是一般来说我们需要考虑具体的业务场景&#xff0c;去判断采用那种合适的架构方案&#xff0c;但是对于大多数的设计来说&#xff0c;都需要满足高性能、高可用。所以…

专科学历,有机会转行程序员吗?

你好&#xff0c;我是程序员晚枫&#xff0c;昨晚又1对1沟通了一位想转行程序员的朋友。 这位朋友是专科毕业&#xff0c;在电子厂干了2年多&#xff0c;感觉看不到希望&#xff0c;来找我咨询一下有没有转行程序员的可能性 学习计划。 我觉得他的情况和提问很有代表性&…

软件测试综述

概述 在不短不长的7年多研发生涯中&#xff0c;听过无数个软件测试概念&#xff1a;单元测试、功能测试、白盒测试、黑盒测试、自动化测试、契约测试、基准测试、性能测试、集成测试、渗透测试、接口测试、UI测试、端到端测试、E2E测试…… 恰逢在准备系统架构设计师软考高级…

我的创作纪念日-256天

机缘&#xff1a; 没有在csdn进行写作&#xff0c;我就不会认识更多对应领域的博主&#xff0c;并且也认识到了很多不同领域的博主这令我感到非常荣幸&#xff0c;能够加入到csdn。在分享交流的过程种我获得了&#xff1a; 实战项目中的经验分享日常学习过程中的记录通过文章进…

Ubuntu20.04安装arm-linux-gcc 4.3.2 (提供安装包)

⁡​​⁢‬‌​⁢‌⁡‍⁣⁤‬‌⁡⁢⁢‍⁡⁤​⁣‬‌&#xfeff;‬‍⁤​⁤‌⁣⁤​&#xfeff;⁤⁢‍⁢⁤‬⁣‬​‌&#xfeff;&#xfeff;Ubuntu20.04安装arm-linux-gcc 4.3.2 - 飞书云文档 (feishu.cn) CSDN编辑太丑了 转移阵地了

Google Colab:云端的Python编程神器

Google Colab&#xff0c;全名Google Colaboratory&#xff0c;是Google Research团队开发的一款云端编程工具&#xff0c;它允许任何人通过浏览器编写和执行Python代码。Colab尤其适合机器学习、数据分析和教育目的。它是一种托管式Jupyter笔记本服务&#xff0c;用户无需设置…

SQL-每日一题【185.部门工资前三高的员工】

题目 表: Employee 表: Department 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写一个SQL查询&#xff0c;找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 查询结果格式如…

Python基础语法第二章、变量和运算符

目录 一、常量和表达式 二、变量和类型 2.1变量是什么 2.2变量的语法 2.2.1定义变量 2.2.2使用变量 2.3变量的类型 2.3.1整数 2.3.2浮点数(小数) 2.3.3字符串 2.3.4布尔 2.3.5其他 2.4动态类型 4.1为什么要有这么多类型? 2.4.2动态类型特性 三、注释 3.1注释…

IT人,别人公司与自家差距到底有多大?

年底&#xff0c;是IT人最心酸的时候。辛辛苦苦了一年&#xff0c;别人家的公司员工人手一台 iPhone14Pro&#xff0c;自家可能连个年会都不开&#xff01;想想就气人 不能笑饱就气饱&#xff0c;省下一顿当赚到 - 1 - 形象 别人公司的IT男帅气又有(发)型 然&#xff0c;我们…

7.3 SpringBoot整合MyBatis分页插件github.pageHelper:实现图书列表API

文章目录 前言一、自己实现分页第一步&#xff0c;count 查询 总记录数&#xff08;totalCount&#xff09;&#xff0c;计算总页数&#xff08;totalPages&#xff09;第二步&#xff0c;limit 查询 指定页数据 二、不考虑分页的查询图书列表MapperBookServiceImplBookListPar…

Redis缓存穿透击穿以及雪崩

5、Reids缓存问题与解决 5.1、背景 Redis作为一种内存性数据库&#xff0c;当查询的数据在redis缓存中时就不需要在到真实的数据库中去查&#xff0c;加快了查询速度和保护了真实数据库的安全&#xff0c;但是同时也引入了一些新的问题&#xff0c;比如查询的数据不在内存和数…