通俗理解什么是 LSTM 神经网络

news2024/11/15 17:37:31

大家好啊,我是董董灿。

刚开始做程序开发时,在公司提交代码前,都需要让大佬们 review(评审),大佬们看完,总会在评论区打出一串"LGTM"。

当时作为小白的我,天真地以为大佬觉得我提交的代码还不错,在开玩笑的夸我说"老哥太猛"。

后来才知道,这原来是 review 的一种黑话,Look Good To Me(LGTM) 的意思,也就是说"我觉得没问题"。

后来学算法,看到了 LSTM,心想这又是什么意思呢。

1、 什么是 LSTM

LSTM(Long Short Term Memory),长短时记忆,是一种特殊的循环神经网络。昨天的那篇文章介绍 Seq2Seq 的时候说过, LSTM 实际上就是一种 Seq2Seq 结构。

这个网络主要是用来处理具有时间序列的数据任务,比如文本翻译、文本转语音等等。

网上关于 LSTM 的文章其实有很多,但我当时学习的时候却感觉很难受,因为很多文章基本上来就是公式一扔,三个门一讲就完事儿了。

作为小白看完之后,依然学不到东西,并且很难对这个算法有一个感性的认识。

后来查阅了很多资料,不记得在哪篇文章或者哪个视频里看到了一个关于这个算法的详解,印象很深,今天就和大家来分享一下。 

请跟上下面的思路,文章不长,读完后,希望你会对 LSTM 有一个全新的认识。

2、从一个考试的例子出发来理解 LSTM

首先我们假设一个场景,我们是大学生,目前正处于期末考试阶段,并且已经考完了线性代数,接下来还有一门高数要考。

而我们作为学生,很自然的要开始复习(学习)高数的内容了。

在这个场景中,使用 LSTM 来处理这种带有时间序列的任务,即考完了线性代数,接着去学习高数。

我们来看看,LSTM是怎么和人一样,学到了高数的内容的。虽然不打算说太多技术细节,但是 LSTM 里的一些概念还是要结合例子来说。

首先,LSTM的结构大致如下面这样。

图片

我们只看中间的一个方框,他接受了前面方框的两个输出(一个是上一层真正的输出状态,对应上面的黑色箭头;一个是上一层输出的隐藏状态,对应下面的输出箭头),同时接受了一个新的 Xt 作为输入。

好,那我们就从这里开始。

我们现在要参加高数考试了,在学习高数知识。

我们肯定是希望把所有与高数有关的内容都记住,与高数无关的都忘掉,最好就是在参加高数考试时,大脑里全是高数知识,其他的物理化学知识全部忘掉。

我们从中间大方框的最左边来分析。

首先这个时候,我们接受了上一个单元时刻的输出,上一个时刻我们考线性代数,输出的状态是刚考完线性代数的状态。

那我们这个时候最想做的是什么?当然是把之前学的与本次考高数无关的都忘掉(选择性遗忘)。

为什么说是选择性遗忘呢?

我们上一场考的是线性代数,那本场接着考高数,其实线性代数和高数之间还是有很多知识相关的,所以这个时候我们肯定希望把相关的部分留下来,把不相关的忘掉。

那如果上一场我们考的是英语,那么大概率所有知识都是不相关的,我们几乎都可以忘掉。

说到这,怎么把上一个方框单元的输出状态进行选择性遗忘呢?这里就遇到了 LSTM 结构中的第一个门 —— 遗忘门

遗忘门

图片

我们可以看到,第一个遗忘门是由一个激活函数和一个乘法来完成的。

它接受了本次状态的信息(xt),也就是我们正在复习的高数的知识,同时接受了上一个方框单元的隐藏状态(ht-1, 上一场考试后我们的大脑状态),然后通过激活函数后与上一个单元的输出(Ct-1)做乘法。

形象的解释一下这个过程:我们学习了高数的内容(xt),大脑中还保留了一部分上一场线性代数的内容,也就是隐藏状态(ht-1),这两个状态经过激活函数激活,选择性的保留,谁的权重大,那么谁最后保留下来的信息就多。

所以,这一步,我们刻苦复习高数和不刻苦复习高数,对应 xt 的权重是不一样的,肯定刻苦复习高数会使得高数的权重更大,那么保留下来的信息就多。

经过激活函数之后,我们认为保留下来的更多的是和高数有关的信息。

