自然语言处理——循环神经网络
自然语言处理——循环神经网络
- 循环神经网络
- 应用到基于机器学习的自然语言处理任务
- 序列到类别
- 同步的序列到序列模式
- 异步的序列到序列模式
- 参数学习和长程依赖问题
- 基于门控的循环神经网络
- 门控循环单元(GRU)
- 长短期记忆神经网络(LSTM)
- 深度循环神经网络
- 堆叠循环神经网络
- 双向循环神经网络
- 递归神经网络
- 标准递归神经网络
- Syntactically-Untied RvNN
- Matrix-Vector Recursive Neural Network
- Recursive Neural Tensor Network
- 注意力机制
在前向神经网络中,由于相邻两层之间存在单向连接,每层的节点之间是无连接的(无循环),因此输入和输出的维数都是固定的,不能任意改变,而且也无法处理变长序列数据。
另外假设每次输入都是独立的,也就是说每次网络的输出只依赖于当前的输入。
为了给网络增加记忆能力,我们提出了延时神经网络(Time Delay Neural Network,TDNN)建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等),这样,前馈网络就具有了短期记忆的能力。
h t ( l ) = f ( h t ( l − 1 ) , h t − 1 ( l − 1 ) , ⋯ , h t − K ( l − 1 ) ) \boldsymbol{h}_{t}^{(l)}=f\left(\boldsymbol{h}_{t}^{(l-1)}, \boldsymbol{h}_{t-1}^{(l-1)}, \cdots, \boldsymbol{h}_{t-K}^{(l-1)}\right) ht(l)=f(ht(l−1),ht−1(l−1),⋯,ht−K(l−1))
循环神经网络
通过使用带自反馈的神经元,能够处理任意长度的时序数据。
- 循环神经网络比前馈神经网络更加符合生物神经网络的结构。
- 循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上
状态更新时:每一层的隐藏层依赖于当前时刻的输入和前一时刻的隐藏层表示 h t = f ( U h t − 1 + W x t + b ) \boldsymbol{h}_{t}=f\left(\boldsymbol{U} \boldsymbol{h}_{t-1}+\boldsymbol{W} \boldsymbol{x}_{\boldsymbol{t}}+\boldsymbol{b}\right) ht=f(Uht−1+Wxt+b)
应用到基于机器学习的自然语言处理任务
序列到类别
正常模式下最后一个隐藏层的表示作为输出(记住了前面全部的隐藏层信息)。
也可以进行AveragePooling,按照时间进行平均采样。
同步的序列到序列模式
中文分词就是用的就是如下图所示的模式
异步的序列到序列模式
先对输入句子进行隐藏层表示(Encoder)。之后预测句中第一个单词,再依次预测后面的隐藏层表示和y(Decoder),输入序列和输出序列的长度不一定一样。机器翻译就是这样子的一个典型例子。
参数学习和长程依赖问题
给定一个训练样本(𝒙,𝒚),其中 𝒙 = ( 𝒙 1 , ⋯ , 𝒙 𝑻 ) 𝒙=(𝒙_1,⋯,𝒙_𝑻) x=(x1,⋯,xT)为长度是T 的输入序列, 𝒚 = 𝒚 1 , ⋯ , 𝒚 𝑻 𝒚= 𝒚_1, ⋯,𝒚_𝑻 y=y1,⋯,yT 是长度为T 的标签序列。
时刻t的瞬时损失函数为 L t = L ( y t , g ( h t ) ) \mathcal{L}_{t}=\mathcal{L}\left(\boldsymbol{y}_{t}, g\left(\boldsymbol{h}_{t}\right)\right) Lt=L(yt,g(ht))
总损失函数为 L = ∑ t = 1 T L t \mathcal{L}=\sum_{t=1}^{T} \mathcal{L}_{t} L=∑t=1TLt
梯度:随时间反向传播算法
δ t , k = δ t , t ∏ τ = k t − 1 ( U T f ′ ( z τ ) ) γ ≅ δ t , t γ t − k \begin{aligned} \delta_{t, k} & =\delta_{t, t} \prod_{\tau=k}^{t-1} \frac{\left(\boldsymbol{U}^{T} f^{\prime}\left(\boldsymbol{z}_{\tau}\right)\right)}{\gamma} \\ & \cong \delta_{t, t} \gamma^{t-k}\end{aligned} δt,k=δt,tτ=k∏t−1γ(UTf′(zτ))≅δt,tγt−k
由于梯度爆炸或消失问题,实际上只能学习到短周期的依赖关系。这就是所谓的长程依赖问题(循环神经网络在时间维度上非常深)。
梯度爆炸问题
- 权重衰减
- 梯度截断
梯度消失问题
- 改进模型
改进方法:
- 循环边改为线性依赖关系
δ t , k = δ t , t ∏ τ = k t − 1 ( U T f ′ ( z τ ) γ ≅ δ t , t γ t − k \begin{aligned} \delta_{t, k} & =\delta_{t, t} \prod_{\tau=k}^{t-1} \frac{\left(\boldsymbol{U}^{T} f^{\prime}\left(\boldsymbol{z}_{\tau}\right)\right.}{\gamma} \\ & \cong \delta_{t, t} \boldsymbol{\gamma}^{t-k}\end{aligned} δt,k=δt,tτ=k∏t−1γ(UTf′(zτ)≅δt,tγt−k
将f去掉并将U变成单位阵,宗旨是为了让gamma=1 - 增加非线性
h t = h t − 1 + g ( x t , h t − 1 ; θ ) \boldsymbol{h}_{t}=\boldsymbol{h}_{t-1}+\boldsymbol{g}\left(\boldsymbol{x}_{t}, \boldsymbol{h}_{t-1} ; \theta\right) ht=ht−1+g(xt,ht−1;θ)
非线性激活函数不可以用RELU:会导致h爆炸,Sigmoid也不可以,没有负区间,同样会导致h爆炸,用tanh(-1,1)!
基于门控的循环神经网络
门控机制:控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前历史累计的信息
门控循环单元(GRU)
更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,也就是更新门帮助模型决定到底要将多少过去的信息传递到未来,简单来说就是用于更新记忆。
简单来说重置门就是构造一个输入(决定输入中有多少过去的成分);更新门就是决定构造的新输入有多少会传下去。
当rt的值接近0时,说明上一时刻的内容需要全部丢弃,只保留当前时刻的输入,所以可以用来丢弃与预测无关的历史信息。
当rt的值接近1时,表示保留上一时刻的隐藏状态。
重置门决定了如何将新的输入信息与前面的记忆相结合。
长短期记忆神经网络(LSTM)
LSTM(长短期记忆网络)是RNN的一种特殊类型,它通过引入“门”(输入门、遗忘门、输出门)来解决传统RNN在处理长序列时梯度消失或梯度爆炸的问题,从而有效捕捉长期依赖关系。这些门控机制像阀门一样控制着信息在“细胞状态”(Cell State)中的流动、添加和删除,允许重要信息在较长时间内保留,而无关信息则被过滤掉。
深度循环神经网络
堆叠循环神经网络
双向循环神经网络
递归神经网络
循环神经网络用于处理任意长度的时序数据,那么如何处理具有预定义结构的数据?我们需要参照程序语言的句法结构。
转变到自然语言的句法结构之后:
Richard Socher等人在2011年提出了递归神经网络
当然了递归神经网络也可能会退化为循环神经网络,当递归神经网络的树状结构退化为线性的链式结构时,它就退化(或者说等价于)为循环神经网络。
标准递归神经网络
所有的W都是共享的,无法区分叶结点的词性
Syntactically-Untied RvNN
不同的句法成分类别对应不同的聚合函数,把W改成不是全局共享的
Matrix-Vector Recursive Neural Network
每个节点由一个向量和一个矩阵来共同表示,但是有一个缺点就是参数量过大。
Recursive Neural Tensor Network
聚合时引入张量运算
注意力机制
人脑每个时刻接收的外界输入信息非常多,包括来源于视觉、听觉、触觉的各种各样的信息。但就视觉来说,眼睛每秒钟都会发送千万比特的信息给视觉神经系统。人脑通过注意力来解决信息超载问题。
注意力机制可以分为两步:
- 计算注意力分布 α \alpha α
α n = p ( z = n ∣ X , q ) = softmax ( s ( x n , q ) ) = exp ( s ( x n , q ) ) ∑ j = 1 N exp ( s ( x j , q ) ) \begin{aligned} \alpha_{n} & =p(z=n \mid \boldsymbol{X}, \boldsymbol{q}) \\ & =\operatorname{softmax}\left(s\left(\boldsymbol{x}_{n}, \boldsymbol{q}\right)\right) \\ & =\frac{\exp \left(s\left(\boldsymbol{x}_{n}, \boldsymbol{q}\right)\right)}{\sum_{j=1}^{N} \exp \left(s\left(\boldsymbol{x}_{j}, \boldsymbol{q}\right)\right)}\end{aligned} αn=p(z=n∣X,q)=softmax(s(xn,q))=∑j=1Nexp(s(xj,q))exp(s(xn,q))
s ( x n , q ) s(x_n,q) s(xn,q)是打分函数 - 根据 α \alpha α来计算输入信息的加权平均
att ( X , q ) = ∑ n = 1 N α n x n = E z ∼ p ( z ∣ X , q ) [ x z ] \begin{aligned} \operatorname{att}(\boldsymbol{X}, \boldsymbol{q}) & =\sum_{n=1}^{N} \alpha_{n} \boldsymbol{x}_{n} \\ & =\mathbb{E}_{z \sim p(z \mid \boldsymbol{X}, \boldsymbol{q})}\left[\boldsymbol{x}_{z}\right]\end{aligned} att(X,q)=n=1∑Nαnxn=Ez∼p(z∣X,q)[xz]
相关文章:

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...