MATLAB深度学习(六)——LSTM长短期神经网络原理与应用

        LSTM的应用可以参见一个相当好的视频:小车倒立摆最优控制教程 - Part1 Simulink Simscape Multibody仿真建模_哔哩哔哩_bilibili

6.1 序列建模——循环神经网络

        循环神经网络RNN是一类专门用于处理序列性数据x,···,xn的神经网络结构,其结构主要包含三个关键点:本质是一种神经网络;具有循环体结构;包括隐含状态。

6.1.1 RNN

        

        输入为x,经过Wx+b和激活函数f,得到输出y,但是实际应用中会有很多序列形式的数据

        RNN引入了隐状态h,可以对序列形式的数据提取特征,再转换输出。举个例子,一张图片那是同时出现,那就不叫作序列,但如果是视频中的平衡车,每个时间都有输出,且时间不同,输出会有变化,这种就叫做序列。

        

        h1基于上一个隐藏层的状态h0和当前的输入x1计算而来,这一点所有的序列数据都是一样的

        f一般数tanh,sigmoid,ReLU等非线性激活函数,他和CNN一样,在计算时,使用的U W b都是一样的,所以参数是共享的,你把他理解成一个向量,相当于用同一个3*1的向量去乘以每个时刻。因此我们可以得出,t时刻的RNN网络具有两个输入,分别为t时刻的输入向量x与t-1时刻的隐含状态。其中h在RNN网络的循环路上。

6.1.2 BPTT

    随时间反向传播算法(BPTT)笔记-CSDN博客

6.1.3 基于门与记忆细胞的长期依赖关系 LSTM

        

        RNN循环体内的信息渠道单一,只是通过tanh神经网络层,直接输出。从训练RNN的网络角度来看,训练过程一般使用随着时间的反向传播BPTT,沿着RNN时域展开方向的反方向对每个参数依次求偏导,由此可以得到损失函数关于各个权重矩阵的BPTT梯度表达式,由于训练过程中有些值会非常接近0或者1,因此序列长了之后会导致梯度爆炸或消失。

        改进思想是增加RNN体内循环的信息流通路径,设置相应记忆单元,其基本单元称为LSTM单元(cell)。LSTM中的重复模块则包含四个交互的层,三个Sigmoid和一个tanh层,并以一个非常特殊的方式进行交互。

上图中,σ表示的Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,

  • 因为任何数乘以 0 都得 0,这部分信息就会剔除掉;
  • 同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来

6.1.4 LSTM的门原理

