LSTM长短期记忆网

 笔记来源——

【重温经典】大白话讲解LSTM长短期记忆网络 如何缓解梯度消失,手把手公式推导反向传播

 

LSTM网络结构

RNN结构

下面拉出一个单元结构进行讲解

C_{t-1}:记忆细胞,t-1时刻的记忆细胞

h_{t-1}:表示状态,t-1时刻的状态

正是这样经过了一个单元,我们输出了新的的状态跟记忆细胞

\sigma:门单元  

f_{t}:forget,遗忘门

i_{t}:更新门

o_{t}:输出门

公式推导

这里的小c_{t}就认为是我们的g_{t}

结构讲解

通过例子我们来理解一下

假设我们要考试,左边的时间部A是我们的高等数学,中间的时间部是我们的线性代数

假设我们要去考线性代数,X_{t}就相当于我们要去复习我们的线性代数,打个比方就是我们已经翻开了线性代数的课本以及习题开始复习。中间那些条条就相当于我们复习形成的记忆。最后上面的h_{t}就是我们要去考试,就是我们考试的一个分数。复习当中会形成我们新的记忆C_{t},会带着我们复习好的记忆拿去考试。最后下面的h_{t}就是我们考完试的这样的一个状态。

之后就好理解了,前一科,我们要去考高等数学,那么C_{t-1}就是我们考完高等数学的这样一个记忆。就是我们复习完之后所形成的跟高数有关的一些记忆。左下脚的h_{t-1}就是考完高数的这样一个状态。

然后我们就有一个目标,我们希望考完的每一个得分都有好的一个目标/成绩(上面的h_{t}),因为我们这里是一个有监督学习,我们需要有一个好的成绩来监督我们每一个参数的迭代更新。

遗忘门

假设我们的脑容量是有限的,我们在考完高等数学之后需要遗忘其相关内容给我们的线性代数留空间。

刚刚我们了解到我们需要X_{t}去复习我们的线性代数,第二步就是我们需要把线性代数没有关的内容遗忘掉,所以f_{t}就是遗忘掉我们过去积累下来的一些记忆。

如何操作?

我们知道f_{t}里面有所有的数都是介于0-1,例如[0,1,1,0,1],就是一个向量,通过跟这样的一个向量相乘,他就会把C_{t-1}向量里面对应的位置的一些记忆的内容给调整,是0就遗忘,是1就调整。

更新门

注:这里的小c_{t}就是之前说的g_{t}

这里i_{t}作用的对象就是g_{t},这里的g_{t}就相当于我们形成的新的记忆,但是这个新的记忆并不是全都有用,所以我们这里要有一个门要去选择性的提取。所以这里的i_{t}就是可以过滤掉没有用的记忆。

然后到这里就形成了我们新的记忆

这里的C_{t}就很容易理解了,这里的C_{t}就跟我们过去的记忆和当下生成的记忆有关系,将他们相加结合起来。

tanh是激活函数

输出门

这里分红色的tanh如何理解?

可以理解为:它可以将我们记忆的内容转化为答题的能力

因为我们复习到的东西很多很全面,最后我们考试的时候不可能将所有复习到的东西都考一遍,有可能只考到其中的一部分,所以我们这里的o_{t}的作用就是我们只需要用到其中的一部分的知识来进行答题。

RNN梯度消失回顾

什么是RNN?

RNN是递归神经网络(Recurrent Neural Network)的缩写。它是一种神经网络结构,专门用于处理序列数据,具有记忆和顺序处理的能力。

在传统的前馈神经网络中,每个输入与输出之间都是独立的,而RNN通过引入循环连接,允许信息在网络中传递并保持状态。

