wordpress 判断首页/什么叫优化关键词
文章目录
- RNN/LSTM/GRU
- 一、RNN
- 1、为何引入RNN?
- 2、RNN的基本结构
- 3、各种形式的RNN及其应用
- 4、RNN的缺陷
- 5、如何应对RNN的缺陷?
- 6、BPTT和BP的区别
- 二、LSTM
- 1、LSTM 简介
- 2、LSTM如何缓解梯度消失与梯度爆炸?
- 三、GRU
- 四、参考文献
RNN/LSTM/GRU
一、RNN
1、为何引入RNN?
循环神经网络(Recurrent Neural Network,RNN) 是用来建模序列化数据的一种主流深度学习模型。我们知道,传统的前馈神经网络一般的输入都是一个定长的向量,无法处理变长的序列信息,即使通过一些方法把序列处理成定长的向量,模型也很难捕捉序列中的长距离依赖关系。RNN则通过将神经元串行起来处理序列化的数据。由于每个神经元能用它的内部变量保存之前输入的序列信息,因此整个序列被浓缩成抽象的表示,并可以据此进行分类或生成新的序列1。
2、RNN的基本结构
RNN的朴素形式可分别由如下两幅图表示2:
其中 x 1 , x 2 , ⋯ , x T x_1,x_2,\cdots,x_T x1,x2,⋯,xT 是输入,每一个位置是一个实数向量; U U U、 V V V、 W W W 是权重矩阵,通常在模型初始化时随机生成,通过梯度下降进行优化; h t h_t ht 是位于隐藏层上的活性值,很多文献上也称为状态(State)或隐状态(Hidden State); p t p_t pt 表示第 t t t 个位置上的输出。
h t h_t ht、 p t p_t pt 可由下列公式得出( b b b 是偏置项):
h t = tanh ( U ⋅ h t − 1 + W ⋅ x t + b ) h_t=\tanh\left(U\cdot h_{t-1}+W\cdot x_t+b\right) ht=tanh(U⋅ht−1+W⋅xt+b)
p t = s o f t m a x ( V ⋅ h t + c ) p_t=\mathrm{softmax}(V\cdot h_t+c) pt=softmax(V⋅ht+c)
3、各种形式的RNN及其应用
(图片来自于cs231n)
模式 | 描述 | 应用领域 |
---|---|---|
One to One | 单个输入对应单个输出 | 图像分类、回归任务 |
One to Many | 单个输入生成序列输出 | 图像字幕生成、音乐生成 |
Many to One | 序列输入生成单个输出 | 情感分析、时间序列分类 |
Many to Many | 序列输入对应序列输出 | 机器翻译、语音识别 |
Many to Many(同步) | 同步序列输入输出 | 视频帧分类、实时语音处理 |
4、RNN的缺陷
RNN通过在所有时间步共享相同的权重,使得可以在不同时间步之间传递和积累信息,从而更好地捕捉序列数据中的长期依赖关系,但是缺点也很明显:在RNN的学习过程中,由于共享权重 W W W,导致随着时间步的增加,权重矩阵 W W W 不断连乘,最终产生梯度消失(即 ∂ L t ∂ h k \frac{\partial \mathcal{L}_{t}}{\partial \boldsymbol{h}_{k}} ∂hk∂Lt 消失, 1 ≤ k ≤ t 1 \le k\le t 1≤k≤t )和梯度爆炸,具体解释如下:
首先由RNN前向传播公式:
h t = f ( W ⋅ h t − 1 + U ⋅ x t + b ) h_t=f(W\cdot h_{t-1}+U\cdot x_t+b) ht=f(W⋅ht−1+U⋅xt+b)
其中 f f f 为激活函数。
在反向传播时(BPTT),损失函数 L \mathcal{L} L 对某一时间步长的梯度涉及到时间上所有的前置状态,因此梯度会被多个矩阵连乘表示为:
∂ L ∂ h t = ∂ L ∂ h T ⋅ ∏ k = t T − 1 A k \frac{\partial\mathcal{L}}{\partial h_t}=\frac{\partial\mathcal{L}}{\partial h_T}\cdot\prod_{k=t}^{T-1}A_k ∂ht∂L=∂hT∂L⋅k=t∏T−1Ak
其中 A k = diag ( f ′ ( h k ) ) ⋅ W A_k=\operatorname{diag}(f^{\prime}(h_k))\cdot W Ak=diag(f′(hk))⋅W 。
显然若 W > 1 W>1 W>1,随着时间的增加,多个 W W W 连乘后结果会不断增大,最终导致梯度爆炸;
同理 W < 1 W<1 W<1,多个 W W W 连乘后结果会不断减小至趋于0,最终导致梯度消失。
而在CNN中,每一层的权重矩阵 W W W 是不同的,并且在初始化时它们是独立同分布的,因此最后可以相互抵消,不容易发生梯度爆炸或消失。
5、如何应对RNN的缺陷?
① 对于梯度爆炸,一般通过权重衰减(Weight Decay) 或梯度截断(Gradient Clipping) 来避免3。权重衰减,通过引入衰减系数来约束并避免权重矩阵元素过大,从而减少梯度连乘时的爆炸风险;梯度截断,直接将梯度大小进行限制以防止梯度爆炸,比如按值截断:在第 t t t 次迭代时,梯度为 g t g_t gt ,给定一个区间 [ a , b ] [a,b] [a,b] ,如果一个参数的梯度小于 a a a 时,就将其设为 a a a ;如果大于 b b b 时,就将其设为 b b b,公式如下:
g t = max ( min ( g t , b ) , a ) . \mathbf{g}_t=\max(\min(\mathbf{g}_t,b),a). gt=max(min(gt,b),a).
② 对于梯度消失,一个想法是改进激活函数,比如替换成 ReLU ,因为其右侧导数恒为 1 ,可以缓解梯度消失(不能杜绝,因为本质上是权重矩阵的问题)。缺点是不好解决梯度爆炸,从 RNN 的前向传播公式来看待这个问题,前向传播公式如下:
h t = f ( W ⋅ h t − 1 + U ⋅ x t + b ) h_t=f(W\cdot h_{t-1}+U\cdot x_t+b) ht=f(W⋅ht−1+U⋅xt+b)
使用 ReLU 激活函数后, h t h_t ht 可表达为:
h t = r e l u ( W ⋅ h t − 1 + U ⋅ x t + b ) h_t=\mathrm{relu}\left(W\cdot h_{t-1}+U\cdot x_t+b\right) ht=relu(W⋅ht−1+U⋅xt+b)
显然不管 h t − 1 h_{t-1} ht−1 怎么变化,前面始终要乘上一个权重矩阵 W W W ,因此替换激活函数后,并不能实质上解决由于权重矩阵 W W W 连乘而导致的梯度爆炸问题。
③ 使用合适的权重初始化方法,如 Xavier 初始化或 He 初始化,使 W W W 的特征值接近 1 。
如果从结构上来考虑,通过改变网络结构来减缓梯度消失或爆炸,长短期记忆网络(LSTM,Long Short-Term Memory) 就是基于这个想法诞生的。
6、BPTT和BP的区别
BP算法:只处理纵向层级间的梯度反向传播,适用于前馈神经网络。
BPTT算法:在训练RNN时,需要同时处理纵向层级间的反向传播(深度方向)和时间维度上的反向传播(时间方向)。
二、LSTM
1、LSTM 简介
LSTM 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。LSTM 网络结构如下:
在这里插入图片描述
LSTM 网络引入门控机制(Gating Mechanism) 来控制信息传递的路径,公式如下:
i t = σ ( U i ⋅ h t − 1 + W i ⋅ x t + b i ) f t = σ ( U f ⋅ h t − 1 + W f ⋅ x t + b f ) o t = σ ( U o ⋅ h t − 1 + W o ⋅ x t + b o ) c ~ t = tanh ( U c ⋅ h t − 1 + W c ⋅ x t + b c ) c t = i t ⊙ c ~ t + f t ⊙ c t − 1 h t = o t ⊙ tanh ( c t ) \begin{array}{c}\boldsymbol{i}_{t}=\sigma\left(\boldsymbol{U}_{i} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{i} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{i}\right) \\\boldsymbol{f}_{t}=\sigma\left(\boldsymbol{U}_{f} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{f} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{f}\right) \\\boldsymbol{o}_{t}=\sigma\left(\boldsymbol{U}_{o} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{o} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{o}\right) \\\tilde{\boldsymbol{c}}_{t}=\tanh \left(\boldsymbol{U}_{c} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{c} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{c}\right) \\\boldsymbol{c}_{t}=\boldsymbol{i}_{t} \odot \tilde{\boldsymbol{c}}_{t}+\boldsymbol{f}_{t} \odot \boldsymbol{c}_{t-1} \\\boldsymbol{h}_{t}=\boldsymbol{o}_{\boldsymbol{t}} \odot \tanh \left(\boldsymbol{c}_{t}\right)\end{array} it=σ(Ui⋅ht−1+Wi⋅xt+bi)ft=σ(Uf⋅ht−1+Wf⋅xt+bf)ot=σ(Uo⋅ht−1+Wo⋅xt+bo)c~t=tanh(Uc⋅ht−1+Wc⋅xt+bc)ct=it⊙c~t+ft⊙ct−1ht=ot⊙tanh(ct)
进一步可以简写成:
[ c ~ t o t i t f t ] = [ tanh σ σ σ ] ( W [ x t h t − 1 ] + b ) , c t = f t ⊙ c t − 1 + i t ⊙ c ~ t , h t = o t ⊙ tanh ( c t ) , \begin{aligned}\begin{bmatrix}\tilde{\boldsymbol{c}}_t\\\\\boldsymbol{o}_t\\\\\boldsymbol{i}_t\\\\\boldsymbol{f}_t\end{bmatrix}&=\begin{bmatrix}\tanh\\\\\sigma\\\\\sigma\\\\\sigma\end{bmatrix}\begin{pmatrix}\boldsymbol{W}\begin{bmatrix}\boldsymbol{x}_t\\\\\boldsymbol{h}_{t-1}\end{bmatrix}+\boldsymbol{b}\end{pmatrix},\\\\\boldsymbol{c}_t&=\boldsymbol{f}_t\odot\boldsymbol{c}_{t-1}+\boldsymbol{i}_t\odot\boldsymbol{\tilde{c}}_t,\\\boldsymbol{h}_t&=\boldsymbol{o}_t\odot\tanh\left(\boldsymbol{c}_t\right),\end{aligned} c~totitft ctht= tanhσσσ W xtht−1 +b ,=ft⊙ct−1+it⊙c~t,=ot⊙tanh(ct),
公式中有三个“门”,分别为输入门 i t \boldsymbol{i}_t it 、遗忘门 f t \boldsymbol{f}_t ft 和输出门 o t \boldsymbol{o}_t ot 。这三个门的作用为
- 遗忘门 f t f_t ft 控制上一个时刻的内部状态 c t − 1 \boldsymbol c_t-1 ct−1 需要遗忘多少信息。
- 输入门 i t \boldsymbol{i}_t it 控制当前时刻的候选状态 c ~ t \tilde{\boldsymbol{c}}_t c~t 有多少信息需要保存。
- 输出门 o t \boldsymbol{o}_t ot 控制当前时刻的内部状态 c t \boldsymbol{c}_t ct 有多少信息需要输出给外部状态 h t . \boldsymbol{h}_t. ht.
具体的可点击查看如下视频,很清晰易懂:
【【官方双语】LSTM(长短期记忆神经网络)最简单清晰的解释来了!】 https://www.bilibili.com/video/BV1zD421N7nA/?share_source=copy_web&vd_source=199a3f4e3a9db6061e1523e94505165a
2、LSTM如何缓解梯度消失与梯度爆炸?
LSTM的细胞状态更新机制(下图黄色部分)可以有效地存储长期的信息:
其更新公式如下:
C t = f t ⊙ C t − 1 + i t ⊙ C ~ t C_t=f_t\odot C_{t-1}+i_t\odot\tilde{C}_t Ct=ft⊙Ct−1+it⊙C~t
由于这一过程本质是线性操作(加权求和),相当于是所有候选路径的线性组合,故不会因为一个路径上梯度的消失,而导致整体梯度不断衰减。LSTM的细胞状态经过门控机制(通过或阻断,即 1 或 0)控制这个线性组合,达到缓解梯度消失的效果;而门控机制又可以通过调节输入输出,通过灵活地舍弃一些部分,来缓解梯度爆炸问题。
简言之,由于此线性组合会通过门控机制自主的调节,而非 RNN 那样直接连乘,因此可以达到减缓梯度消失和梯度爆炸的效果,并实现对信息的过滤,从而达到对长期记忆的保存与控制。
三、GRU
门控循环单元(GRU) 是对 LSTM 进行简化得到的模型。对于 LSTM 与 GRU 而言,它们效果相当,但由于 GRU 参数更少,所以 GRU 的收敛速度更快,计算效率更高。
与LSTM相比,GRU 仅有两个门——更新门(update gate)和重置门(reset gate),不使用记忆元。重置门有助于捕获序列中的短期依赖关系,更新门有助于捕获序列中的长期依赖关系,详细结构如下图:
四、参考文献
诸葛越, 葫芦娃, 百面机器学习, 北京:人民邮电出版社, 2018 ↩︎
李航. 机器学习方法[M]. 第一版. 清华大学出版社, 2022. ↩︎
邱锡鹏, 神经网络与深度学习, 北京:机械工业出版社, 2020 ↩︎
相关文章:

