序言

1. 内容介绍

  本章介绍深度学习算法-循环神经网络,主要介绍循环神经网络面临的长期依赖问题与相应的优化策略,包括 多时间尺度渗漏单元梯度阶段信息流正规化 以及 门控 RNN: LSTM 与 GRU

2. 理论目标

  • RNN 长期依赖数学原理分析
  • 多时间尺度、渗漏单元、梯度截断、信息流正规化等优化策略
  • 门控 RNN 设计理念
  • LSTM、GRU 的模型结构与参数更新

3. 实践目标

  • 掌握 RNN 长期依赖数学原理分析
  • 掌握 多时间尺度、渗漏单元、梯度截断、信息流正规化等优化策略
  • 熟悉 门控 RNN 设计理念
  • 熟悉 LSTM、GRU 的模型结构与参数更新

4. 内容目录

  • 1.长期依赖问题
  • 2.优化策略
  • 3.长短期记忆 LSTM
  • 4.门控循环单元 GRU

第1节 长期依赖问题

  长期依赖 (Long-Term Dependency) 是指使用神经网络优化算法时随着结构的逐步加深,模型会 不可避免 地丧失学习到之前信息的能力,让优化变得极其困难

RNN 需要在很长的时间序列的各个时刻重复应用相同操作来构建非常深的计算图,并且参数共享,这使问题更加凸显

导致此问题的根本原因在于 反向传播 过程中权重的幂运算

  作为深度学习中的一个主要挑战,长期依赖的问题产生的根本问题是在经过许多阶段传播之后,梯度趋向于消失或者爆炸

长期依赖的问题中,梯度消失占大部分情况,而梯度爆炸占少数情况。但是梯度爆炸一旦发生,就优化过程影响巨大

RNN 涉及到许多相同函数的多次复合作用,每个时间步一次。一旦涉及到 Jacobian 矩阵相乘,即使 RNN 是参数稳定的,这种复合作用可以导致极端的非线性行为

1.1 数学原理分析

  在展开枯燥的数学推导前,先干了这碗鸡汤,来获取对于长期依赖、梯度消失、梯度爆炸的一个通俗认知

    

人生中,差别不大的 0.01 不可小觑,微小的勤奋只要坚持下去也会成就非凡,微小的惰性日积月累亦会带来巨大的失败; 人与人之间的初始差别往往就在于 0.01,关键是看我们如何利用好这 0.01,勤奋也好懒惰也罢,决定着我们人生的成败; 人生之路从出生到死亡三万余天,每天如同登山般,只要是往上走,即便每天一小步,也会创造人生的新高度 \dots\dots\dots………

  在反向传播过程中,当 \neq 1​=1 的权重参数进行重复 指数运算 且次数随着模型加深而增长时,该权重参数会趋向于 0 或者 \infty∞ 。RNN 计算展开图中,假设某个计算图中包含一条反复与矩阵 \mathbf{W}W 相乘的路径,在 tt 步后,相当于乘以 \mathbf{W}^TWT。假设 \mathbf{W}W 有特征值分解


      \mathbf{W} = (\mathbf{V} diag(\mathbf{\lambda})\mathbf{V}^{-1})^t = \mathbf{V} diag(\mathbf{\lambda})^t \mathbf{V}^{-1}W=(Vdiag(λ)V−1)t=Vdiag(λ)tV−1

  • 当特征值 \lambda_iλi​ 不在 1 附近时,若在量级上 > 1>1 则会 梯度爆炸
  • 当特征值 \lambda_iλi​ 不在 1 附近时,若在量级上 < 1<1 则会 梯度消失

  高度非线性的深度神经网络或循环神经网络的目标函数通常包含由几个参数连乘而导致的参数空间中极端的 非线性 行为,这些非线性在某些区域内会产生非常大的导数。当参数接近这样的悬崖区域时,梯度下降更新可以使参数弹射得非常远,可能使大量已完成得优化工作变成无用功

  • 梯度消失导致难以获悉参数朝哪个方向移动能够改进损失函数
  • 梯度爆炸导致损失函数剧烈波动使得学习不稳定