(1)忘记门

        在我们LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为“忘记门”的结构完成。该忘记门会读取上一个输出和当前输入,做一个Sigmoid 的非线性映射,然后输出一个向量(该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态相乘。

        (2)输入门

        第一,sigmoid层称“输入门层”决定什么值我们将要更新;第二,一个tanh层创建一个新的候选值向量\tilde{C}_{t},会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。

     (3)细胞状态

          现在是更新旧细胞状态的时间了,C_{t-1}更新为C_{t}。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。我们把旧状态与f_{t}相乘,丢弃掉我们确定需要丢弃的信息,接着加上i_{t} * \tilde{C}_{t}。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

      (4)输出门

        最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。

        首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分

        

        从上面的分析我们就可以看到,一贯而终的记忆细胞 C,信息流通的路径,使得训练过程中的梯度信息长距离具有可行性,遗忘门f,输入门i,输出门o,来通过有用信息,删除以往信息。

6.2 训练效果

给出训练代码:

%% Data: 数据来源
fileName = {'data_45deg.mat', 'data_30deg.mat', ...'data_15deg.mat', 'data_5deg.mat', ...'data_-45deg.mat', 'data_-30deg.mat', ...'data_-15deg.mat', 'data_-5deg.mat' };% training:
trainingData = [];
for i = 1:length(fileName)currentData = [];load(fileName{i});currentData = [out.state_data, ...out.control_input_data]; % 5列trainingData = [trainingData; currentData];
end%% Setup: (sequence to one)
numInput = 1; % sequence 4x1 
numResponses = 1; % one 1% LSTM:
numHiddenUnits = 100;
layers = [ ...sequenceInputLayer(numInput, Normalization="zscore")lstmLayer(numHiddenUnits, OutputMode="last")fullyConnectedLayer(numResponses)regressionLayer];options = trainingOptions("adam", ...MaxEpochs=2000, ...ValidationData= ...{num2cell(trainingData(:,1:4),2) ...trainingData(:,5)}, ...OutputNetwork="best-validation-loss", ...InitialLearnRate=0.001, ...SequenceLength="shortest", ...Plots="training-progress", ...Verbose= false);policy = trainNetwork(num2cell(trainingData(:,1:4),2),...trainingData(:,5), layers, options);

        

LSTM与RNN参考 如何从RNN起步,一步一步通俗理解LSTM_rnn lstm-CSDN博客

1111

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

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

相关文章

c++趣味编程玩转物联网:树莓派Pico控制 LED点阵屏

88 LED点阵屏是一种常见的数字显示设备,被广泛应用于电子时钟、公交车显示屏和游戏设备中。在本项目中,我们使用树莓派Pico开发板,通过I2C协议驱动HT16K33芯片,实现点阵屏显示心形图案、倒计时、动态矩形和动态圆等内容。本文详细…

transformer.js(四): 模型接口介绍

前面的文章底层架构及性能优化指南介绍了transformer.js的架构和优化策略,在本文中,将详细介绍 transformer.js 的模型接口,帮助你了解如何在 JavaScript 环境中使用这些强大的工具。 推荐阅读 ansformer.js(二)&…

11.25 校内模拟赛总结

难评 复盘 7:40 开题 还是决定采取前期审题时间长一点的策略 T1,显然枚举斜率比较优,算一下复杂度是对的,就会了;T2 好神秘啊,感觉又是什么根据结论然后贪心删数;T3 显然是优化 dp,感觉可做…

学习编程,学习中间件,学习源码的思路

01 看的多,内化不足 最近想复习一下编程相关的知识,在复习前我翻开了之前的一些笔记,这些笔记基本都是从书本、视频、博客等摘取记录的,看着这些笔记心里总结:看的多,内化不足。 02 整理大纲 为了解决这个…

[C++]vector:迭代器失效和vector<string>中更深层次拷贝的问题

迭代器失效 一、迭代器失效的两大类型异地扩容后的失效原地删除后的失效 二、vector<string>出现的深层次拷贝问题 一、迭代器失效的两大类型 异地扩容后的失效 在vector容器中&#xff0c;通常情况下的扩容都是异地扩容&#xff0c;例如resize, reserve&#xff0c;但…

初识 Django

声明 适用于想要快速入门的开发者&#xff0c;有前后端开发以及语言基础&#xff0c;想要学习语法或者特性。 想要学会快速开发&#xff0c;快速入门&#xff0c;请看博客【实用向】Django 框架入门并结合本篇文章。 命令 命令描述startproject创建一个 Django 项目startapp…

.net core MVC入门(一)

文章目录 项目地址一、环境配置1.1 安装EF core需要包1.2 配置数据库连接二、使用EF创建表2.1 整体流程梳理2.1 建表详细流程三、添加第一个视图3.1整体流程梳理3.1 添加视图,并显示在web里四、使用EF增加Catogory数据,并且读取数据到页面4.1整体流程梳理4.2 实现五、增加Cat…

【freertos】FreeRTOS消息队列的介绍与使用

FreeRTOS消息队列的介绍与使用 一、概述二、消息队列的运作机制三、API函数1、消息队列创建函数2、消息队列静态创建函数3、用于向队列尾部发送一个队列消息4、在中断服务程序中用于向队列尾部发送一个消息5、向队列队首发送一个消息6、在中断服务程序中向消息队列队首发送一个…

页的初步认识

关于准备 我们在之前的学习中&#xff0c;已经学习了相当一部分有关段的知识&#xff0c;CPU提供了段的机制来给我们的内存进行保护&#xff0c;但实际上我们在x86下的段base是0&#xff0c;实际上并没有偏移 两种分页模式 我们有两种分页模式&#xff0c;29912分页和101012…

题目一:bugku---game1

2024.11.21 1、题目连接&#xff1a; 2、打开是个小游戏 3、正常玩一把结束后&#xff0c;用bp抓包 4、查看url有三个参数&#xff0c;score对应的就是我们结束这把游戏时获得的分数&#xff0c;sign的zM后面为这把游戏分数的base64加密 5、将抓到的包&#xff0c;发送到重放…

小柴冲刺软考中级嵌入式系统设计师系列三、嵌入式硬件设计(1)嵌入式系统电源管理

越努力&#xff0c;越幸运&#xff01; 人生的意义在于体验&#xff01; 目录 越努力&#xff0c;越幸运&#xff01; 一、电源管理 (1)系统上电行为 (2)空闲模式 (3)断电 (4)电压与频率缩放 例如 具体实现如下: ① 12V 转8V ② 12V 转-8V ③ 12V 转5V ④ 5V 转3…

C++ 优先算法 —— 长度最小的子数组(滑动窗口)

目录 题目&#xff1a;长度最小的子数组 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 滑动窗口正确性 3. 代码实现 Ⅰ. 暴力枚举(会超时&#xff09; Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 题目&#xff1a;长…

uniapp定义new plus.nativeObj.View实现APP端全局弹窗

为什么要用new plus.nativeObj.View在APP端实现弹窗&#xff1f;因为uni.showModal在APP端太难看了。 AppPopupView弹窗函数参数定义 参数一:弹窗信息(所有属性可不填&#xff0c;会有默认值) 1.title:"", //标题 2.content:"", //内容 3.confirmBoxCo…

网络安全——SpringBoot配置文件明文加密

一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储&#xff0c;你的电脑被拿去修理&#xff0c;就会容易泄露&#xff0c;一旦被其他人获取到…

Linux系统编程之进程基础知识

概述 在Linux系统中&#xff0c;进程是指一个正在运行的程序实例。每个进程都有一个唯一的进程标识符&#xff0c;即PID&#xff0c;操作系统通过这个PID来唯一识别和管理各个进程。进程不仅仅是程序代码的运行实例&#xff0c;它还包含了程序运行时所需的各种资源&#xff0c;…

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办&#xff0c;承办&#xff0c;支持单位 会议官网 www.icirac.org 大会时间&#xff1a;2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09;由华南理工大学主办&#xff0c;会议将于2024年11月29日-12月1日在中国广…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想&#xff0c;将代码与数据分离&#xff0c;易维护&#xff0c;易上手。使用yaml编写编写测试用例&#xff0c;利用requests库发送请求&#xff0c;使用pytest管理用例&#xff0c;allure生成…

利用 Jsoup 进行高效 Web 抓取与 HTML 处理

Jsoup 是一款 Java 的 HTML 解析器&#xff0c;可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API&#xff0c;可通过 DOM&#xff0c;CSS 以及类似于 JQuery 的操作方法来取出和操作数据。 官网&#xff1a;https://jsoup.org/ 中文文档&#xff1a;Jsou…

蓝桥杯不知道叫什么题目

小蓝有一个整数&#xff0c;初始值为1&#xff0c;他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如&#xff0c;如果整…

【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?

本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…