RNN/LSTM/GRU 学习笔记
文章目录 RNN/LSTM/GRU一、RNN1、为何引入RNN?2、RNN的基本结构3、各种形式的RNN及其应用4、RNN的缺陷5、如何应对RNN的缺陷?6、BPTT和BP的区别 二、LSTM1、LSTM 简介2、LSTM如何缓解梯度消失与梯度爆炸? 三、GRU四、参考文献 RNN/LSTM/GRU …...

音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
在音频开发中,选择保存为 PCM 或 WAV 格式取决于具体的应用场景和需求。以下是两种格式的特点以及适用场景的分析: PCM 格式 特点: 原始音频数据: PCM 是未压缩的原始音频数据,没有任何文件头或元数据。数据直接以二进…...

C#常用744单词
1.visual 可见的 2.studio 工作室 3.dot 点 4.net 网 5.harp 尖端的,锋利的。 6.amework 骨架,构架,框架 7.beta 测试版,试用版 8.XML(全称:eXtensible Markup Language)…...

如何理解算法的正确性?
循环不变式(Loop Invariant) 是算法设计和程序验证中的一个核心概念,用于证明循环的正确性。它是在循环的每次迭代开始和结束时均保持为真的一种条件或性质,帮助开发者确保循环按预期工作,最终达到目标状态。 循环不变…...

