当前位置: 首页 > article >正文

机器学习(李宏毅)——RNN

一、前言

本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!!

二、大纲

  • 引例
  • RNN历史
  • 基本思想
  • RNN变形
  • RNN训练

三、引例

学习RNN之前先看一个例子:
假设要做一个火车订票系统(ticket booking system),给机器输入一句话“I would like to arrive Taipei on November 2nd. ”,期望机器能够自动识别“目的地”和“到达时间”,这该如何做到呢?

  • 方法:训练一个神经网络(Feedforward network ),当输入看到Taipei时候就应该输出这是地名,看到November 2nd就应该输出时间,所以地名和时间就像是这句话的插槽(slot filling)一样。

但这个方法会有一个问题,比如我输入“leave Taipei on November 2nd. ”,同一个模型同样可以识别到地点和时间,但是这句话地点则是出发地,时间是出发时间。所以我们要把上下文语义信息关联上去,于是就有了RNN,也可以理解为有记忆的神经网络模型。

四、RNN历史

RNN称为递归神经网络,发展历史如下:

  • 1980-1990 年代:RNN 的基础理论建立,但训练困难。
  • 1997 年:LSTM 诞生,解决了梯度消失问题,使 RNN 变得实用。
  • 2014-2015 年:GRU 被提出,RNN 开始大规模应用于 NLP 任务。
  • 2017 年后:Transformer 取代RNN,成为主流 NLP 解决方案。

虽然现在的主流是Transformer,但还是有必要学习下RNN的经典算法。

五、基本思想

  • 隐藏层的输出被存储在记忆里;
  • 存储的记忆看做是输入;
    实际的计算过程如下:
    在这里插入图片描述
    说明:
    假设上图神经网络所有权重都是1,没有bias,所有的激活函数都是linear的。
    RNN的基本思想就是将隐藏层的输出存在记忆中(memory)作为下一次的输入,计算过程如上gif图。
    同样的结构叠成多层,接起来变成如下的结构:
    在这里插入图片描述
    每个位置的输入都是看过上次输出的memory(起始点除外)。
    当然还可以叠多层,让其越叠越深,结构如下:
    在这里插入图片描述

六、RNN变形

1.双向RNN
Bidirectional RNN
在这里插入图片描述
双向的递归神经网络,例如输入的一个句子,使用RNN正序算一遍句子的每个位置的输出,逆序再算一遍每个位置的输出,最终双向结果拼接起来一块作为输出,这就是Bidirectional RNN。优点是考虑了双向的语义信息。

2.LSTM(Long Short-term Memory)
又名长短时记忆递归神经网络,精髓是让机器自己决定输入、记忆、输出这三件事情。

  • 输入:要不要输入;
  • 记忆:要更新记忆还是擦除记忆;
  • 输出:要不要输出。

对应起来就是控制门的思想,有三个控制门,分别是:输入门、遗忘门、输出门。如下图:
在这里插入图片描述

进一步拆解LSTM原理如下:
在这里插入图片描述

  • step1:输入一分为四,分别是z,zi,zf,zo,对应输入、输入门、遗忘门和输出门。激活函数式sigmoid,将输出的数值值域控制在0~1之间,好处就是输出是否关系;
  • step2:输入:输入z经过sigmoid函数g得到g(z);
  • step3:输入门:zi经过sigmoid函数f得到f(zi);
  • step4:将输入和输入门得到的值g(z)和f(zi)做multiply相乘得到输出g(z)f(z);
  • step5:遗忘门:zf经过sigmoid函数f得到f(zf),决定了记忆c是擦除还是保留。记忆c和f(zf)相乘再和g(z)f(z)相加得到c’。
  • step6:输出门:zo经过sigmoid函数f得到f(zo);
  • step7:最终输出:c’经过sigmoid函数h得到h(c’),然后再和f(zo)相乘得到a;

以上就是LSTM的计算原理了,下面是实际的计算过程演示:
在这里插入图片描述
用一个结构图来表达就是如下这样:
在这里插入图片描述

将多个这样的单元块接起来就会变成:
在这里插入图片描述