1.2 RNN 长期依赖分析

  RNN 面临的最大挑战就是无法解决长期依赖问题, 在处理长时间问题的问题时,由于梯度消失造成的较远信息对此时几乎不产生影响,对于一段长文本而言,其中的语言含义可能存在于开头和结尾的两个词上,但是通常的神经网络由于梯度消失问题没办法建立起相应的语义联系

最后的 waswas 与 werewere 如何选择是和前面的单复数有关系的,但对于简单的 RNN 来说,两个词相隔过远导致语义无法传达

  从数学的角度来理解,上一章可知,\vec{\mathbf{h}}^{(t)} = \vec{\mathbf{b}} + \mathbf{U}\vec{\mathbf{x}}^{(t)} + \mathbf{W}\vec{\mathbf{h}}^{(t-1)}h(t)=b+Ux(t)+Wh(t−1)

  • 考虑一个没有非线性、没有偏置非常简单的循环结构 \vec{\mathbf{h}}^{(t)} = \mathbf{W}\vec{\mathbf{h}}^{(t-1)}h(t)=Wh(t−1), 则有


    \qquad\;\mathbf{h}^{(t)} = \mathbf{W}^T\mathbf{h}^{(t-1)}h(t)=WTh(t−1)

     

  • 此类循环神经网络所使用得函数组合与矩阵乘法类似,这种递推关系本质上描述了幂法,可以被简化为


    \qquad\;\mathbf{h}^{(t)} = (\mathbf{W}^t)^T\mathbf{h}^{(0)}h(t)=(Wt)Th(0)
     
  • 当 \mathbf{W}W 符合下列形式的特征分解,即可以正交分解为


    \qquad\;\mathbf{W} = \mathbf{Q\Lambda Q}^TW=QΛQT

    \qquad\mathbf{h}^{(t)} = \mathbf{Q}^T \mathbf{\Lambda}^t \mathbf{Q} \mathbf{h}^{(0)}h(t)=QTΛtQh(0)
     
    • 前向传播
      • 对于特征值的幅度不到 1 的特征值对应的 \mathbf{h}^{(t)}h(t) 的部分将随着 tt 衰减到 0
      • 对于特征值的幅度大于 1 的特征值对应的 \mathbf{h}^{(t)}h(t) 的部分将随着 tt 指数级增长
    • 反向传播
      • 对于特征值幅度不到 1 的梯度的部分将随着 tt 衰减到 0
      • 对于特征值幅度大于 1 的梯度的部分将随着 tt 指数级增长

非常深的前馈神经网络通过精心设计可以避免梯度消失和梯度爆炸问题

对于标量权重 ww,假设每个时刻使用不同的权重 w^{(t)}w(t), w^{(t)}w(t) 是独立同分布的随机变量,均值为 0、方差为 vv,则 \prod_t w^{(t)}∏t​w(t) 的方差为 O(v^n)O(vn)

对于非循环神经网络,长期依赖的情况稍好

可以通过简单地停留在梯度不消失或爆炸地参数空间来避免长期依赖的问题,但为了储存记忆并对小扰动具有鲁棒性,RNN 必须进入 参数空间中的 “梯度悬崖” 区域

学习长期依赖需要很长的时间,特别当增加需要学习的依赖关系的跨度时,基于梯度的优化会变得愈发困难

对于循环神经网络,解决长期依赖是持续至今的主要挑战


第2节 优化策略