蓝桥杯试题:排序
一、问题描述 给定 nn 个正整数 a1,a2,…,ana1,a2,…,an,你可以将它们任意排序。现要将这 nn 个数字连接成一排,即令相邻数字收尾相接,组成一个数。问,这个数最大可以是多少。 输入格式 第一行输入一个正整数 nnÿ…...

实验十一 Servlet(二)
实验十一 Servlet(二) 【实验目的】 1.了解Servlet运行原理 2.掌握Servlet实现方式 【实验内容】 改造实验10,引入数据库,创建用户表,包括用户名和密码:客户端通过login.jsp发出登录请求,请求…...

第五天 初步了解ArkTS和ArkUI
初步了解ArkTS和ArkUI,可以从以下几个方面进行概述: 一、ArkTS简介 定义与关系: ArkTS是HarmonyOS(鸿蒙系统)优选的主力应用开发语言。它基于TypeScript(TS)进行扩展,兼容TS的所有特…...

java中的锁面试题
1、多线程中 synchronized 锁升级的原理是什么? synchronized 是JVM层面的锁,是 Java 关键字,通过 monitor 对象来完成,synchronized 的实现涉及到锁的升级,具体为无锁、偏向锁、自旋锁、重量级锁 synchronized 锁升级…...

ES6 变量解构赋值总结
1. 数组的解构赋值 1.1 基本用法 // 基本数组解构 const [a, b, c] [1, 2, 3]; console.log(a); // 1 console.log(b); // 2 console.log(c); // 3// 跳过某些值 const [x, , y] [1, 2, 3]; console.log(x); // 1 console.log(y); // 3// 解构剩余元素 const [first, ...re…...