实做过程中还会把前一个时间点的记忆c和h输出当做下一次的输入,改写成:
在这里插入图片描述
更多层的接起来就像是下图这样:
在这里插入图片描述
看着虽然复杂,但基本的思想还是比较简单直接。

七、RNN训练

RNN的训练并非是容易的事情,虽然用的还是Backpropagation through time (BPTT)和Gradient Decent。

  • Backpropagation through time (BPTT) 进阶版的反向传播方法
  • Gradient Decent 梯度下降方法

实做过程中,RNN训练loss曲线比较崎岖震荡,如下图:
在这里插入图片描述
形象在图上表达就是悬崖峭壁,如果一脚踩在悬崖,一脚踩在谷底,直接飞了,也就是梯度爆炸的现象。
在这里插入图片描述
那如何解决呢?
有一招说穿不值钱,就是clipping,碰到悬崖的壁时候就不要乱蹦跶了,该参数就不要再更新乱动了,以免梯度爆炸。

举个例子,进一步形象说明一下:
在这里插入图片描述
已知条件:输入为[1 0 0 … 0],权重都设为1,memory为w,有考虑的memory的最后的输出就是w999
假设情况
情况1:
1、如果w=1,y1000 = w999=1。
2、改变一点点的话,如果w=1.01,y1000 = w999≈20000。
这种情况就是变量只改变了一丢丢,梯度却是改变了相当大,说明这里相当崎岖,极端下对应的就是上图悬崖情况,也就是梯度爆炸,当然这里不一定爆炸。

情况2:
1、如果w=0.99,y1000 = w999≈0。
2、如果w=0.01,y1000 = w999≈0。
这种情况说明这里是个非常平坦的地方,对应悬崖底下的平原地区,基本上自变量改变梯度还是趋近于零,这种现象也称为梯度消失。

以上例子辅助理解梯度爆炸和梯度消失情况,这也是RNN训练遇到的困难。

然而,上述的LSTM是可以解决梯度消失问题,它的做法是让error face都变得崎岖,但是解决不了梯度爆炸问题。

通俗讲:普通 RNN 就像黑板,写了一会儿就被覆盖,信息很快消失。而 LSTM 让信息流经过“笔记本”存储,并且通过“橡皮擦”和“高亮笔”合理管理信息,确保真正重要的东西可以长期保留,从而避免了梯度消失的问题。

相关文章:

机器学习(李宏毅)——RNN

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!! 二、大纲 引例RNN历史基本思想RNN变形RNN训练 三、引例 学习RNN之前先看一个例子: 假设要做一…...

Linux 文件系统inode软硬链接

目录 一、理解文件系统 1、前言 2、磁盘 二、inode 1、创建一个新文件的 4 个操作 三、软硬链接 1、软链接 2、硬链接 3、硬链接的应用 4、软链接的应用 一、理解文件系统 1、前言 在我们电脑文件里,分为打开的文件和未打开的文件,我们在上…...

多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))

具体完整算法请跳转:多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频)) 多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization,MOPSO)是一种基…...

Unity合批处理优化内存序列帧播放动画

Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容,将多个图片合批处理然后为了降低Unity的内存占用,但是相对的质量也会稍微降低。可自行进行…...

LayUi点击查看图片组件layer.photos()用法(图片放大预览后滚动鼠标缩放、底部显示自定义标题)

LayUi官方文档更新后发现图片查看组件layer.photos()没有了 记录一下用法 例&#xff1a; <ul id""><li title"" ng-repeat"(val,item) in Obj" ng-click"gszzxxClick(item)"><img ng-src"{{item.src}}" a…...

DAY07 Collection、Iterator、泛型、数据结构

学习目标 能够说出集合与数组的区别数组:1.是引用数据类型的一种2.可以存储多个元素3.数组的长度是固定的 int[] arr1 new int[10]; int[] arr2 {1,2,3};4.数组即可以存储基本类型的数据,又可以存储引用数据类型的数据int[],double[],String[],Student[]集合:1.是引用数据类…...

k8s集群如何赋权普通用户仅管理指定命名空间资源

