泉州网站建设外包,国内一线互联网公司排名,冬季什么行业做网站比较多,东莞公司注册多少钱神经元不仅接收其他神经元的信息#xff0c;也能接收自身的信息。 循环神经网络#xff08;Recurrent Neural Network#xff0c;RNN#xff09;是一类具有短期记忆能力的神经网络#xff0c;可以更方便地建模长时间间隔的相关性 常用的参数学习可以为BPTT。当输入序列比较… 神经元不仅接收其他神经元的信息也能接收自身的信息。 循环神经网络Recurrent Neural NetworkRNN是一类具有短期记忆能力的神经网络可以更方便地建模长时间间隔的相关性 常用的参数学习可以为BPTT。当输入序列比较长时其计算时间和空间要求随时间线性增长可以使用带截断的BPTT只计算固定时间间隔内的梯度回传 RNN可以近似任何非线性动力系统及图灵机但会存在梯度爆炸和小时问题也即长程依赖问题。从模型角度的改进最有效改进方法为引入门控机制如GNU和LSTM网络也可以使用时钟循环神经网络、乘法RNN以及引入注意力机制 LSTM 网络是目前为止最成功的循环神经网络模型通过引入线性连接来缓解长程依赖问题成功应用在很多领域如语音识别、机器翻译、语音模型以及文本生成。人们不断尝试对其进行改进来寻找最优结构比如减少门的数量、提高并行能力等 LSTM的线性连接和门控机制能有效避免梯度消失问题也运用于深层前馈网络中如残差网络和告诉网络都是引入线性训练非常深的卷积网络。对于循环网络这种机制也可以运用于非时间维度上 RNN还可以轻易扩展为两种更广义的网络模型递归神经网络和图网络 递归神经网络是一种在有向无环图上的简单的图网络比较有名的图网络模型包括图卷积网络Graph Convolutional NetworkGCN图注意力网络Graph Attention NetworkGAT、消息传递神经网络Message Passing Neural NetworkMPNN 文章目录 2.1 模型2.1.1 给网络增加记忆能力延时神经网络有外部输入的非线性自回归模型自回归模型(AR)有外部输入的非线性自回归模型 循环神经网络应用 2.1.2 简单循环网路SRN循环神经网络的计算能力循环神经网络的通用近似定理图灵完备 2.1.3 应用到机器学习序列到类别模式同步的序列到序列模式异步的序列到序列模式 2.2 学习2.2.1 参数学习随时间反向传播算法计算偏导数 ∂ L t ∂ u i j \frac{\partial \mathcal{L}_t}{\partial u_{ij}} ∂uij∂Lt计算 ∂ L t ∂ U \frac{\partial \mathcal{L}_t}{\partial U} ∂U∂Lt参数梯度 实时循环学习算法BTPPRTRL 2.2.2 长程依赖问题 2.3 模型改进2.3.1 改进方案梯度爆炸梯度消失 2.3.2 基于门控的循环神经网络门控机制门控循环单元网络长短期记忆网络记忆参数更新LSTM网络的变体 2.4 扩展形式2.4.1 深层循环神经网络堆叠循环神经网络双向循环神经网络 2.4.2 扩展到图结构递归神经网络图神经网络 2.5 应用生成语言模型作词机机器翻译看图说话写字对话系统 2.1 模型
给神经网络增加记忆功能循环神经网络应用到机器学习
2.1.1 给网络增加记忆能力
为了处理时序数据并利用其历史信息需要让网络具有短期记忆能力
前馈网络是一种静态网络不具备记忆能力
延时神经网络
利用历史信息建立一个额外的延时单元。用于存储网络的历史信息输入、输出、隐状态
TDNN 延时神经网络 在前馈网络的非输出层都增加一个延时器记录神经元的最近几次活性值
在第 t t t 时刻第 l l l 层神经元的活性值依赖于同一时刻的输上一层的输出 h t ( l − 1 ) h_{t}^{(l-1)} ht(l−1) 与第 l − 1 l-1 l−1 层的最近 K K K 个历史信息(活性值) h t ( l ) f ( h t ( l − 1 ) , h t − 1 ( l − 1 ) , ⋯ , h t − K ( l − 1 ) ) h_t^{(l)}f\left(h_t^{(l-1)},h_{t-1}^{(l-1)},\cdots,h_{t-K}^{(l-1)}\right) ht(l)f(ht(l−1),ht−1(l−1),⋯,ht−K(l−1)) 其中 h t ( l ) ∈ R M l h_t^{(l)}\in \R^{M_l} ht(l)∈RMl 表示第 l l l 层神经元在时刻 t t t 的活性值 M l M_l Ml 为第 l l l 层神经元的数量
延时神经网络在时间维度上共享权值以降低参数数量。因此对于序列输入来讲延时神经网络就相当于卷积神经网络。
有外部输入的非线性自回归模型
自回归模型(AR) AutoRegressive Model用一个变量 h t h_t ht 的历史信息来预测自己 h t w 0 ∑ k 1 K w k h t − k ε t h_tw_0\sum\limits_{k1}^Kw_kh_{t-k}\varepsilon_t htw0k1∑Kwkht−kεt
其中 K K K 为超参数 w 0 , w 1 , ⋯ , w K w_0,w_1,\cdots,w_K w0,w1,⋯,wK 为可学习参数 ε t ∼ N ( 0 , σ 2 ) \varepsilon_t\sim \mathcal{N}(0,\sigma^2) εt∼N(0,σ2) 为第 t t t 时刻的噪声 σ 2 \sigma^2 σ2 与时间无关
有外部输入的非线性自回归模型 Nonlinear AutoRegressive with Exogenous Inputs ModelNARX是自回归模型的扩展在每个时刻 t t t 都有一个外部输入 x t x_t xt 产生一个输出 h t h_t ht h t f ( x t , x t − 1 , ⋯ , x t − K x , h t − 1 , h t − 2 , ⋯ , h t − K y ) h_tf\left(x_t,x_{t-1},\cdots,x_{t-K_x},h_{t-1},h_{t-2},\cdots,h_{t-K_y}\right) htf(xt,xt−1,⋯,xt−Kx,ht−1,ht−2,⋯,ht−Ky)
其中 f ( ⋅ ) f(\cdot) f(⋅) 表示非线性函数可以是一个前馈网络 K x K_x Kx K y K_y Ky 为超参数 循环神经网络 Recurrent Neural Network,RNN通过使用带自反馈的神经元能够处理任意长度的时序数据 区别递归神经网络RecNN,Recursive Neural Network 延时器记录神经元的最近几次活性值
给定一个输入序列 x 1 : T ( x 1 , x 2 , ⋯ , x t , ⋯ , x T ) x_{1:T}(x_1,x_2,\cdots,x_t,\cdots,x_T) x1:T(x1,x2,⋯,xt,⋯,xT) h t f ( h t − 1 , x t ) h_tf(h_{t-1},x_t) htf(ht−1,xt) 其中 h 0 0 h_00 h00 f ( ⋅ ) f(\cdot) f(⋅) 为一个非线性函数可以是一个前馈网络
隐藏层的活性值 h t h_t ht 也称为状态或隐状态
循环神经网络具有短期记忆能力相当于存储装置
应用
循环神经网络比前馈神经网络更符合生物神经网络的结构
作为输入-输出映射机器学习模型存储器联想记忆模型
循环神经网络被广泛应用于语音识别、语言模型以及自然语言的生成等任务上
2.1.2 简单循环网路
SRN 令向量 x t ∈ R M x_t\in \R^M xt∈RM 表示在时刻 t t t 时网络的输入 h t ∈ R D h_t\in \R^D ht∈RD 表示隐藏层状态隐藏层神经元活性值 h t h_t ht 不仅和当前时刻的输入 x t x_t xt 相关也和上一时刻的隐藏层状态 h t − 1 h_{t-1} ht−1 相关 Z t U h t − 1 W x t b h t f ( Z t ) Z_tUh_{t-1}Wx_tb\\ h_tf(Z_t) ZtUht−1Wxtbhtf(Zt) SRN是一个非常简单的循环神经网络只有一个隐藏层 在一个两层的前馈神经网络中连接仅存在于相邻的(输出)层与(隐藏)层之间隐藏层结点间是无连接的 SRN增加了隐藏层到隐藏层的反馈连接
SRN是一个既深又短的网络
时间维度深梯度爆炸/消失问题非时间维度短增加模型复杂度
循环神经网络的计算能力
完全连接的循环神经网络输入为 x t x_t xt 输出为 y t y_t yt h t f ( U h t − 1 W x t b ) y ^ t V h t h_tf(Uh_{t-1}Wx_tb)\\ \hat{y}_tVh_t htf(Uht−1Wxtb)y^tVht h h h 为隐状态 f ( ⋅ ) f(\cdot) f(⋅) 为非线性激活函数 U , W , b , V U,W,b,V U,W,b,V 为网络超参数
循环神经网络的通用近似定理 循环神经网络的通用近似定理如果一个完全连接的循环神经网络有足够数量的 s i g m o d sigmod sigmod 型隐藏神经元它可以以任意的准确率去近似任何一个非线性动力系统 动力系统系统状态按一定的规律随时间变化的系统 指用一个函数来描述一个给定的状态空间中的所有点随时间的变化情况 s t g ( s t − 1 , x t ) y t o ( s t ) s_tg(s_{t-1},x_t)\\ y_to(s_t) stg(st−1,xt)yto(st)
其中 s t s_t st 为每个时刻的隐状态 g ( ⋅ ) g(\cdot) g(⋅) 是可测的状态转换函数 x t x_t xt 为某时刻的外部输入 o ( ⋅ ) o(\cdot) o(⋅) 为连续输出函数且对状态空间的紧致性没有限制 理论上循环神经网络可以近似任意的非线性动力系统 前馈神经网络可以近似任何函数 循环神经网络可以模拟任何程序
图灵完备 图灵完备所有的图灵机都可以被一个由使用 s i g m o d sigmod sigmod 型激活函数的神经元构成的全连接循环网络来进行模拟 图灵完备指一种数据操作规则可以实现图灵机的所有功能解决所有可计算问题 2.1.3 应用到机器学习
循环神经网络可以应用到很多不同类型的机器学习任务分为三种模式
序列到类别模式同步的序列到序列模式异步的序列到序列模式
序列到类别模式
主要用于序列数据的分类问题输入为序列输出为类别
如语言的情感分类 序列样本 x 1 : T ( x 1 , ⋯ , x T ) x_{1:T}(x_1,\cdots,x_T) x1:T(x1,⋯,xT) 为一个长度为 T T T 的序列输出为一个类别 y ∈ { 1 , ⋯ , C } y\in \{1,\cdots,C\} y∈{1,⋯,C} 将样本按不同时刻输入到RNN中得到不同时刻的隐状态 h 1 , ⋯ , h T h_1,\cdots,h_T h1,⋯,hT 将 h T h_T hT 作为整个序列的最终表示输入给分类器 g ( ⋅ ) g(\cdot) g(⋅) 进行分类 y ^ g ( h T ) \hat{y}g(h_T) y^g(hT)
其中 g ( ⋅ ) g(\cdot) g(⋅) 可以是简单的线性分类器Logistic或者复杂的分类器多层前馈神经网络 除了将最后时刻的状态作为整个序列的表示外正常模式还可以对整个序列的平均状态作为整个序列的表示平均采样模式 y ^ g ( 1 T ∑ t 1 T ) \hat{y}g\left(\frac{1}{T}\sum\limits_{t1}^T\right) y^g(T1t1∑T)
同步的序列到序列模式 主要用于 序列标注 任务即每一时刻的输入和输出一一对应输入序列和输出序列的长度相同 输入为序列样本 x 1 : T ( x 1 , ⋯ , x T ) x_{1:T}(x_1,\cdots,x_T) x1:T(x1,⋯,xT) 输出为序列 y 1 : T ( y 1 , ⋯ , y T ) y_{1:T}(y_1,\cdots,y_T) y1:T(y1,⋯,yT) 。样本按不同时刻输入到RNN中得到不同时刻的隐状态 h 1 , ⋯ , h T h_1,\cdots,h_T h1,⋯,hT 每个时刻的隐状态 h t h_t ht 代表了当前时刻和历史信息并输入给分类器 g ( ⋅ ) g(\cdot) g(⋅) 得到当前时刻的标签 y ^ t \hat{y}_t y^t y ^ t g ( h t ) , ∀ t ∈ [ 1 , T ] \hat{y}_tg(h_t),\forall t\in [1,T] y^tg(ht),∀t∈[1,T]
应用 词性标注问题中文分词 信息抽取从无结构的文本中抽取结构化的信息形成知识
异步的序列到序列模式 编码器-解码器模型输入序列和输出序列不需要有严格的对应关系也不需要保持长度相同 输入为长度为 T T T 的序列样本 x 1 : T ( x 1 , ⋯ , x T ) x_{1:T}(x_1,\cdots,x_T) x1:T(x1,⋯,xT) 输出为长度为 M M M 的序列 y 1 : M ( y 1 , ⋯ , x M ) y_{1:M}(y_1,\cdots,x_M) y1:M(y1,⋯,xM) 。
一般通过 先编码后半解码 的方式实现
先将样本 x x x 按不同时刻输入到一个循环神经网络编码器中并得到其编码 h T h_T hT 。然后再使用另一个循环神经网络解码器得到输出序列 y ^ 1 : M \hat{y}_{1:M} y^1:M EOS表示输入序列结束 h t f 1 ( h t − 1 , x t ) ∀ t ∈ [ 1 , T ] h T 1 f 2 ( h T t − 1 , y ^ t − 1 ) ∀ t ∈ [ 1 , M ] y ^ t g ( h T t ) ∀ t ∈ [ 1 , M ] \begin{aligned} h_tf_1(h_{t-1},x_t)\quad \forall t\in [1,T]\\ h_{T1}f_2(h_{Tt-1},\hat{y}_{t-1})\quad \forall t\in [1,M]\\ \hat{y}_tg(h_{Tt})\quad \forall t\in [1,M] \end{aligned} htf1(ht−1,xt)hT1f2(hTt−1,y^t−1)y^tg(hTt)∀t∈[1,T]∀t∈[1,M]∀t∈[1,M] g ( ⋅ ) g(\cdot) g(⋅) 为分类器 y ^ t \hat{y}_t y^t 为预测输出解码器通常使用非线性的自回归模型每一时刻输入为上一时刻的预测结果 y ^ t − 1 \hat{y}_{t-1} y^t−1
应用
如机器翻译输入为源语言的单词序列输出为目标语言的单词序列 2.2 学习
参数学习如何解决长程依赖问题
2.2.1 参数学习
循环神经网络的参数可以通过梯度下降的方法来学习
给定一个训练样本 ( x , y ) (x,y) (x,y) 其中输入为序列样本 x 1 : T ( x 1 , ⋯ , x T ) x_{1:T}(x_1,\cdots,x_T) x1:T(x1,⋯,xT) 为长度是 T T T 的输入序列 y 1 : T ( y 1 , ⋯ , y T ) y_{1:T}(y_1,\cdots,y_T) y1:T(y1,⋯,yT) 的标签序列即在每个时刻 t t t都有一个有监督信息 y t y_t yt Z t U h t − 1 W x t b h t f ( Z t ) y ^ t g ( h t ) \begin{aligned} Z_tUh_{t-1}Wx_tb\\ h_tf(Z_t)\\ \hat{y}_tg(h_t) \end{aligned} ZtUht−1Wxtbhtf(Zt)y^tg(ht)
循环神经网络中存在一个递归调用的函数 f ( ⋅ ) f(\cdot) f(⋅)
时刻 t t t 的损失函数为 L t L ( y t , y ^ t ) L ( y t , g ( h t ) ) \mathcal{L}_t\mathcal{L}(y_t,\hat{y}_t)\mathcal{L}(y_t,g(h_t)) LtL(yt,y^t)L(yt,g(ht)) g ( h t ) g(h_t) g(ht) 为第 t t t 时刻的输出 L \mathcal{L} L 为可微分的损失函数如交叉熵 g ( ⋅ ) g(\cdot) g(⋅) 为分类器
整个序列的损失函数为 L ∑ t 1 T L t \mathcal{L}\sum\limits_{t1}^T\mathcal{L}_{t} Lt1∑TLt
关于参数 U U U 的梯度为 ∂ L ∂ U ∑ t 1 T ∂ L t ∂ U \frac{\partial \mathcal{L}}{\partial U}\sum\limits_{t1}^T\frac{\partial \mathcal{L}_t}{\partial U} ∂U∂Lt1∑T∂U∂Lt
随时间反向传播算法 Back Propagation Through Time,BPTT 将循环神经网络看做一个展开的多层前馈网络即每个时刻看做前馈网络的每一层。为了计算方便所有层的参数都是共享的
计算偏导数 ∂ L t ∂ u i j \frac{\partial \mathcal{L}_t}{\partial u_{ij}} ∂uij∂Lt
因为参数 U U U 和隐藏层在每个时刻 k ( 1 ≤ k ≤ t ) k(1\le k\le t) k(1≤k≤t) 的净输入 Z k U h k − 1 W x k b Z_kUh_{k-1}Wx_kb ZkUhk−1Wxkb 有关 x k ∈ R M , h k ∈ R D ⇒ Z k ∈ R D , W ∈ R D × M x_k\in \R^M,h_k\in \R^D\Rightarrow Z^k\in \R^D,W\in \R^{D\times M} xk∈RM,hk∈RD⇒Zk∈RD,W∈RD×M 所以 ∂ L t ∂ u i j ∑ k 1 t ∂ Z k ∂ u i j ∂ L t ∂ Z k \frac{\partial \mathcal{L}_t}{\partial u_{ij}}\sum\limits_{k1}^t\frac{\partial Z_k}{\partial u_{ij}}\frac{\partial \mathcal{L}_t}{\partial Z_k} ∂uij∂Ltk1∑t∂uij∂Zk∂Zk∂Lt U ( u 11 u 12 ⋯ u 1 D u 21 u 22 ⋯ u 2 D ⋮ ⋮ ⋱ ⋮ u D 1 u D 2 ⋯ u D D ) ∈ R D × D h k − 1 ( h ( k − 1 , 1 ) h ( k − 1 , 2 ) ⋮ h ( k − 1 , D ) ) ∈ R D × 1 可见 u i j 仅与 [ h k − 1 ] j 有关 U\left(\begin{matrix} u_{11}u_{12}\cdotsu_{1D}\\ u_{21}u_{22}\cdotsu_{2D}\\ \vdots\vdots\ddots\vdots\\ u_{D1}u_{D_2}\cdotsu_{DD} \end{matrix} \right)\in \R^{D\times D}\\ h_{k-1}\left(\begin{matrix} h_{(k-1,1)}\\ h_{(k-1,2)}\\ \vdots\\ h_{(k-1,D)} \end{matrix}\right)\in \R^{D\times1}\\ 可见 u_{ij} 仅与[h_{k-1}]_j有关 U u11u21⋮uD1u12u22⋮uD2⋯⋯⋱⋯u1Du2D⋮uDD ∈RD×Dhk−1 h(k−1,1)h(k−1,2)⋮h(k−1,D) ∈RD×1可见uij仅与[hk−1]j有关 ∂ z k ∂ u i j ∈ R \frac{\partial z_k}{\partial u_{ij}}\in\R ∂uij∂zk∈R 由于分母布局除了第 i i i 个为 [ h k − 1 ] j [h_{k-1}]_j [hk−1]j 外其余全为0即 误差项计算 δ t , k \delta_{t,k} δt,k 误差项 δ t , k Δ ∂ L t ∂ Z k \delta_{t,k}\overset{\Delta}{}\frac{\partial \mathcal{L}_t}{\partial Z_k} δt,kΔ∂Zk∂Lt 为第 t t t 时刻的损失对第 t t t 时刻的隐藏神经网络的净输入 Z k Z_k Zk 的导数 δ t , k ∂ L t ∂ Z k ∂ h k ∂ Z k ∂ Z k 1 ∂ h k ∂ L t ∂ Z k 1 d i a g ( f ′ ( Z k ) ) U T δ t , k 1 ∈ R D \begin{aligned} \delta_{t,k}\frac{\partial \mathcal{L}_t}{\partial Z_k}\\ \frac{\partial h_k}{\partial Z_k}\frac{\partial Z_{k1}}{\partial h_k}\frac{\partial \mathcal{L}_t}{\partial Z_{k1}}\\ diag(f(Z_k))U^T\delta_{t,k1}\in\R^{D} \end{aligned} δt,k∂Zk∂Lt∂Zk∂hk∂hk∂Zk1∂Zk1∂Ltdiag(f′(Zk))UTδt,k1∈RD
合并计算 ∂ L t ∂ u i j \frac{\partial \mathcal{L}_t}{\partial u_{ij}} ∂uij∂Lt ∂ L t ∂ u i j ∑ k 1 t h k − 1 T d i a g ( f ′ ( Z k ) ) U T δ t , k 1 ∑ k 1 t [ δ t , k ] i [ h k − 1 ] j ∑ k 1 t [ d i a g ( f ′ ( Z k ) ) U T δ t , k 1 ] i [ h k − 1 ] j \begin{aligned} \frac{\partial \mathcal{L}_t}{\partial u_{ij}}\sum\limits_{k1}^th^T_{k-1}diag(f(Z_k))U^T\delta_{t,k1}\\ \sum\limits_{k1}^t[\delta_{t,k}]_i[h_{k-1}]_j\\ \sum\limits_{k1}^t\left[diag(f(Z_k))U^T\delta_{t,k1}\right]_i[h_{k-1}]_j \end{aligned} ∂uij∂Ltk1∑thk−1Tdiag(f′(Zk))UTδt,k1k1∑t[δt,k]i[hk−1]jk1∑t[diag(f′(Zk))UTδt,k1]i[hk−1]j
计算 ∂ L t ∂ U \frac{\partial \mathcal{L}_t}{\partial U} ∂U∂Lt ∂ L t ∂ U ∑ k 1 t δ t , k h k − 1 T \frac{\partial \mathcal{L}_t}{\partial U}\sum\limits_{k1}^t\delta_{t,k}h_{k-1}^T ∂U∂Ltk1∑tδt,khk−1T 参数梯度 ∂ L ∂ U ∑ t 1 T ∑ k 1 t δ t , k h k − 1 T ∑ t 1 T ∑ k 1 t [ d i a g ( f ′ ( Z k ) ) U T δ t , k 1 ] h k − 1 T ∂ L ∂ W ∑ t 1 T ∑ k 1 t δ t , k x k T ∑ t 1 T ∑ k 1 t [ d i a g ( f ′ ( Z k ) ) U T δ t , k 1 ] x k T ∂ L ∂ b ∑ t 1 T ∑ k 1 t δ t , k ∑ t 1 T ∑ k 1 t d i a g ( f ′ ( Z k ) ) U T δ t , k 1 \frac{\partial \mathcal{L}}{\partial U}\sum\limits_{t1}^T\sum\limits_{k1}^t\delta_{t,k}h_{k-1}^T\sum\limits_{t1}^T\sum\limits_{k1}^t[diag(f(Z_k))U^T\delta_{t,k1}]h_{k-1}^T\\ \frac{\partial \mathcal{L}}{\partial W}\sum\limits_{t1}^T\sum\limits_{k1}^t\delta_{t,k}x_{k}^T\sum\limits_{t1}^T\sum\limits_{k1}^t[diag(f(Z_k))U^T\delta_{t,k1}]x_{k}^T\\ \frac{\partial \mathcal{L}}{\partial b}\sum\limits_{t1}^T\sum\limits_{k1}^t\delta_{t,k}\sum\limits_{t1}^T\sum\limits_{k1}^tdiag(f(Z_k))U^T\delta_{t,k1} ∂U∂Lt1∑Tk1∑tδt,khk−1Tt1∑Tk1∑t[diag(f′(Zk))UTδt,k1]hk−1T∂W∂Lt1∑Tk1∑tδt,kxkTt1∑Tk1∑t[diag(f′(Zk))UTδt,k1]xkT∂b∂Lt1∑Tk1∑tδt,kt1∑Tk1∑tdiag(f′(Zk))UTδt,k1
在BPTT算法中参数的梯度需要在一个完整的前向计算和反向计算后才能得到并进行参数更新
实时循环学习算法 Real-Time Recurrent LearningRTRL通过前向传播的方式来计算梯度 假设循环神经网络中第 t t t 时刻的状态为 h t h_{t} ht h t f ( Z t ) f ( U h t − 1 W x t b ) f ( U f ( U h t − 2 W x t b ) W x t b ) \begin{aligned} h_{t}f(Z_{t})f(Uh_{t-1}Wx_{t}b)\\ f(Uf(Uh_{t-2}Wx_{t}b)Wx_{t}b) \end{aligned} htf(Zt)f(Uht−1Wxtb)f(Uf(Uht−2Wxtb)Wxtb)
所以 U U U 与 h t − 1 h_{t-1} ht−1 都与 u i j u_{ij} uij 相关
关于 u i j u_{ij} uij 的偏导数为 ∂ h t ∂ u i j ∂ Z t ∂ u i j ∂ h t ∂ Z t ( ∂ U ∂ u i j h t − 1 ∂ h t − 1 ∂ u i j U T ) ∂ h t ∂ Z t ( I i ( [ h t − 1 ] j ) ∂ h t − 1 ∂ u i j U T ) d i a g ( f ′ ( Z t ) ) ( I i ( [ h t − 1 ] j ) ∂ h t − 1 ∂ u i j U T ) ⊙ ( f ′ ( Z t ) ) T \begin{aligned} \frac{\partial h_{t}}{\partial u_{ij}}\frac{\partial Z_{t}}{\partial u_{ij}}\frac{\partial h_{t}}{\partial Z_{t}}\left(\frac{\partial U}{\partial u_{ij}}h_{t-1}\frac{\partial h_{t-1}}{\partial u_{ij}}U^T\right)\frac{\partial h_{t}}{\partial Z_{t}}\\ \left(I_i([h_{t-1}]_j)\frac{\partial h_{t-1}}{\partial u_{ij}}U^T\right)diag\left(f(Z_{t})\right)\\ \left(I_i([h_{t-1}]_j)\frac{\partial h_{t-1}}{\partial u_{ij}}U^T\right)\odot \left(f(Z_{t})\right)^T \end{aligned} ∂uij∂ht∂uij∂Zt∂Zt∂ht(∂uij∂Uht−1∂uij∂ht−1UT)∂Zt∂ht(Ii([ht−1]j)∂uij∂ht−1UT)diag(f′(Zt))(Ii([ht−1]j)∂uij∂ht−1UT)⊙(f′(Zt))T I i ( x ) I_{i}(x) Ii(x) 除了第 i i i 行为 x x x 外其余都是0
RTRL算法从第一个时刻开始除了计算循环神经网络的隐状态外还需要依次向前计算偏导 h 1 u i j , h 2 u i j , h 3 u i j , ⋯ \frac{h_1}{u_{ij}},\frac{h_2}{u_{ij}},\frac{h_3}{u_{ij}},\cdots uijh1,uijh2,uijh3,⋯
若 t t t 时刻存在监督信息其损失函数为 L t \mathcal{L}_t Lt 可得损失函数关于参数 u i j u_{ij} uij 的偏导数 L t ∂ u i j ∂ h t ∂ u i j ∂ L t ∂ h t \frac{\mathcal{L}_t}{\partial u_{ij}}\frac{\partial h_t}{\partial u_{ij}}\frac{\partial \mathcal{L}_t}{\partial h_t} ∂uijLt∂uij∂ht∂ht∂Lt 这样就可以实时计算损失函数关于参数 U U U 的梯度并更新参数。 W , b W,b W,b 同理
BTPPRTRL
二者都是基于梯度下降的算法分别通过前向模式和反向模式应用链式法则计算梯度
循环神经网络中一般网络输出维度低于输入维度BTPP的计算量会更小但BPTT需要保存所有时刻的中间梯度空间复杂度较高
RTRL算法不需要梯度回传因此非常适合用于在线学习和无限序列的任务中
2.2.2 长程依赖问题
在BPTT算法中将误差项展开 δ t , k d i a g ( f ′ ( Z k ) ) U T δ t , k 1 ∏ τ k t − 1 ( d i a g ( f ′ ( Z τ ) ) U T ) ⏟ γ δ t , t γ t − k δ t , t \begin{aligned} \delta_{t,k}diag(f(Z_k))U^T\delta_{t,k1}\\ \prod\limits_{\tauk}^{t-1}\underbrace{\left(diag(f(Z_\tau))U^T\right)}_{\gamma}\delta_{t,t}\\ \gamma^{t-k}\delta_{t,t} \end{aligned} δt,kdiag(f′(Zk))UTδt,k1τk∏t−1γ (diag(f′(Zτ))UT)δt,tγt−kδt,t 若 γ 1 \gamma1 γ1 当 t − k → ∞ t-k\rightarrow \infty t−k→∞ 时 γ t − k → ∞ \gamma^{t-k}\rightarrow \infty γt−k→∞
当 t − k t-k t−k 间隔比较大时梯度也变得很大造成系统不稳定称为梯度爆炸问题
若 γ 1 \gamma1 γ1 当 t − k → ∞ t-k\rightarrow \infty t−k→∞ 时 γ t − k → 0 \gamma^{t-k}\rightarrow 0 γt−k→0 当 t − k t-k t−k 间隔比较大时梯度将变得很小出现梯度消失问题 在循环神经网络中梯度消失不是指 L t ∂ U \frac{\mathcal{L}_t}{\partial U} ∂ULt 消失而是由于 γ t − k → 0 ⇒ δ t , k → 0 ⇒ ∂ L t ∂ h k → 0 \gamma^{t-k}\rightarrow 0\Rightarrow \delta_{t,k}\rightarrow 0\Rightarrow \frac{\partial \mathcal{L}_t}{\partial h_k}\rightarrow 0 γt−k→0⇒δt,k→0⇒∂hk∂Lt→0 的梯度消失了 L t ∂ U ∑ k 1 t δ t , k h k − 1 T \frac{\mathcal{L}_t}{\partial U}\sum\limits_{k1}^t\delta_{t,k}h_{k-1}^T ∂ULtk1∑tδt,khk−1T L t ∂ U \frac{\mathcal{L}_t}{\partial U} ∂ULt 是求和得到的为0的项不影响 即 参数 U U U 的更新主要靠当前时刻 t t t 和几个相邻状态 k k k 来更新长距离的状态对参数 U U U 是没有影响的
虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系但由于梯度爆炸或梯度消失问题实际上只能学习到短期的依赖关系
简单的神经网络很难建模长距离的依赖关系称为 长程依赖问题
2.3 模型改进
由于循环神经网络使用的非线性激活函数为 L o g i s t i c Logistic Logistic 函数或 T a n h Tanh Tanh 函数其导数值都小于1并且权重矩阵 ∥ U ∥ \Vert U\Vert ∥U∥ 也不会太大因此如果时间间隔 t − k t-k t−k 过大 δ t , k \delta_{t,k} δt,k 会趋于0因而经常出现梯度消失问题
GRU与LSTM深层循环神经网络
2.3.1 改进方案
最直接的方法就是选取合适的参数同时使用非饱和的激活函数尽量使 γ Δ d i a g ( f ′ ( Z τ ) ) U T ≈ 1 \gamma\overset{\Delta}{}diag(f(Z_\tau))U^T\approx1 γΔdiag(f′(Zτ))UT≈1 但过于依赖调参经验限制了模型的广泛使用。有效的方法是改进模型或优化方法来缓解梯度下降或梯度爆炸问题
梯度爆炸
权重衰减通过给参数加 L 1 L_1 L1 或 L 2 L_2 L2 范数的正则化项来限制参数的取值范围从而使得 γ ≤ 1 \gamma\le 1 γ≤1梯度截断当梯度的模大于一定阈值时将它截断为一个较小的数
梯度消失 优化算法下一章内容 改变模型如令 U I UI UI 同时令 ∂ h t ∂ h t − 1 I \frac{\partial h_{t}}{\partial h_{t-1}}I ∂ht−1∂htI 当 γ Δ d i a g ( f ′ ( Z τ ) ) U T 1 \gamma\overset{\Delta}{}diag(f(Z_\tau))U^T1 γΔdiag(f′(Zτ))UT1 时只有 d i a g ( f ′ ( Z τ ) ) diag(f(Z_\tau)) diag(f′(Zτ)) 与 U U U 同时为 I I I 才能保证 γ 1 \gamma1 γ1 d i a g ( f ′ ( Z τ ) ) I ⟺ ∂ h t ∂ h t − 1 f ′ × U f ′ I diag(f(Z_\tau))I\iff \frac{\partial h_t}{\partial h_{t-1}}f\times UfI diag(f′(Zτ))I⟺∂ht−1∂htf′×Uf′I h t f ( Z t ) f ( U h t − 1 W x t b ) h_{t}f(Z_{t})f(Uh_{t-1}Wx_{t}b) htf(Zt)f(Uht−1Wxtb)
模型修改为 h t h t − 1 g ( x t ; θ ) h t − 1 σ ( W x t b ) \begin{aligned} h_th_{t-1}g(x_t;\theta)\\ h_{t-1}\sigma(Wx_tb) \end{aligned} htht−1g(xt;θ)ht−1σ(Wxtb) g ( ⋅ ) g(\cdot) g(⋅) 为非线性函数 θ \theta θ 为参数 h t h_t ht 与 h t − 1 h_{t-1} ht−1 为线性依赖关系且权重系数为 I I I 这样可以消除梯度爆炸或梯度消失问题。
但同时丢失了神经元在反馈边上的非线性激活性质 因此将模型进一步修改为 h t h t − 1 g ( x t , h t − 1 ; θ ) h t − 1 σ ( U h t − 1 W x t b ) \begin{aligned} h_th_{t-1}g(x_t,h_{t-1};\theta)\\ h_{t-1}\sigma(Uh_{t-1}Wx_tb) \end{aligned} htht−1g(xt,ht−1;θ)ht−1σ(Uht−1Wxtb)
类似与残差网络的形式
同样在计算梯度时仍存在梯度爆炸问题
令 Z k U h t − 1 W x t b , ( 1 ≤ k ≤ t ) Z_kUh_{t-1}Wx_tb,(1\le k\le t) ZkUht−1Wxtb,(1≤k≤t) BPTT算法中计算误差项 δ t , k L t ∂ Z k \delta_{t,k}\frac{\mathcal{L}_t}{\partial Z_k} δt,k∂ZkLt 仍可能梯度过大导致梯度爆炸问题
此外还存在 记忆容量 问题随着 h t h_t ht 的不断累计存储会发生饱和线性。假设 g ( ⋅ ) g(\cdot) g(⋅) 为 L o g i s t i c Logistic Logistic 函数随时间 t t t 的增长 h t h_t ht 会变得越来越大从而导致 h h h 变得饱和。随着记忆单元存储的内容越来越多其(“随机”)丢失的信息也越来越多
2.3.2 基于门控的循环神经网络
为改善长程依赖问题使用一种基于 残差网络思想 的模型修改方法但梯度爆炸、记忆容量问题仍存在通过引入门控机制进一步改进模型
门控机制控制信息的累计速度有选择地加入新信息并选择地遗忘之前累计的信息。
这类网络称为 基于门控的循环神经网络 (Gated RNN)
门控机制
在数字电路中门 为一个二值变量 { 0 , 1 } \{0,1\} {0,1} 0 0 0 表示关闭状态不允许任何信息通过 1 1 1 表示开放状态允许所有信息通过
门控循环单元网络
引入一个更新门来控制当前状态需要从历史状态中保留多少信息不经过非线性变换以及需要从候选状态中接收多少新信息 h t z t ⊙ h t − 1 ( 1 − z t ) ⊙ g ( x t , h t − 1 ; θ ) h_tz_t\odot h_{t-1}(1-z_t)\odot g(x_t,h_{t-1};\theta) htzt⊙ht−1(1−zt)⊙g(xt,ht−1;θ) 其中 z t ∈ [ 0 , 1 ] D z_t\in [0,1]^D zt∈[0,1]D 为 更新门 z t σ ( U z h t − 1 W z x t b z ) z_t\sigma(U_zh_{t-1}W_zx_tb_z) ztσ(Uzht−1Wzxtbz) GRU网络用一个门来控制输入和遗忘之间的平衡
当 z t 0 z_t0 zt0 时当前状态 h t h_t ht 和前一时刻的状态 h t − 1 h_{t-1} ht−1 之间为非线性关系当 z t 1 z_t1 zt1 时当前状态 h t h_t ht 和前一时刻的状态 h t − 1 h_{t-1} ht−1 之间为线性关系
在 GRU 中函数 g ( x t , h t − 1 ; θ ) g(x_t,h_{t-1};\theta) g(xt,ht−1;θ) 定义为 h ~ t Δ tanh [ U h ( r t ⊙ h t − 1 ) W h x t b h ] \tilde{h}_t\overset{\Delta}{}\tanh\left[U_h(r_t\odot h_{t-1})W_hx_tb_h\right] h~tΔtanh[Uh(rt⊙ht−1)Whxtbh] tanh ( ) \tanh() tanh() 斜率较大不容易发生梯度消失问题 r t ∈ [ 0 , 1 ] D r_t\in [0,1]^D rt∈[0,1]D 为重置门用于控制 候选状态 h ~ t \tilde{h}_t h~t 的计算是否依赖上一时刻的状态 h t − 1 h_{t-1} ht−1 r t σ ( U r h t − 1 W r x t b r ) r_t\sigma(U_rh_{t-1}W_rx_tb_r) rtσ(Urht−1Wrxtbr) r t 0 r_t0 rt0 候选状态 h ~ t tanh ( W h x t b ) \tilde{h}_t\tanh(W_hx_tb) h~ttanh(Whxtb) 之和当前输入 x t x_t xt 有关和历史状态无关 r t 1 r_t1 rt1 候选状态 h ~ t tanh ( U h h t − 1 W h x t b ) \tilde{h}_t\tanh(U_hh_{t-1}W_hx_tb) h~ttanh(Uhht−1Whxtb) 和当前输入 x t x_t xt 与历史状态 h t − 1 h_{t-1} ht−1 都相关与 简单循环神经网络 一致
综上 h t z t ⊙ h t − 1 ( 1 − z t ) ⊙ h ~ t z t ⊙ h t − 1 ( 1 − z t ) ⊙ tanh [ U h ( r t ⊙ h t − 1 ) W h x t b h ] \begin{aligned} h_tz_t\odot h_{t-1}(1-z_t)\odot \tilde{h}_t\\ z_t\odot h_{t-1}(1-z_t)\odot\tanh\left[U_h(r_t\odot h_{t-1})W_hx_tb_h\right]\\ \end{aligned} htzt⊙ht−1(1−zt)⊙h~tzt⊙ht−1(1−zt)⊙tanh[Uh(rt⊙ht−1)Whxtbh] 其中 z t σ ( U z h t − 1 W z x t b z ) , r t σ ( U r h t − 1 W r x t b r ) ∈ [ 0 , 1 ] z_t\sigma(U_zh_{t-1}W_zx_tb_z),r_t\sigma(U_rh_{t-1}W_rx_tb_r)\in [0,1] ztσ(Uzht−1Wzxtbz),rtσ(Urht−1Wrxtbr)∈[0,1] z t 0 , r t 1 z_t0,r_t1 zt0,rt1 时GRU网络退化为 简单循环网络 h t tanh ( U h h t − 1 W h x t b ) h_t\tanh(U_hh_{t-1}W_hx_tb) httanh(Uhht−1Whxtb) z t 0 , r t 0 z_t0,r_t0 zt0,rt0 时当前状态 h t h_t ht 只和当前输入 x t x_t xt 有关 h t tanh ( W h x t b ) h_{t}\tanh(W_hx_tb) httanh(Whxtb) z t 1 z_t1 zt1 当前状态等于上一时刻状态与当前输入 h t − 1 h_{t-1} ht−1 无关 长短期记忆网络 Long Short-Term Memory Network,LSTM有效解决简单循环神经网络的长程依赖问题 引入新的内部状态 c t ∈ R D c_t\in \R^D ct∈RD 进行线性的循环信息传递记录了到当前时刻为止的历史信息同时非线性地将信息给隐藏层 h t ∈ R D h_t\in \R^D ht∈RD c ~ t tanh ( U c h t − 1 W c x t b c ) c t f t ⊙ c t − 1 i t ⊙ c ~ t h t o t ⊙ tanh ( c t ) \begin{aligned} \tilde{c}_t\tanh(U_ch_{t-1}W_cx_tb_c)\\ c_tf_t\odot c_{t-1}i_t\odot \tilde{c}_t\\ h_to_t\odot \tanh(c_t) \end{aligned} c~tcthttanh(Ucht−1Wcxtbc)ft⊙ct−1it⊙c~tot⊙tanh(ct) 遗忘门 f t ∈ [ 0 , 1 ] D f_t\in[0,1]^D ft∈[0,1]D 控制上一时刻的内部状态 c t − 1 c_{t-1} ct−1 遗忘多少信息 i t σ ( U i h t − 1 W i x t − 1 b i ) i_t\sigma(U_ih_{t-1}W_ix_{t-1}b_i) itσ(Uiht−1Wixt−1bi) 输入门 i t ∈ [ 0 , 1 ] D i_t\in [0,1]^D it∈[0,1]D 控制当前输入状态 c t ~ \tilde{c_t} ct~ 有多少信息保存 f t σ ( U f h t − 1 W f x t − 1 b f ) f_t\sigma(U_fh_{t-1}W_fx_{t-1}b_f) ftσ(Ufht−1Wfxt−1bf) c ~ t \tilde{c}_t c~t 仍和上一时刻的历史信息有关 输出门 o t ∈ [ 0 , 1 ] D o_t\in [0,1]^D ot∈[0,1]D 控制当前时刻的内部状态 c t c_t ct 有多少信息需要输出给外部状态 h t h_t ht o t σ ( U o h t − 1 W o x t − 1 b o ) o_t\sigma(U_oh_{t-1}W_ox_{t-1}b_o) otσ(Uoht−1Woxt−1bo)
LSTM网络中的门是一种软门取值在 ( 0 , 1 ) (0,1) (0,1) 之间表示允许信息以一定比例通过 当 f t 0 , i t 1 f_t0,i_t1 ft0,it1 时记忆单元将历史信息清空并将候选状态 c t ~ \tilde{c_t} ct~ 写入 当 f t 1 , i t 0 f_t1,i_t0 ft1,it0 时记忆单元将上一时刻的外部状态不再写入新的信息
通过LSTM循环单元整个网络可以建立较长距离的时序依赖关系 [ 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 ) \left[\begin{matrix} \tilde{c}_t\\ o_t\\ i_t\\f_t \end{matrix} \right]\left[\begin{matrix} \tanh\\ \sigma\\ \sigma\\ \sigma \end{matrix} \right]\left( W\left[ \begin{matrix} x_t\\ h_{t-1} \end{matrix} \right]b \right)\\ c_tf_t\odot c_{t-1}i_t\odot \tilde{c}_t\\ h_to_t\odot\tanh(c_t) c~totitft tanhσσσ (W[xtht−1]b)ctft⊙ct−1it⊙c~thtot⊙tanh(ct) 其中 x t ∈ R M x_t\in \R^M xt∈RM 为当前时刻的输入 W ∈ R 4 D × ( M D ) W\in\R^{4D\times (MD)} W∈R4D×(MD) b ∈ R 4 D b\in \R^{4D} b∈R4D 为网络参数
记忆
循环神经网络的隐状态 h t h_t ht 存储了历史信息可以看做一种 记忆
在简单循环网络中隐状态每个时刻都会被重写因此可以看做一种 短期记忆 Z t U h t − 1 W x t b h t f ( Z t ) y ^ t g ( h t ) \begin{aligned} Z_tUh_{t-1}Wx_tb\\ h_tf(Z_t)\\ \hat{y}_tg(h_t) \end{aligned} ZtUht−1Wxtbhtf(Zt)y^tg(ht) 长期记忆 可以看作网络参数隐含了从训练数据中学到的经验其更新周期要慢于短期记忆
在LSTM网络中记忆单元 c c c 可以在某个时刻捕捉到某个关键信息并有能力将此关键信息保存一定时间间隔
记忆单元 c c c 中保存的信息的生命周期要长于短期周期 h h h 又远远短于长期记忆称为 长短期记忆
参数更新
在LSTM网络中过小的值会使得遗忘门的值较小意味着前一时刻大部分信息都被丢掉了这样网络很难捕捉长距离的依赖信息并且相邻时间间隔的梯度变得非常小导致梯度消失问题
在LSTM中参数初始值一般设置比较大 b f b_f bf 设为 1 1 1 或 2 2 2
LSTM网络的变体
无遗忘门的LSTM c t c t − 1 i t ⊙ c ~ t c_tc_{t-1}i_t\odot\tilde{c}_t ctct−1it⊙c~t 记忆单元 c c c 会不断增大当输入序列的长度非常大时记忆单元容量会饱和
peephole连接 i t σ ( U i h t − 1 W i x t V i c t − 1 b i ) f t σ ( U f h t − 1 W f x t V f c t − 1 b f ) o t σ ( U o h t − 1 W o x t V o c t − 1 b o ) i_t\sigma(U_ih_{t-1}W_ix_tV_ic_{t-1}b_i)\\ f_t\sigma(U_fh_{t-1}W_fx_tV_fc_{t-1}b_f)\\ o_t\sigma(U_oh_{t-1}W_ox_tV_oc_{t-1}b_o) itσ(Uiht−1WixtVict−1bi)ftσ(Ufht−1WfxtVfct−1bf)otσ(Uoht−1WoxtVoct−1bo) 其中 V i , V f , V o V_i,V_f,V_o Vi,Vf,Vo 为对角矩阵
耦合输入门和遗忘门
LSTM网络中输入门和遗忘门有些互补关系为减小冗余与LSTM计算复杂度将这两个门合并 c t ( 1 − i t ) ⊙ c t − 1 i t ⊙ c ~ t c_t(1-i_t)\odot c_{t-1}i_t\odot\tilde{c}_t ct(1−it)⊙ct−1it⊙c~t
2.4 扩展形式
深层循环神经网络扩展到图结构
2.4.1 深层循环神经网络
RNN在时间维度上长时间间隔的状态之间的路径很长即在时间维度上很深
RNN在同一时刻网络输入到输出之间的路径 x t → y t x_t\rightarrow y_t xt→yt 很短即在非时间维上很短
增加循环网络的深度主要是增加同一时刻网络输入到输出的路径如增加输入到隐状态 x t → h t x_t\rightarrow h_t xt→ht 以及隐状态到输出 h t → y t h_t\rightarrow y_t ht→yt 之间路径的深度
堆叠循环神经网络
(Stacked Recurrent Neural Network)也称循环多层感知器
定义 h t ( l ) h^{(l)}_t ht(l) 为在时刻 t t t 时第 l l l 层的隐状态 h t ( l ) f ( U ( l ) h t − 1 ( l ) W ( l ) h t ( l − 1 ) b ( l ) ) h_t^{(l)}f(U^{(l)}h_{t-1}^{(l)}W^{(l)}h_t^{(l-1)}b^{(l)}) ht(l)f(U(l)ht−1(l)W(l)ht(l−1)b(l))
其中 h t ( 0 ) x t h_t^{(0)}x_t ht(0)xt 双向循环神经网络
一个时刻的输出不但和过去时刻的信息有关也和后续时刻的信息有关
比如给定一个句子其中一个词的词性由它的上下文决定即包含左右两边的信息
(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成输入相同只是信息传递方向不同输出与每个时刻的前向信息与后向信息都有关 h t ( 1 ) f ( U ( 1 ) h t − 1 ( 1 ) W ( 1 ) x t b ( 1 ) ) h t ( 2 ) f ( U ( 2 ) h t 1 ( 2 ) W ( 2 ) x t b ( 2 ) ) h t h t ( 1 ) ⊕ h t ( 2 ) h_t^{(1)}f(U^{(1)}h_{t-1}^{(1)}W^{(1)}x_tb^{(1)})\\ h_t^{(2)}f(U^{(2)}h_{t1}^{(2)}W^{(2)}x_tb^{(2)})\\ h_th^{(1)}_t\oplus h_t^{(2)} ht(1)f(U(1)ht−1(1)W(1)xtb(1))ht(2)f(U(2)ht1(2)W(2)xtb(2))htht(1)⊕ht(2)
2.4.2 扩展到图结构
循环神经网络将每个时刻的隐状态 h t h_t ht 看过一个节点在时间维度上这些节点构成一个链式结构将 消息传递 的思想扩展到树、图结构上
递归神经网络 在循环神经网络的 有向无环图 (树) 上的扩展 对于一个节点 h t h_t ht 接收来自父节点集合 π t \pi_t πt 中所有节点的消息并更新自己状态 h i f ( h π i ) h_if(h_{\pi_i}) hif(hπi) 其中 h π i h_{\pi_i} hπi 表示集合 π i \pi_i πi 中所有节点状态的拼接 f ( ⋅ ) f(\cdot) f(⋅) 是一个和节点位置无关的非线性函数 h 1 σ ( W [ x 1 x 2 ] b ) h 1 σ ( W [ x 3 x 4 ] b ) h 3 σ ( W [ h 1 h 2 ] b ) y g ( W ′ h 3 b ′ ) h_1\sigma\left( W\left[\begin{matrix} x_1\\x_2 \end{matrix} \right]b \right)\\ h_1\sigma\left( W\left[\begin{matrix} x_3\\x_4 \end{matrix} \right]b \right)\\ h_3\sigma\left( W\left[\begin{matrix} h_1\\h_2 \end{matrix} \right]b \right)\\ yg(Wh_3b) h1σ(W[x1x2]b)h1σ(W[x3x4]b)h3σ(W[h1h2]b)yg(W′h3b′) 当递归神经网络退化为线性序列结构等价于简单循环神经网络 应用
自然语言的句法结构 递归神经网络主要用于建模自然句子的语义给定一个句子的语法结构可以使用递归神经网络来按照句法的组合关系来合成一个句子的语义。句子的短语成分又可以是一些子成分即短语的语义都可以由其子成分语义组合而来进而整合成整句的语义 p 1 f ( W [ b c ] ) p 2 f ( W [ a p 1 ] ) p_1f\left(W\left[ \begin{matrix} b\\c \end{matrix} \right]\right)\\ p_2f\left(W\left[ \begin{matrix} a\\p_1 \end{matrix} \right]\right) p1f(W[bc])p2f(W[ap1]) 同样也可以用门控机制改进递归神经网络中的长程依赖问题
树结构的长短期记忆模型
图神经网络
在实际应用中很多数据是图结构的比如知识图谱、社交网络、分子网络等。但前馈网络和反馈网络很难处理图结构的数据 图神经网络是GNN将消息传递的思想扩展到图结构数据上的神经网络 对于任意的图结构 G ( V , ε ) G(\mathcal{V},\varepsilon) G(V,ε) V \mathcal{V} V 表示节点集合 ε \varepsilon ε 表示边集
两个节点间的边表示节点间的依赖关系。节点间的依赖可以有向也可以无向
图中每个节点 v v v 都可以用一组神经元来表示其状态 h ( v ) h^{(v)} h(v) 初始状态为输入特征 x ( v ) x^{(v)} x(v)
每个节点接收来自邻接节点的消息并更新自己的状态 m t ( v ) ∑ u ∈ N ( v ) f ( h t − 1 ( v ) , h t − 1 ( u ) , e ( u , v ) ) h t ( v ) g ( h t − 1 ( v ) , m t ( v ) ) m_t^{(v)}\sum\limits_{u\in \mathcal{N}(v)}f\left(h_{t-1}^{(v)},h_{t-1}^{(u)},e^{(u,v)}\right)\\ h_t^{(v)}g\left(h_{t-1}^{(v)},m_t^{(v)}\right) mt(v)u∈N(v)∑f(ht−1(v),ht−1(u),e(u,v))ht(v)g(ht−1(v),mt(v)) N ( v ) \mathcal{N}(v) N(v) 表示结点 v v v 的邻居 e ( u , v ) e^{(u,v)} e(u,v) 表示从节点 h ( u ) h^{(u)} h(u) 到 h ( v ) h^{(v)} h(v) 方向上的输入特征
上述为同步描述
对于有向图来说使用异步更新方式效率高循环神经网络或递归神经网络在整个图更新 T T T 次后通过一个读出函数得到整个网络的表示 o t g ( { h T ( v ) ∣ v ∈ V } ) o_tg\left(\{h_T^{(v)}\vert v\in \mathcal{V}\}\right) otg({hT(v)∣v∈V})
2.5 应用
生成语言模型
自然语言理解一个句子的可能性合理性 作词机
机器翻译
传统统计学习机器翻译 基于序列到序列的机器翻译 一个RNN用来编码一个RNN用来解码
看图说话 写字 对话系统