知识蒸馏教程 Knowledge Distillation Tutorial
来自于:Knowledge Distillation Tutorial 将大模型蒸馏为小模型,可以节省计算资源,加快推理过程,更高效的运行。 使用CIFAR-10数据集 import torch import torch.nn as nn import torch.optim as optim import torchvision.tran…...

DeepSeek各版本说明与优缺点分析
DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列,其在不同版本的发布过程中,逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本,从版本的发布时间、特点、优势以及不足之处࿰…...

java进阶专栏的学习指南
学习指南 java类和对象java内部类和常用类javaIO流 java类和对象 类和对象 java内部类和常用类 java内部类精讲Object类包装类的认识String类、BigDecimal类初探Date类、Calendar类、SimpleDateFormat类的认识java Random类、File类、System类初识 javaIO流 java IO流【…...

kamailio-osp模块
该文档详细讲解了如何在Kamailio中配置和使用OSP模块(Open Settlement Protocol Module),以实现基于ETSI标准的安全多边对等互联(Secure Multi-Lateral Peering)。以下是核心内容的总结: 1. 模块功能 OSP模…...

【TensorFlow】T1:实现mnist手写数字识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 1、设置GPU import tensorflow as tf gpus tf.config.list_physical_devices("GPU")if gpus:gpu0 gpus[0]tf.config.experimental.set_memory_g…...