那么这个信息去和上一场考试完成时的输出状态相乘(得到的信息就是和高数有关的信息(这个信息会继续往后传),其余的与高数无关的信息由于激活后几乎为零,也就被遗忘了。

到了这,我们把之前该遗忘的都遗忘了,但是要参加高数考试,光遗忘(清空大脑无用信息)是远远不够的,更重要的是要把我们学到的高数知识(xt)给记住。

那我们需要给大脑输入新学到的高数知识,也就是 LSTM 要学习高数知识,接下来就到了第二个门 - 输入门

输入

从名字也很好理解,输入本层想学的知识,所以叫做输入门。

图片

看上图,本次学习的高数知识(xt)和上次隐层的状态结合后,通过一个激活,然后还通过了一个 tanh,然后两者相乘。

本次的激活与遗忘门的激活不同之处在于,遗忘门的激活输出是作用在上一层的输出上,而输入门的激活是作用在  tanh 的输出上。

通俗的理解,这样会选择我们本次学习的高数的内容(因为不是所有的高数内容都会被考到),两者相乘起到一个信息过滤的作用,乘法的输出为提纯后的高数知识(这些高数知识大概率会被考到)。

然后和上面经过遗忘门筛选过的信息相加,就得到了一个新的考高数时的知识库(在这里,有上一层(考完线性代数后)遗留下来的与高数考试相关的知识,比如加减乘除等通用运算知识,也有本次复习高数之后经过提纯的知识,比如微积分,可以说是必考题)。

那到了这一步,基本上我们就可以去参加考试了,下面就是输出门

输出门

图片

输入门和遗忘门的信息相加之后(Ct),直接输出到下一层。

图片

输出门还有个分支,xt 通过激活之后和tanh的输出相乘,然后作为隐藏状态传给下一层。

那这是在干嘛呢?

还记得我们的目的是干什么?考试。

这里就理解为正在考高数好了,带着之前提纯过的知识以及本次学的知识,做了几道高数题,然后考完了高数(又是一次信息过滤,只记住了考完高数后的考的那几道题),作为隐藏状态传给下一层。

有可能下层又要考数理统计了,数理统计可能又要用到本层的高数知识以及前一层的线性代数的知识了,又一个循环,直到所有的考试结束。

这里我们用一个考试的例子,通俗的描述了下遗忘门、输入门和输出门的作用,以及 LSTM 是如何做到选择性遗忘和信息过滤的,希望能帮助到学习 LSTM 的你。

至于为什么在LSTM中,遗忘门可以遗忘掉我们不想要的信息,输入门可以提纯信息,输出门去考试的时候可以发挥最好的状态去做题呢?

可以认为是训练 LSTM 网络的事了。在训练LSTM的时候,最终网络收敛会得到一系列的权值,用于帮助遗忘门更好的遗忘,输入门更好的输入,输出门更好的输出。

最后,一些技术细节比如为什么要选 sigmoid 激活函数,感兴趣的话可以去搜一下,这里不再赘述了。

希望你看完本文后,能对 LSTM 这一算法有个感性的认识。

文中的部分表述来源于之前看过的文章或者视频中的讲解,找不到出处了,如果有同学知道来源,可以在评论区留言,给作者署一下名。

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

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

相关文章

浮动的魅力与挑战:如何在前端设计中巧妙运用浮动(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【UE5.1 MetaHuman】使用mixamo_converter把Mixamo的动画重定向给MetaHuman使用

目录 前言 效果 步骤 一、下载mixamo_converter软件 二、Mixamo动画重定向 三、导入UE 四、动画重定向 五、使用重定向后的动画 前言 上一篇(【UE5】初识MetaHuman 创建虚拟角色)中我们已经制作了一个MetaHuman,本篇博文将介绍如何…

Unity 关于Rigidbody刚体组件的理解

一、基本了解 刚体Rigidbody因具体物理相关的属性,使得实际应用中更有真实感。应用也多: Rigidbody它可以受到重力、碰撞或者力的作用,所以我们可以用它模拟物体的真实物理行为,如受到重力的作用、与其他刚体对象进行碰撞&#…

【infiniband】ibdump抓包

ibdump用于捕获和转储InfiniBand网络的流量。 这种工具通常用于调试和分析InfiniBand网络问题,包括性能瓶颈和配置错误。ibdump工具在Mellanox InfiniBand环境中较为常用,现由NVIDIA提供支持。 使用ibdump的基本步骤 请注意,您需要在安装了…

11.关注、取消关注 + 关注列表、粉丝列表

目录 1.关注、取消关注 1.1 把数据存到 Redis 中,构造 key 1.2 开发业务层 1.3 开发表现层 1.4 显示正确的关注数据 2.关注列表、粉丝列表 2.1 业务层 2.2 表现层 1.关注、取消关注 需求:开发关注、取消关注功能;统计用户的关注数…

飞天使-docker知识点5-资源限制与容器的不同状态

文章目录 cpu和内存的限制内存限制的部分参数容器的不同状态docker images 的分层docker registry制作镜像 cpu和内存的限制 默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的 给定资源,Docker 提供了控制容器可以限制…

wordpress 修改社交图标

要去掉标记的图标,死活找不到在那里配置。后来找到了,下图(wordpress 小白,特此记录)

【开源软件】最好的开源软件-2023-第17名 Gravite

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

事务--03---TCC空回滚、悬挂、幂等解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Seata TCC 模式设计思路TCC存在的问题1、空回滚以及解决方案解决方案: 2、幂等问题以及解决方案解决方案: 3、悬挂问题以及解决方案解决方案…

档案馆数字化建设实施方案

档案馆数字化建设实施方案主要包括以下几个方面的内容: 1. 目标与规划:明确数字化建设的目标和规划,确定数字化建设的优先领域和重点工作,制定长期和短期的发展规划。 2. 技术设施建设:建设专久智能数字化档案管理系统…

gradle-5.4.1-all下载时出现了Connect timed out

问题描述:最近在学习如何在手机端部署YOLO,出现了许多错误,其中之一的错误:gradle-5.4.1-all下载时出现了Connect timed out,大家都知道这是从国外网站下载网络问题导致的。 解决办法: 在我们创建项目中的一个路径下…

回溯热门问题

关卡名 回溯热门问题 我会了✔️ 内容 1.组合总和问题 ✔️ 2.分割回文串问题 ✔️ 3.子集问题 ✔️ 4.排列问题 ✔️ 5.字母全排列问题 ✔️ 6.单词搜索 ✔️ 1. 组合总和问题 LeetCode39题目要求:给你一个无重复元素的整数数组candidates和一个目标整数 ta…

【十】python复合模式

10.1 复合模式简介 在前面的栏目中我们了解了各种设计模式。正如我们所看到的,设计模式可分为三大类:结构型、创建型和行为型设计模式。同时,我们还给出了每种类型的相应示例。然而,在软件实现中,模式并是不孤立地工作的。对于所…

【c】数组元素移动

本题的难点之处就是不让你创建新的数组&#xff0c;而且移动的距离也没有给限制&#xff0c;比如有7个数&#xff0c;本题没有限制必须移动距离小于7&#xff0c;也可能移动的距离大于7&#xff0c;甚至更多&#xff0c;下面附上我的代码 #include<stdio.h>int main() {…

C++模板编程浅析

函数模板 声明与定义函数模板 #include <iostream> using namespace std; template <class T> void swap_new(T& a, T& b);int main() {int a 1, b 2;float c 1.5, d 3.6;swap_new(a, b);swap_new(c, d);cout << a << " " &…

【Qt5】ui文件最后会变成头文件

2023年12月14日&#xff0c;周四下午 我也是今天下午偶然间发现这个的 在使用Qt的uic&#xff08;User Interface Compiler&#xff09;工具编译ui文件时&#xff0c;会生成对应的头文件。 在Qt中&#xff0c;ui文件是用于描述用户界面的XML文件&#xff0c;而头文件是用于在…

binkw32.dll丢失怎么办?这5个方法都可以解决binkw32.dll丢失问题

binkw32.dll文件是什么&#xff1f; binkw32.dll是一个动态链接库文件&#xff0c;它是Windows操作系统中的一个重要组件。它包含了许多用于处理多媒体文件的函数和资源&#xff0c;如视频、音频等。当我们在电脑上打开或播放某些多媒体文件时&#xff0c;系统会调用binkw32.d…

刘家窑中医医院鲁卫星主任:冬季守护心脑血管,为社区居民送去健康关爱

随着冬季的来临&#xff0c;气温逐渐降低&#xff0c;心脑血管疾病的风险也随之增加。为了提高公众对心脑血管疾病的认知和预防意识&#xff0c;北京刘家窑中医医院于近日成功举办了冬季守护心脑血管公益义诊活动。 本次义诊活动主要针对社区居民中的中老年人&#xff0c;特别是…

利用闭包与高阶函数实现缓存函数的创建

缓存函数是一种用于存储和重复利用计算结果的机制。其基本思想是&#xff0c;当一个函数被调用并计算出结果时&#xff0c;将该结果存储在某种数据结构中 (通常是一个缓存对象)以备将来使用。当相同的输入参数再次传递给函数时&#xff0c;不再执行实际的计算&#xff0c;而是直…

SpringBoot的Starter自动化配置,自己编写配置maven依赖且使用及短信发送案例

目录 一、Starter机制 1. 是什么 2. 有什么用 3. 应用场景 二、短信发送案例 1. 创建 2. 配置 3. 编写 4. 形成依赖 6. 其他项目的使用 每篇一获 一、Starter机制 1. 是什么 SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂…