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

自然语言处理——循环神经网络

自然语言处理——循环神经网络

  • 循环神经网络
    • 应用到基于机器学习的自然语言处理任务
      • 序列到类别
      • 同步的序列到序列模式
      • 异步的序列到序列模式
  • 参数学习和长程依赖问题
  • 基于门控的循环神经网络
    • 门控循环单元(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(l1),ht1(l1),,htK(l1))

循环神经网络

通过使用带自反馈的神经元,能够处理任意长度的时序数据。
在这里插入图片描述

  • 循环神经网络比前馈神经网络更加符合生物神经网络的结构。
  • 循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上
    在这里插入图片描述
    状态更新时:每一层的隐藏层依赖于当前时刻的输入和前一时刻的隐藏层表示 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(Uht1+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τ=kt1γ(UTf(zτ))δt,tγtk
由于梯度爆炸或消失问题,实际上只能学习到短周期的依赖关系。这就是所谓的长程依赖问题(循环神经网络在时间维度上非常深)。

梯度爆炸问题

  • 权重衰减
  • 梯度截断

梯度消失问题

  • 改进模型

改进方法:

  1. 循环边改为线性依赖关系
    在这里插入图片描述
    δ 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τ=kt1γ(UTf(zτ)δt,tγtk
    将f去掉并将U变成单位阵,宗旨是为了让gamma=1
  2. 增加非线性
    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=ht1+g(xt,ht1;θ)
    非线性激活函数不可以用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

聚合时引入张量运算
在这里插入图片描述

注意力机制

人脑每个时刻接收的外界输入信息非常多,包括来源于视觉、听觉、触觉的各种各样的信息。但就视觉来说,眼睛每秒钟都会发送千万比特的信息给视觉神经系统。人脑通过注意力来解决信息超载问题。
在这里插入图片描述
注意力机制可以分为两步:

  1. 计算注意力分布 α \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=nX,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)是打分函数
  2. 根据 α \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=1Nαnxn=Ezp(zX,q)[xz]
    在这里插入图片描述
http://www.xdnf.cn/news/948367.html

相关文章:

  • PKIX path building failed问题小结
  • Element-Plus:popconfirm与tooltip一起使用不生效?
  • Spring数据访问模块设计
  • Python自然语言处理库之gensim使用详解
  • Appuploader:在WindowsLinux上完成iOS APP上架的一种解决方案
  • RLHF vs RLVR:对齐学习中的两种强化方式详解
  • Rsync+inotify+nfs实现数据实时备份方案
  • Socket 编程
  • 架构设计之存储高性能——非关系型数据库(NoSQL)
  • 代购商城系统怎么选?从业务痛点看系统核心价值
  • SOC-ESP32S3部分:QA-关于唤醒词更改及配置操作步骤
  • 解锁Vscode:C/C++环境配置超详细指南
  • Python训练营---DAY49
  • 卷积神经网络设计指南:从理论到实践的经验总结
  • FDMA:解锁PL DDR性能的“高速快递系统”
  • Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
  • 论文笔记:Urban Computing in the Era of Large Language Models
  • 多模态大语言模型arxiv论文略读(113)
  • Vue3+ts项目,在ts文件中导入vue文件,报错:找不到模块“./App.vue“或响应的类型声明
  • Easy Rules规则引擎:轻量级Java规则处理实践指南
  • 微机原理与接口技术,期末冲刺复习资料(四)
  • Python_day49cbam模块介绍
  • 华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
  • 从线上名片到商业引擎:企业如何用官网重构市场竞争力?
  • 从数据报表到决策大脑:AI重构电商决策链条
  • 客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
  • 篇章十 数据结构——排序
  • 用HTML5+CSS3+JavaScript实现找不同游戏
  • c语言tips-结构体数组 VS 链表宏:`list_for_each_entry` 的优势与局限对比分析
  • 《解锁JNA与CUDA内核密码,定制专属AI算子》