文章目录 1. 普通用户2. 创建私钥3. 创建 CertificateSigningRequest4. 批准 CertificateSigningRequest5. 创建 kubeconfig6. 创建角色和角色绑定7. 测试 1. 普通用户 创建用户demo useradd demo2. 创建私钥 下面的脚本展示了如何生成 PKI 私钥和 CSR。 设置 CSR 的 CN 和 …...

DeepSeek与ChatGPT的全面对比

在人工智能&#xff08;AI&#xff09;领域&#xff0c;生成式预训练模型&#xff08;GPT&#xff09;已成为推动技术革新的核心力量。OpenAI的ChatGPT自发布以来&#xff0c;凭借其卓越的自然语言处理能力&#xff0c;迅速占据市场主导地位。然而&#xff0c;近期中国AI初创公…...

C# dynamic 关键字 使用详解

总目录 前言 dynamic 是 C# 4.0 引入的关键字&#xff0c;用于声明动态类型&#xff0c;允许在运行时解析类型和成员&#xff0c;而非编译时。它主要设计用于简化与动态语言&#xff08;如 Python、JavaScript&#xff09;的交互、处理未知结构的数据&#xff08;如 JSON、XML…...

sql server 数据库 锁教程及锁操作

SQL Server数据库 锁的教程 SQL Server 的数据库锁是为了保证数据库的并发性和数据一致性而设计的。锁机制能够确保多个事务不会同时修改同一数据&#xff0c;从而避免数据冲突和不一致的发生。理解 SQL Server 的锁机制对于开发高效、并发性强的数据库应用非常重要。 1. 锁的…...

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南&#xff0c;适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤&#xff0c;还提供了68G多套独立部署视频教程教程&#xff0c;针对不同硬件配置的模型选择建议&#xff0c;以…...

DeepSeek24小时写作机器人,持续创作高质量文案

内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求&#xff0c;人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容&#xff1f;DeepSeek写作机器人&#xff0c;一款24小时持续创作的智能工具&#xff0c;为企业和个人提…...

用deepseek学大模型08-卷积神经网络(CNN)

yuanbao.tencent.com 从入门到精通卷积神经网络(CNN),着重介绍的目标函数&#xff0c;损失函数&#xff0c;梯度下降 标量和矩阵形式的数学推导&#xff0c;pytorch真实能跑的代码案例以及模型,数据&#xff0c;预测结果的可视化展示&#xff0c; 模型应用场景和优缺点&#xf…...

玩客云 IP查找

1.玩客云使用静态IP在不同网段路由器下不能使用&#xff0c;动态不好找IP地址 1.1使用python3 实现自动获取发送 import requests import os import socket# 从环境变量获取 PushPlus 的 token 和群组编码 PUSH_PLUS_TOKEN os.getenv("PUSH_PLUS_TOKEN") PUSH_PLU…...

【鸿蒙Next】鸿蒙应用发布前的准备

图标生成&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-apply-generated-icon-V5 debug 与 release使用不同的bundle name 鸿蒙多环境配置 https://segmentfault.com/a/1190000045418731...

【OpenCV】入门教学

&#x1f3e0;大家好&#xff0c;我是Yui_&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~ &#x1f52…...

嵌入式 lwip http server makefsdata

背景&#xff1a; 基于君正X2000 MCU Freertoslwip架构 实现HTTP server服务&#xff0c;MCU作为HTTP服务器通过网口进行数据包的传输&#xff0c;提供网页服务。其中设计到LWIP提供的工具makefsdata&#xff0c;常用于将文件或目录结构转换为适合嵌入到固件中的二进制格式。 …...

qemu-kvm源码解析-cpu虚拟化

背景 Qemu 虚拟化中&#xff0c;CPU&#xff0c;内存&#xff0c;中断是虚拟化的核心板块。本章主要对CPU虚拟化源码进行分析 而随着技术的发展包括CPU、内存、网卡等常见外设。硬件层面的虚拟化现在已经是云计算的标配。形成了&#xff0c;qemu作为cpu外层控制面&#xff0c…...

【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python

6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛&#xff0c;但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解&#xff0c;所以农夫约翰将竞赛以…...