Rapidjson 实战
Rapidjson 是一款 C 的 json 库. 支持处理 json 格式的文档. 其设计风格是头文件库, 包含头文件即可使用, 小巧轻便并且性能强悍. 本文结合样例来介绍 Rapidjson 一些常见的用法. 环境要求 有如何的几种方法可以将 Rapidjson 集成到您的项目中. Vcpkg安装: 使用 vcpkg instal…...

【React】受控组件和非受控组件
目录 受控组件非受控组件基于ref获取DOM元素1、在标签中使用2、在组件中使用 受控组件 表单元素的状态(值)由 React 组件的 state 完全控制。组件的 state 保存了表单元素的值,并且每次用户输入时,React 通过事件处理程序来更新 …...

Ollama+deepseek+Docker+Open WebUI实现与AI聊天
1、下载并安装Ollama 官方网址:Ollama 安装好后,在命令行输入, ollama --version 返回以下信息,则表明安装成功, 2、 下载AI大模型 这里以deepseek-r1:1.5b模型为例, 在命令行中,执行&…...

DEEPSEKK GPT等AI体的出现如何重构工厂数字化架构:从设备控制到ERP MES系统的全面优化
随着深度学习(DeepSeek)、GPT等先进AI技术的出现,工厂的数字化架构正在经历前所未有的变革。AI的强大处理能力、预测能力和自动化决策支持,将大幅度提升生产效率、设备管理、资源调度以及产品质量管理。本文将探讨AI体(…...

阿莱(arri)mxf文件变0字节的恢复方法
阿莱(arri)是专业级的影视产品软硬件供应商,很多影视作品都是使用阿莱(arri)的设备拍摄出来的。总体上来讲阿莱(arri)的文件格式有mov和mxf两种,这次恢复的是阿莱(arri)的mxf,机型是arri mini,素材保存在一个8t的硬盘上,使用的是e…...

初识 Node.js
在当今快速发展的互联网技术领域,Node.js 已经成为了一个非常流行且强大的平台。无论是构建高性能的网络应用、实时协作工具还是微服务架构,Node.js 都展示了其独特的优势。本文将带您走进 Node.js 的世界,了解它的基本概念、核心特性以及如何…...

debug-vscode调试方法
debug - vscode gdb调试指南 文章目录 debug - vscode gdb调试指南前言一、调试代码二、命令查看main反汇编查看寄存器打印某个变量打印寄存器,如pc打印当前函数栈信息(当前执行位置)打印程序栈局部变量x命令的语法如下所示:打印某…...

Cypher进阶(函数、索引)
文章目录 Cypher进阶Aggregationcount()函数统计函数collect()函数 unwindforeachmergeunionload csvcall 函数断言函数all()any()~~exists()~~is not nullnone()single() 标量函数coalesce()startNode()/endNode()id()length()size() 列表函数nodes()keys()range()reduce() 数…...

XML Schema 数值数据类型
XML Schema 数值数据类型 引言 XML Schema 是一种用于描述 XML 文档结构的语言。它定义了 XML 文档中数据的有效性和结构。在 XML Schema 中,数值数据类型是非常重要的一部分,它定义了 XML 文档中可以包含的数值类型。本文将详细介绍 XML Schema 中常用的数值数据类型,以及…...

Window获取界面空闲时间
GetLastInputInfo是一种Windows API函数,用于获取上次输入操作的时间。 该函数通过LASTINPUTINFO结构返回最后一次输入事件的时间。 原型如下 BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO plii);那么可以利用GetLastInputInfo来得到界面没有操作的时长 uint…...

