LSTM的结构

RNN和LSTM

简略表示RNN层:长方形节点中包含了矩阵乘积、偏置的和、tanh函数的变换。将下面这个公式表示成一个tanh节点。

在这里插入图片描述

在这里插入图片描述

LSTM:Long Short-Term Memory(长短期记忆),长时间维持短期记忆。

LSTM与RNN的接口(输入输出)如下图,不同地方在于,LSTM还有路径c 。c称为记忆单元。

在这里插入图片描述

记忆单元在LSTM层内部结束工作,不向其他层输出。记忆单元仅在LSTM层内部接收和传递数据。

ct存储了时刻t时LSTM的记忆(保存了从过去到时刻t的所有必要信息)。

LSTM层结构

LSTM层基于记忆单元ct计算隐藏状态ht。

记忆单元ct基于3个输入经过某种计算算出。隐藏状态ht要用更新后的ct计算,对ct的各个元素应用tanh函数,这表明,记忆单元ct和隐藏状态ht的元素个数相同。

在这里插入图片描述

Gate

Gate是门的意思。水管阀门的作用就是阻止或者释放水流(数据),Gate用于控制数据的流动。

LSTM中的阀门,可以控制阀门打开的程度(开合程度)来控制水的流量。门的开合程度由0.0 ~ 1.0的实数表示(1.0全开)。门的开合程度也是自动从数据中学习到的(有权重参数用于控制门的开合程度,这些权重参数通过学习被更新)。sigmoid函数用于求门的开合程度。

输出门

之前的隐藏状态ht对记忆单元ct仅用了tanh函数,如果给tanh(ct)加上门,这个门,管理下个隐藏状态ht的输出,称为输出门(output gate)。

输出门的开合程度根据输入xt和上个状态ht-1求出,公式如下。在使用的权重参数和偏置的上标上添加了output的首字母o,公式还用了sigmoid函数,公式的结果就是输出门的输出o。

在这里插入图片描述

ht可由o和tanh(ct)的乘积计算出来。这个乘积是对应元素的乘积,也称为阿达玛乘积。也就是说,对tanh(ct)的各个元素,调整它们作为下一时刻的隐藏状态的重要程度。添加输出门的LSTM层就像下面这样。

在这里插入图片描述

tanh输出-1.0 ~ 1.0的实数,数值表示被编码的信息的强弱程度,sigmoid函数的输出是0.0 ~ 1.0的实数,表示数据流出的比例。

通常,门使用sigmoid函数作为激活函数;包含实质信息的数据使用tanh函数作为激活函数。

遗忘门

接下来要告诉记忆单元需要忘记什么,也就是在记忆单元ct-1上添加一个遗忘门。

遗忘门开合程度根据输入xt和上个状态ht-1求出,公式如下。

在这里插入图片描述

添加了遗忘门的如下图右侧。

在这里插入图片描述

在记忆单元中添加新的信息

遗忘门从上一时刻的记忆单元中删除了应该忘记的东西,还需要向记忆单元添加一些应当记住的新信息,也就是要添加新的tanh节点。

tanh节点计算出的结果加到上一时刻的记忆单元上,从而在记忆单元中添加新的信息。

tanh节点作用就是把新信息添加到记忆单元中。tanh节点的计算公式如下,公式的结果g是向记忆单元添加的新信息。将g加到ct-1上,形成新的记忆。

在这里插入图片描述

在这里插入图片描述

输入门

给上面的g新添加一个输入门,输入门用来判断新增信息的各个元素的价值有多大。

之前直接加上新信息,没有对要添加的信息进行取舍。给g加上输入门,会添加加权后的新信息。

下面的公式结果i表示输出。sigma符号表示输入门。i和g对应元素的乘积将被添加到记忆单元中。

在这里插入图片描述

在这里插入图片描述

记忆单元的反向传播

通过观察记忆单元c的反向传播,可以知道为什么LSTM结构不会引起梯度消失。

在这里插入图片描述

仅关注记忆单元,它的反向传播流过+和×节点。

+节点将上游传来的梯度原样流出,所以梯度没有变化。

×节点是对应元素的乘积(阿达玛积),这里反向传播,进行的是对应元素的乘积计算,而不是矩阵乘积运算,所以不会像RNN一样,由于重复进行多次矩阵乘积运算,导致梯度消失或梯度爆炸。

×节点的计算由遗忘门控制,遗忘门认为应该忘记的记忆单元的元素,梯度会变小,遗忘门认为不该忘记的记忆单元的元素,梯度向过去流动时不会变小。所以,应该长期记住的信息能在不发生梯度消失的情况下传播。因此,记忆单元能够保存(学习)长期的依赖关系。

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

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

相关文章

STM32 USART 补充

串口通讯的数据包:发送设备通过自身的TXD接口传输到接收设备的RXD接口。 串口通讯的协议层中,规定了数据包的内容,由起始位、主体数据、校验位、停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。 异步通讯&#xf…

ROS TF变换

静态坐标转换:机器人本体中心到雷达中心的转换。因为激光雷达可能没安装到机器人的中心。 动态坐标转换:机器人中心和里程计坐标的变换。机器人从起点出发后,里程计坐标相对于本体就会产生一个偏移,这个偏移随着机器人的运动不断…

ROS底盘控制节点 源码分析

先在机器人端通过launch文件启动底盘控制。 robot:~$ roslaunch base_control base_control.launch ... logging to /home/jym/.ros/log/3e52acda-914a-11ec-beaa-ac8247315e93/roslaunch-robot-8759.log Checking log directory for disk usage. This may take a while. Pres…