RNN的基本结构包括:

  1. 循环连接(Recurrent Connections):RNN中的每个时间步都有一个循环连接,使得网络可以在处理当前输入时考虑之前的信息。这种连接使得RNN能够处理任意长度的序列输入。

  2. 隐藏状态(Hidden State):在RNN的每个时间步,网络都会产生一个隐藏状态,用于存储之前时间步的信息。隐藏状态是RNN的记忆,使得网络能够在处理序列时保持上下文信息。

  3. 时间步(Time Steps):RNN处理序列数据时,会将输入序列分割成多个时间步。在每个时间步,网络接收一个输入,并生成一个输出和一个隐藏状态,然后将隐藏状态传递到下一个时间步。

  4. 递归单元(Recurrent Units):RNN中的递归单元通常采用LSTM(Long Short-Term Memory)单元或GRU(Gated Recurrent Unit)单元等结构,以解决传统RNN中的梯度消失和梯度爆炸等问题。

RNN在自然语言处理(如语言建模、机器翻译、情感分析)、时间序列分析(如股票预测、天气预测)和序列生成(如文本生成、音乐生成)等领域都有广泛的应用。

对于RNN梯度消失的这个问题,可以参考我这篇笔记

RNN循环神经网络及其梯度消失笔记

LSTM如何缓解梯度消失

可以看到我们的参数是非常多的

我们以W_{xf}参数为例,推导一下我们反向传播的过程

假设我们最右边就是t=3,中间t=2,最前面t=1

对三个位置的W_{xf}分别求导

这是我们求导的路径

不同路线的求偏导

简化方程

下面就是我们简化后的方程

由于要求第三个,但路径是非常多的,就没有写推导的方程了,就写了一下路径

合并一下同类项,并将这两个路径组合

把上面的这个路径简化为下面那样

我们继续把从C_{3}C_{2}的路继续简化

再表达为右边的公式

最后得到的就是右边的这些,而且我们发现了连乘项的出现,然后我们针对这个部分对其求一下

这个式子有一个特点,就是他是由4个部分进行相加的

这些参数是可以去调控他值的一个大小的,也就是说我们的模型可以通过学习去控制它值的一个大小的。从而去控制\frac{\partial C_{t}}{\partial C_{t-1}}的值的大小的。也就是说我可以去控制这些参数而去使得\frac{\partial C_{t}}{\partial C_{t-1}}处于比较接近于一个1的数。

我们可以知道,当我们的时间跨度越长的时候 ,我们的路径越长,中间的累乘项也会更多,这个部分就容易带来我们的梯度消失的可能,所以这个部分我们没有办法去把控。

但是这里我们的连乘项,可以灵活的去调控它的参数,去实现很多1*1*1的效果,就导致连乘的效果大大的削弱了,梯度消失的可能性就大大的降低了,所以就极大的缓解了梯度消失的可能性。

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

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

相关文章

Oracle.xs.dll‘ for module DBD::Oracle: load_file:找不到指定的模块

安装Ora2pg时,碰到 异常现象 D:\ProgramFiles\ora2pg>ora2pg -t show_report --estimate_cost -c ora2pg_conf.dist install_driver(Oracle) failed: Cant load D:/ProgramFiles/strawberry/perl/site/lib/auto/DBD/Oracle/Oracle.xs.dll for module DBD::Oracle: load_fil…

Nginx使用—基础知识