2.1 多时间尺度

  缓解长期依赖的一个策略是设计多个时间尺度的模型

  • 在 细粒度 时间尺度上处理 近期 信息
  • 在 粗粒度 时间尺度上处理 远期 信息

  得到粗粒度时间尺度的一种方法是 跳跃连接,即增加从远期的隐变量到当前隐变量的直接连接

  • 普通的 RNN 中循环从时刻 tt 隐变量连接到了时刻 t+1t+1 隐变量,跳跃连接会增加一条从时刻 tt 到时刻 t+dt+d 隐变量的连接
  • 引入了 dd 延时的循环连接可以减轻梯度消失的问题

现在梯度指数降低的速度与 \frac{\tau}{d}dτ​ 相关,而不是与 \tauτ 相关。这允许算法捕捉到更长时间的依赖性, 但是这种做法无法缓解梯度指数级爆炸的问题

  得到粗粒度时间尺度的另一种方法是 删除连接,即主动删除时间跨度为 1 的连接,并用更长的连接替换

  • 删除连接不会增加计算图中的连接,而跳跃连接会增加计算图中的连接
  • 删除连接强迫单元在长时间尺度上工作,而跳跃连接可以选择在长时间尺度上工作,也可以在短时间尺度上工作

2.2 渗漏单元

  缓解梯度爆炸和梯度消失的一个方案是尽可能的使得梯度接近 11, 而这可以通过 线性自连接单元 来实现

  • 假设 \mu^{(t)}μ(t) 为隐单元代表滑动平均值, x^{(t)}x(t) 为输入, 则有


    \qquad\;\mu^{(t)} \gets \alpha\mu^{(t-1)} + (1-\alpha)x^{(t)}μ(t)←αμ(t−1)+(1−α)x(t), 其中 \alphaα 是从 \mu^{(t-1)}μ(t−1) 到 \mu^{(t)}μ(t) 线性自连接的例子
     
    • 当 \alphaα 接近 1 时,\mu^{(t)}μ(t) 能记住过去很长一段时间的输入信息
    • 当 \alphaα 接近 0 时,\mu^{(t)}μ(t) 能记住附近的一小段输入信息

  拥有类似行为的隐单元 \mu^{(t)}μ(t) 称作 渗漏单元

  • 渗漏单元与跳跃连接的区别
  • dd 时间步的跳跃连接可以确保隐单元总能够被 dd 个时间步之前的输入值所影响
  • 参数为 \alphaα 的渗漏单元通过调整 \alphaα 值,可以更灵活的确保隐单元访问到过去不同时间步的输入值
  • 渗漏单元和跳跃连接的 \alpha,dα,d 参数有两种设置方式
  • 手动设置为常数, 如在初始化时从某些分布采样值
  • 让它们成为可训练的变量,从训练中学习出来
  • 不同的循环单元在不同时间尺度上工作
  • 手动设置不同的循环单元具有不同的 \alpha,dα,d 参数
  • 虽然不同的循环单元具有相同的 \alpha,dα,d 参数,但是在梯度下降的参数更新中,显式使得不同循环单元的参数采用不同的更新频率