数据治理中 大数据处理一般都遵循哪些原则

在数据治理中&#xff0c;大数据处理通常遵循以下原则&#xff1a; 最小化原则&#xff1a;企业应只收集实现特定目的所需的数据&#xff0c;避免数据冗余和安全风险。 合法性原则&#xff1a;企业必须遵守相关法律法规&#xff0c;确保数据处理符合法律要求&#xff0c;降低法…...

Linux 多进程生产者消费者模型实现

Linux 多进程生产者消费者模型实现 一、模型核心组件二、关键代码解析1. 信号量封装类&#xff08;csemp&#xff09;2. 共享内存初始化3. 生产者核心逻辑4. 消费者核心逻辑 三、关键同步机制信号量使用策略操作时序图 四、扩展知识1. System V与POSIX信号量对比2. 共享内存最佳…...

【Python pro】基本数据类型

一、数字类型 1.1 数字类型的组成 1.1.1 整数 &#xff08;1&#xff09;十进制&#xff0c;二进制0b&#xff0c;八进制0o&#xff0c;十六进制0x print(16 0b10000 0o20 0x10) # 输出&#xff1a;True&#xff08;2&#xff09;十进制转其他进制 a bin(16) b oct(1…...

sql server查询IO消耗大的排查sql诊断语句

原文链接&#xff1a; sql server查询IO消耗大的排查sql诊断语句-S3软件[code]select top 50 (total_logical_reads/execution_count) as avg_logical_reads , (total_logical_writes/execution_count) as avg_logical_writes , (tota ... https://blog.s3.sh.cn/thread-120-1…...

Spring Boot 自动装配原理深度剖析

一、引言 在 Java 开发领域&#xff0c;Spring 框架无疑是中流砥柱。而 Spring Boot 的出现&#xff0c;更是极大地简化了 Spring 应用的搭建和开发过程。其中&#xff0c;自动装配原理是 Spring Boot 的核心亮点之一&#xff0c;它让开发者无需手动编写大量繁琐的配置代码&am…...

kubernetes源码分析 kubelet

简介 从官方的架构图中很容易就能找到 kubelet 执行 kubelet -h 看到 kubelet 的功能介绍&#xff1a; kubelet 是每个 Node 节点上都运行的主要“节点代理”。使用如下的一个向 apiserver 注册 Node 节点&#xff1a;主机的 hostname&#xff1b;覆盖 host 的参数&#xff1…...

Golang学习笔记_33——桥接模式

Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 文章目录 桥接模式详解一、桥接模式核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、桥接模式的特点三、适用场景1. 多维度变化2. 跨平台开发3. 动态切换实现 四、与其他…...

使用EasyExcel和多线程实现高效数据导出

​ 使用EasyExcel和多线程实现高效数据导出 1. 概述 在企业级应用中&#xff0c;数据导出是一个常见的需求。为了提高导出效率&#xff0c;尤其是在处理大量数据时&#xff0c;我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高…...

告别冷冰冰:如何训练AI写出温暖人心的广告文案

朋友们&#xff0c;你们是不是也好奇过&#xff0c;如果让AI来写广告文案&#xff0c;会是什么效果&#xff1f; 是冷冰冰的数据堆砌&#xff0c;还是也能玩出创意和温度&#xff1f; 别担心&#xff0c;今天我就来给你揭秘&#xff0c;怎么调教AI&#xff0c;让它写出的广告…...

【js逆向_入门】图灵爬虫练习平台 第四题

(base64解码&#xff09;地址&#xff1a;aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvNC8 请求接口带有加密参数&#xff1a; 全局搜索Sign,找到参数生成位置 一目了然&#xff0c;知道参数是怎么构造生成的 调试代码 测试验证思路是否正确 时间&#xff1a; …...

Mybatis后端数据库查询多对多查询解决方案

问题场景&#xff1a; 我开发的是一个论文选择系统。 后端用一个论文表paper来存储论文信息。 论文信息中&#xff0c;包含前置课程&#xff0c;也就是你需要修过这些课程才能选择这个论文。 而一个论文对应的课程有很多个。 这样就造成了一个数据库存储的问题。一个paper…...