Nginx简介 Nginx优点 高性能、高并发 支持很高的并发,在处理大量并发的情况下,比其他web服务器要高效 轻量且高扩展 功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装) 代码模块化(易读&#xff0…

win10虚拟机安装驱动教程

在虚拟机菜单栏中选择安装VMware Tools: 安装好后,在虚拟机中打开此电脑,双击DVD驱动器进行安装: 一直点击下一步: 安装完成: 此时重启虚拟机,发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…

Docker常用基础指令

目录 1 前言 2 常用指令 2.1 获取帮助 2.2 拉取镜像到本地 2.3 对本地镜像进行打包 2.4 对本地镜像的删除 2.5 通过tar包加载本地镜像 2.6 查看所有镜像 2.7 创建新的容器 2.8 查看容器 2.9 停止容器运行 2.10 运行容器 2.11 删除容器 2.12 查看容器日志 2.13 进…

ImportError: Could not import docarray python package解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

springcloud和基础服务的搭建以及封装

代码仓库地址:https://github.com/zhaoyiwen-wuxian/springcloud-common page分页也进行了封装,只需要添加到pom中,将会自动进行分页,并且后端不需要写任何的分页数据。只需要前端自己传分页参数即可,并且里面封装了很…

Clickhouse: 数据基本知识

产品概述 ClickHouse是一个开源的列式数据库管理系统,专门用于在线分析处理(OLAP)场景。它具有高性能、高可靠性、高可扩展性和低成本等优点,被广泛应用于大数据领域。 以下是ClickHouse的主要特点: 高性能&#xff…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

Unity角色动画变成半跪\半蹲\下沉 的问题

导入的人物动画发生如图形态 解决方法:找到动画模型,Rig - AnimationType 改为Humanoid ,然后Apply一下

Vue+OpenLayers7入门到实战目录

前言 本篇作为《VueOpenLayers7入门到实战》所有文章的二合一汇总目录,方便查找。 本专栏源码是由OpenLayers7.x版本结合Vue框架编写。 本专栏从Vue搭建脚手架到如何引入OpenLayers7依赖的每一步详细新手教程,再到通过各种入门案例和综合性的实战案例&a…

【MySQL】视图、索引

目录 视图视图的用途优点视图的缺点创建视图查看视图修改视图删除视图注意事项 索引索引的原理索引的数据结构二分查找法Hash结构Hash冲突!!! B树二叉查找树 存在问题改造二叉树——B树降低树的高度 B树特点案例继续优化的方向 改造B树——B树…

项目管理工具及模板总结|甘特图|OKR周报|任务管理|头脑风暴

项目管理常用模板大全: 1. 项目组OKR周报 2. 项目组传统周报工作法 3. 项目甘特图 4. 团队名单 5. 招聘跟进表 6. 出勤统计 7. 年度工作日历 8. 项目工作年计划 9. 版本排期 10. 项目组任务管理 11. 项目规划模板 12. 产品分析报告 13. 头脑风暴 软件开发管理全套标…

Linux CentOS安装教程

CentOS是一种基于Linux的免费、开源的操作系统,它是Red Hat Enterprise Linux(RHEL)源代码的重建版本。CentOS致力于提供稳定、可靠的服务器操作系统,广泛应用于企业级服务器和Web服务器。它具有强大的安全性和稳定性,…

阿里云服务器配置CPU、内存、存储、带宽选择方法

阿里云服务器配置怎么选择?CPU内存、公网带宽和系统盘怎么选择?个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例,企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器,阿里云服务器网aliyunfuwuqi.com整…

Vue+腾讯地图-实现关键词输入提示功能

不废话,上代码~~~ 效果图: 1、先去腾讯地图后台创建自己的应用获取到应用的 Key 腾讯地图后台地址:腾讯位置服务 - 立足生态,连接未来 创建应用的 Key 如下: 2、在项目中添加腾讯地图API的js插件,如…

Thinkphp5.1中,将数组赋值给js使用

一、例如Thinkphp5.1中的的代码是这样的 $data [status > 1,msg > 加载成功,data > [id > 1,username > 小洪帽,] ];$this->assign(data,$data);二、JS代码接收PHP中的数组 注意 <> 符号是不需要放引号的。 let arr <?json_encode($data)?>…

LeetCode 刷题 [C++] 第98题.验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题目分析 由题…

【排序】详解冒泡排序

一、思想 冒泡排序的基本思想是利用两两比较相邻记录的方式&#xff0c;通过一系列的比较和交换操作&#xff0c;使得较大或较小的元素逐渐移动到数列的一端。在每一轮的排序过程中&#xff0c;都会从数列的起始位置开始&#xff0c;对相邻的元素进行比较&#xff0c;如果它们…

Anthropic 公司最新宣布,他们的 AI 聊天机器人模型击败了 OpenAI 的 GPT-4

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

设计MySQL数据表的几个注意点

最近合作搞项目&#xff0c;发现了很多问题。特别的&#xff0c;数据库层面上的问题更为致命。记录一下&#xff0c;希望后面看到博客的同学们注意。 注意&#xff1a;以下观点只用于一般情况下的单体、微服务&#xff0c;不保证适用所有场景。 一、ID问题 ID名称问题 如下图…