2.3 梯度截断

  对于长期依赖问题中的梯度爆炸,最常用的解决方案是 梯度截断 (Clipping the Gradient)

  设梯度 \vec{\mathbf{g}} = \lbrace g_1,g_2,\dots,g_n\rbrace ^ Tg​={g1​,g2​,…,gn​}T , 梯度截断有 2 种方案

  • 在更新参数之前,逐元素的截断参数梯度,其中 vv 为 g_igi​ 的上界


    \qquad g_i = \begin{cases}g_i&if\;g_i \le v\\sign(g_i)\times v&\quad else\\\end{cases}gi​={gi​sign(gi​)×v​ifgi​≤velse​

  • 在更新参数之前,截断梯度的范数,其中 vv 是范数 \left\|\vec{\mathbf{g}}\right\|∥g​∥ 的上界


    \qquad \vec{\mathbf{g}} = \begin{cases}\vec{\mathbf{g}}&if\;\left\|\vec{\mathbf{g}}\right\| \le v\\\frac{\vec{\mathbf{g}}\times v}{\left\|\vec{\mathbf{g}}\right\|}&\quad else\\\end{cases}g​={g​∥g​∥g​×v​​if∥g​∥≤velse​

第二种方案可以确保截断后的梯度仍然是在正确的梯度方向上。但是实践表明两种方式的效果相近, 因为逐元素的梯度截断时,梯度更新的方向不仅不再是真实梯度方向,但仍然是一个使得目标值下降的方向

2.4 信息流正规化

  梯度截断有助于解决梯度爆炸,但是无助于解决梯度消失,对此有两种成熟思路

  • 正则化或者约束参数,从而引导信息流
  • 路径的梯度乘积接近1,如 LSTM 及其他门控机制 (下节内容)

  正则化引导信息流希望梯度向量在反向传播时能维持其幅度,即希望


\qquad\qquad\nabla_{\mathbf{h}^{(t)}}\; L \approxeq \nabla_{\mathbf{h}^{(t-1)}}\enspace L∇h(t)​L≊∇h(t−1)​L


\qquad\qquad\qquad\enspace\;\approxeq (\nabla_{\mathbf{h}^{(t)}}\; L)\dfrac{\partial \mathbf{h}^{(t)}}{\partial \mathbf{h}^{(t-1)}}≊(∇h(t)​L)∂h(t−1)∂h(t)​
 

  Pascanu 等人给出了以下正则项


\qquad\qquad\Omega = \sum\limits^{}_t (\dfrac{\left\|(\nabla_{\mathbf{h}^{(t)}}\; L)\dfrac{\partial \mathbf{h}^{(t)}}{\partial \mathbf{h}^{(t-1)}}\right\|}{\left\|\nabla_{\mathbf{h}^{(t)}}\; L\right\|} - 1)^2Ω=t∑​(∥∇h(t)​L∥∥∥∥∥∥​(∇h(t)​L)∂h(t−1)∂h(t)​∥∥∥∥∥​​−1)2
 

  Pascanu 提出可以将反向传播梯度 \nabla_{\mathbf{h}^{(t)}}\; L∇h(t)​L 考虑作为恒值来近似

  • 实验表明如果与梯度截断相结合,该正则项可以显著增加 RNN 学习的依赖跨度
  • 但在处理数据冗余的任务时,如语言模型,它并不像 LSTM 一样有效

第3节 长短期记忆 LSTM

3.1 门控 RNN 简介

  优化长期依赖问题时,实际应用中最有效的序列模型称为 门控 RNN (Gated RNN), 包括基于 长短期记忆 (Long Short-Term Memory) 与基于 门控循环单元 (Gated Recurrent Unit) 的网络

像渗漏单元一样,门控 RNN 基于生成通过时间的路径,其中导数既不消失也不爆炸

  • 渗漏单元通过手动选择常量的连接权重或参数化的连接权重来达到此目的
  • 门控 RNN 将其推广为在每个时间步 \tauτ 都可能改变的连接权重

  渗漏单元允许网络在较长持续时间内 积累 信息,然而一旦该信息被使用,让神经网络 遗忘 旧的状态可能是有用的

  • 例如,如果一个序列是由子序列组成,希望有一种机制能让渗漏单元能在各子序列内积累信息,并将状态 \alphaα 设置为 0 以忘记旧状态的机制
  • 神经网络需要学习决定何时清除状态,而不是监督性地靠人手动决定,这就是门控 RNN 设计目的

3.2 LSTM 模型结构

  LSTM 在手写识别、语音识别、机器翻译、为图像生成标题等领域获得重大成功。

  • LSTM 循环网络除了外部的 RNN 循环之外,还有内部的 LSTM cell 循环 (自环)。LSTM cell 代替了普通 RNN 的隐单元,而 LSTM 的 \vec{h}^{(t)}h(t) 是 cell 的一个输出
  • LSTM 引入 cell 循环以保持梯度长时间持续流动。其中一个关键是 cell 循环的权重视上下文而定,而不是固定的

  具体做法是通过 gate 来控制这个 cell 循环的权重,而这个 gate 由上下文决定

  • cell 输出是 \vec{h}^{(t)}h(t),而不是整个 RNN 单元的输出 \vec{o}^{(t)}o(t)
  • cell 之间的连接是通过 \vec{h}^{(t)}, \vec{C}^{(t)}h(t),C(t) 来连接的

3.2.1 遗忘门

遗忘门控制了 cell 上一个状态 \vec{C}^{(t-1)}C(t−1) 中,有多少信息进入当前状态 \vec{C}^{(t)}C(t)

与渗漏单元类似,LSTM cell 也有线性自环。遗忘门 f_i^{(t)}fi(t)​ 控制了自环的权重,而不再是常数

3.2.2 输入门

输入门控制了输入 \vec{x}^{(t)}x(t) 中,有多少信息进入 cell 当前状态 \vec{C}^{(t)}C(t)

3.2.3 输出门

输出门控制了cell 状态 \vec{C}^{(t)}C(t) 中,有多少会进入 cell 的输出 \vec{h}^{(t)}h(t)

3.3 权重参数更新

3.3.1 cell 状态 C^{(t)}C(t)

   cell 状态更新 \vec{C}^{(t)}C(t) 由两部分组成

  • 一部分来自于上一次的状态 \vec{C}^{(t-1)}C(t−1)

    它经过了遗忘门 \vec{f}^{(t)}f​(t) 的控制,使得只有部分状态进入下一次
  • 一部分来自于输入 (包括 \vec{x}^{(t)}, \vec{H}^{(t-1)}x(t),H(t−1))

    输入需要经过 tanhtanh 非线性层变换之后,然后经过输入门 \vec{g}^{(t)}g​(t) 的控制,使得只有部分输入能进入状态更新

3.3.2 cell 输出 h^{(t)}h(t)

  cell 输出更新就是 \vec{h}^{(t)}h(t),将 cell 状态经过了 \tanhtanh 非线性层之后,再通过输出门 \vec{q}^{(t)}q​(t) 控制输出的流量


\qquad\qquad h_i^{(t)} = \tanh(C_i^{(t)})q_i^{(t)}hi(t)​=tanh(Ci(t)​)qi(t)​


  写成向量的形式为 (\tanhtanh 为逐元素的函数,\odot⊙ 为逐元素的向量乘积)


\qquad\qquad \vec{h}^{(t)} = \tanh(\vec{C}^{(t)})\odot\vec{q}^{(t)}h(t)=tanh(C(t))⊙q​(t)

3.3.3 LSTM 输出

  当获取 cell 输出 \vec{h}^{(t)}h(t) 后,获取整个 LSTM 单元的输出 \vec{o}^{(t)}o(t) 和普通的 RNN 相同

  • 遗忘门 \quad\to\quad\vec{f}^{(t)} = \sigma(\vec{b}^f + U^f\vec{x}^{(t)} + W^f\vec{h}^{(t-1)})→f​(t)=σ(bf+Ufx(t)+Wfh(t−1))
  • 输入门 \quad\to\quad\vec{g}^{(t)} = \sigma(\vec{b}^g + U^g\vec{x}^{(t)} + W^g\vec{h}^{(t-1)})→g​(t)=σ(bg+Ugx(t)+Wgh(t−1))
  • 输出门 \quad\to\quad\vec{q}^{(t)} = \sigma(\vec{b}^q + U^q\vec{x}^{(t)} + W^q\vec{h}^{(t-1)})→q​(t)=σ(bq+Uqx(t)+Wqh(t−1))
  • 细胞状态 \quad\to\quad\vec{C}^{(t)} = \vec{f}^{(t)}\odot\vec{C}^{(t-1)} + \vec{g}^{(t)}\odot\tanh(\vec{b}+U\vec{x}^{(t)}+W\vec{h}^{(t-1)})→C(t)=f​(t)⊙C(t−1)+g​(t)⊙tanh(b+Ux(t)+Wh(t−1))
  • 细胞输出 \quad\to\quad\vec{h}^{(t)} = \tanh(\vec{C}^{(t)})\odot\vec{q}^{(t)}→h(t)=tanh(C(t))⊙q​(t)
  • 模型输出 \quad\to\quad\vec{o}^{(t)} = softmax(\vec{c} + V\vec{h}^{(t)})→o(t)=softmax(c+Vh(t))
  • 损失函数 \quad\to\quad L = - \sum\limits^{\tau}_{t-1} \sum\limits^K_{k=1} \mathbb{I}_{k = y^{(t)}} \log o_k^{(t)}→L=−t−1∑τ​k=1∑K​Ik=y(t)​logok(t)​

第4节 门控循环单元 GRU

  门控循环单元 GRU 比 LSTM 模型更简单

  • GRU 的单个门控单元同时作为遗忘门和输入门,整个 GRU 模型只有更新门与复位门
  • GRU 不再区分 cell 的状态 \vec{C}C 和 cell 的输出 \vec{h}h

4.1 GRU 模型结构

4.1.1 更新门

  更新门同时控制遗忘因子和更新状态单元的决定,像条件渗漏累积器一样可以线性门控任意维度,从而选择将它复制或完全有新的 “目标状态” 值替换并完全忽略它

  • 控制新的信息 \vec{h}^{(t)}h(t) 由 \vec{x}^{(t)},\vec{h}^{(t-1)}x(t),h(t−1) 生成
  • 控制旧的信息 \vec{h}^{(t-1)}h(t−1) 中各有多少信息进入 \vec{h}^{(t)}h(t)

  更新门 z_i^{(t)}zi(t)​ 的更新方程为


\qquad\qquad z_i^{(t)} = \sigma(b^z_i + \sum\limits^{}_j U^z_{i,j}x_j^{(t)} + \sum\limits^{}_j W^z_{i,j}h_j^{(t-1)})zi(t)​=σ(biz​+j∑​Ui,jz​xj(t)​+j∑​Wi,jz​hj(t−1)​)

  写成向量的形式为 (\sigmaσ 为逐元素的 sigmoid 函数)


\qquad\qquad \vec{z}^{(t)} = \sigma(\vec{b}^z + U^z\vec{x}^{(t)} + W^z\vec{h}^{(t-1)})z(t)=σ(bz+Uzx(t)+Wzh(t−1))

4.1.2 复位门

  复位门控制当前状态中哪些部分用于计算下一个目标状态,在过去状态和未来状态之间引入了附加的非线性效应

  • 控制新的信息 \vec{h}^{(t)}h(t) 中 \vec{x}^{(t)}, \vec{h}^{(t-1)}x(t),h(t−1) 之间的比例
  • 表示新的信息中,旧的信息多大程度上影响新的信息,如果 r = 0r=0,则旧的信息不影响新的信息,即为 复位

  复位门 r_i^{(t)}ri(t)​ 的更新方程为


\qquad\qquad r_i^{(t)} = \sigma(b^r_i + \sum\limits^{}_j U^r_{i,j}x_j^{(t)} + \sum\limits^{}_j W^r_{i,j}h_j^{(t-1)})ri(t)​=σ(bir​+j∑​Ui,jr​xj(t)​+j∑​Wi,jr​hj(t−1)​)

  写成向量的形式为 (\sigmaσ 为逐元素的 sigmoid 函数)


\qquad\qquad \vec{r}^{(t)} = \sigma(\vec{b}^r + \sf{U}^r\vec{x}^{(t)} + W^r\vec{h}^{(t-1)})r(t)=σ(br+Urx(t)+Wrh(t−1))

4.2 权重参数更新

4.2.1 cell 输出 h^{(t)}h(t)

  cell 输出更新就是 \vec{h}^{(t)}h(t),由更新门与复位门决定筛选新的信息,其更新方程为


\qquad\qquad h_i^{(t)} = z_i^{(t)}h_i^{(t-1)} + (1-z_i^{(t)})\tanh(b_i + \sum\limits^{}_j U_{i,j}x_j^{(t)} + \sum\limits^{}_j W_{i,j}r_j^{(t)}h_j^{(t-1)})hi(t)​=zi(t)​hi(t−1)​+(1−zi(t)​)tanh(bi​+j∑​Ui,j​xj(t)​+j∑​Wi,j​rj(t)​hj(t−1)​)


  写成向量的形式为 (\tanhtanh 为逐元素的函数,\odot⊙ 为逐元素的向量乘积)


\qquad\qquad \vec{h}^{(t)} = \vec{z}^{(t)}\odot\vec{h}^{(t-1)} + (1 - \vec{z}^{(t)}) \odot \tanh(\vec{b} + U\vec{x}^{(t)} + W\vec{r}^{(t)}\odot\vec{h}^{(t-1)})h(t)=z(t)⊙h(t−1)+(1−z(t))⊙tanh(b+Ux(t)+Wr(t)⊙h(t−1))


  令 \tilde{\vec{h}}^{(t)}h~(t) 代表当前时间点的更新,即 \tilde{\vec{h}}^{(t)} = \tanh(\vec{b} + U\vec{x}^{(t)} + W\vec{r}^{(t)}\odot\vec{h}^{(t-1)})h~(t)=tanh(b+Ux(t)+Wr(t)⊙h(t−1))


\qquad\qquad \vec{h}^{(t)} = \vec{z}^{(t)}\odot\vec{h}^{(t-1)} + (1 - \vec{z}^{(t)}) \odot \tilde{\vec{h}}^{(t)}h(t)=z(t)⊙h(t−1)+(1−z(t))⊙h~(t), 与渗漏单元表达式 \mu^{(t)} = \alpha\mu^{(t-1)} + (1-\alpha)x^{(t)}μ(t)=αμ(t−1)+(1−α)x(t) 相似

4.2.2 GRU 输出

  当获取 cell 输出 \vec{h}^{(t)}h(t) 后,获取整个 GRU 单元的输出 \vec{o}^{(t)}o(t) 和普通的 RNN 相同

  • 更新门 \quad\to\quad\vec{z}^{(t)} = \sigma(\vec{b}^z + U^z\vec{x}^{(t)} + W^z\vec{h}^{(t-1)})→z(t)=σ(bz+Uzx(t)+Wzh(t−1))
  • 复位门 \quad\to\quad\vec{r}^{(t)} = \sigma(\vec{b}^r + U^r\vec{x}^{(t)} + W^r\vec{h}^{(t-1)})→r(t)=σ(br+Urx(t)+Wrh(t−1))
  • 细胞输出 \quad\to\quad\vec{h}^{(t)} = \vec{z}^{(t)}\odot\vec{h}^{(t-1)} + (1 - \vec{z}^{(t)}) \odot \tanh(\vec{b} + U\vec{x}^{(t)} + W\vec{r}^{(t)}\odot\vec{h}^{(t-1)})→h(t)=z(t)⊙h(t−1)+(1−z(t))⊙tanh(b+Ux(t)+Wr(t)⊙h(t−1))
  • 模型输出 \quad\to\quad\vec{o}^{(t)} = softmax(\vec{c} + V\vec{h}^{(t)})→o(t)=softmax(c+Vh(t))
  • 损失函数 \quad\to\quad L = - \sum\limits^{\tau}_{(t-1)} \sum\limits^{K}_{k=1} \mathbb{I}_{k = y^{(t)}} \log o_k^{(t)}→L=−(t−1)∑τ​k=1∑K​Ik=y(t)​logok(t)​

开始实验

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