ROS + OpenCV

视觉节点测试 先进行一些测试。并记录数据。 圆的是节点,方的是话题。 1.robot_camera.launch robot:~$ roslaunch robot_vision robot_camera.launch ... logging to /home/jym/.ros/log/bff715b6-9201-11ec-b271-ac8247315e93/roslaunch-robot-8830.log Check…

ROS+雷达 运行数据记录

先测试一下雷达,记录数据。方便接下来分析源码。 1.roslaunch robot_navigation lidar.launch robot:~$ roslaunch robot_navigation lidar.launch ... logging to /home/jym/.ros/log/7136849a-92cc-11ec-acff-ac8247315e93/roslaunch-robot-9556.log Checking l…

ROS 找C++算法源码的方法

在gmapping的launch文件中看到,type“slam_gmapping”,这里的slam_gmapping是c编译后的可执行文件。 如果想要修改gmapping算法,就需要找到slam_gmapping的c源码。 但是这是用apt下载的包,是二进制类型的,没有下载出…

ros 雷达 slam 导航 文件分析

ros 雷达 slam 导航 文件分析robot_slam_laser.launchrobot_lidar.launchlidar.launchraplidar.launchkarto.launchgmapping.launchcartographer.launchrobot_navigation.launchmap.yamlmap.pgmamcl_params.yamlmove_base.launchcostmap_common_params.yamllocal_costmap_param…

Apprentissage du français partie 1

Apprentissage du franais partie 1 键盘转换图: 字母:26个 元音字母:a、e、i、o、u、y b浊辅音(声带)-p清辅音 d-t 音符 音符:改变字母发音。 :闭音符 [e] :开音符 /ε/ :长音符 /ε/…

stm32基本定时器

定时器分类 stm32f1系列,8个定时器,基本定时器(TIM6,7)、通用定时器(TIM2,3,4,5)、高级定时器(TIM1,8)。 基本定时器:16位,只能向上计数的定时器,只能定时,没有外部IO 通用定时器:16位&#…

stm32高级定时器 基础知识

stm32高级定时器 高级定时器时基单元: 包含一个16位自动重装载寄存器 ARR 一个16位的计数器CNT,可向上/下计数 一个16位可编程预分频器PSC,预分频器时钟源有多种可选,有内部的时钟、外部时钟。 一个8位的重复计数器 RCR&…

stm32 PWM互补输出

stm32高级定时器例子—stm32 PWM互补输出 定时器初始化结构体 TIM_TimeBaseInitTypeDef 时基结构体,用于定时器基础参数设置,与TIM_TimeBaseInit函数配合使用,完成配置。 typedef struct { TIM_Prescaler /*定时器预分频器设置&…

stm32 输入捕获 测量脉宽

选用通用定时器TIM5的CH1。 PA0接一个按键,默认接GND,当按键按下时,IO口被拉高,此时,可利用定时器的输入捕获功能,测量按键按下的这段高电平的时间。 宏定义方便程序升级、移植,举个例子&#…

stm32 PWM输入捕获

普通的输入捕获,可使用定时器的四个通道,一路捕获占用一个捕获寄存器. PWM输入,只能使用两个通道,通道1和通道2。 一路PWM输入占用两个捕获寄存器,一个捕获周期,一个捕获占空比。 这里,用通用…

直流有刷减速电机结构及其工作原理

寒假无聊拆了个直流有刷减速电机。下面介绍一下它的结构和工作原理 直流电机 直流电机和直流减速电机: 构造上相差的是一个减速齿轮组。 普通的直流电机当空载时,电机的转速由电压决定,直流减速电机的转速由齿轮组和电压决定。 齿轮组作…

数据库基础概念

postgreSQL设置只允许本地机器连接 在D:\program files\PostgreSQL\14\data里面设置postgresql.conf: listen_addresses ‘localhost’ 然后在服务窗口重新启动postgresql。 PostgreSQL执行SQL语句 PostgreSQL的psql工具可通过命令行执行SQL语句。 psql -U po…

电机和驱动的种类

电机种类 直流电机 分为普通的直流电机、直流减速电机、有刷、无刷。 直流有刷减速电机参数: 空载转速,正常工作电压,电机不带任何负载的转速。 空载电流,正常工作电压,电机不带任何负载的工作电流。单位mA。 负载…

Linux shell基础知识

Shell简介 Shell是一个应用程序,接收用户输入的命令,根据命令做出相应动作。 Shell负责将应用层或者用户输入的命令,传递给系统内核。由操作系统内核,来完成相应的工作。然后将结果反馈给应用层或者用户。 shell命令格式&#…

Linux APT VIM 的一些指令

APT APT下载工具,可以实现软件自动下载、配置、安装二进制或源码功能。 APT采用客户端/服务器模式。 sudo apt-get update 更新软件 sudo apt-get check 检查依赖关系 sudo apt-get install package-name 安装软件 apt-get负责下载软件,install负责安…

CATIA 界面介绍

窗口介绍 窗口主要有:菜单栏、工具栏、特征树、罗盘、信息栏、图形区。 菜单栏,开始里面有CATIA的各个功能模块。 图形区,进行3D、2D设计的图形创建、编辑区域。 信息栏,显示用户即将进行操作的文字提示。 工具栏,…

Linux C文件编译

设置编辑器 1.TAB键设置为4空格。 首先用vim打开/etc/vim/vimrc文件,这里面发现root用户才能修改vimrc文件,所以用sudo命令暂时切换到root用户。 在vimrc文件最后面,输入set ts 4完成设置。 然后保存,关闭文件。 2.VIM编辑器显…