Java进阶(vue基础)
目录 1.vue简单入门 ?1.1.创建一个vue程序 1.2.使用Component模板(组件) 1.3.引入AXOIS ?1.4.vue的Methods(方法) 和?compoted(计算) 1.5.插槽slot 1.6.创建自定义事件? 2.Vue脚手架安装? 3.Element-UI的…...

Mac电脑上好用的压缩软件
在Mac电脑上,有许多优秀的压缩软件可供选择,这些软件不仅支持多种压缩格式,还提供了便捷的操作体验和强大的功能。以下是几款被广泛推荐的压缩软件: BetterZip 功能特点:BetterZip 是一款功能强大的压缩和解压缩工具&a…...

Ubuntn24.04安装
1.镜像下载 https://cn.ubuntu.com/download Ubuntu 24.04.1 (Noble Numbat) 进入下载即可 2.安装系统 打开虚拟机 选择语言 输入用户名和密码 安装ssh 安装完成重启即可。 3.可能出现的问题 关于Ubuntu系统虚拟机出现频繁闪屏,移动和屏幕适应大小问题_vmware安…...

基于ansible部署elk集群
ansible部署 ELK部署 ELK常见架构 (1)ElasticsearchLogstashKibana:这种架构是最常见的一种,也是最简单的一种架构,这种架构通过Logstash收集日志,运用Elasticsearch分析日志,最后通过Kibana中…...

解锁.NET Fiddle:在线编程的神奇之旅
在.NET 开发的广袤领域中,快速验证想法、测试代码片段以及便捷地分享代码是开发者们日常工作中不可或缺的环节。而.NET Fiddle 作为一款卓越的在线神器,正逐渐成为众多.NET 开发者的得力助手。它打破了传统开发模式中对本地开发环境的依赖,让…...

记录pve中使用libvirt创建虚拟机
pve中创建虚拟机 首先在pve网页中创建一个linux虚拟机,我用的是debian系统,过程省略 注意虚拟机cpu类型要设置为host 检查是否支持虚拟化 ssh分别进入pve和debian虚拟机 检查cpu是否支持虚拟化 egrep --color vmx|svm /proc/cpuinfo # 结果高亮显示…...