小企业网站建设在哪里,合肥包河区最新消息,建设网站虚拟主机,跨境电商个人开店的平台基于 RNN 的语言模型
循环神经网络#xff08;Recurrent Neural Network, RNN#xff09;是一类网络连接中包含环路的 神经网络的总称。 给定一个序列#xff0c;RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度#xff0c;历史状态被循环累积#xff0c;并作为…基于 RNN 的语言模型
循环神经网络Recurrent Neural Network, RNN是一类网络连接中包含环路的 神经网络的总称。 给定一个序列RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度历史状态被循环累积并作为预测未来状态的依据。RNN 可以基于历史规律对未来进行预测。 基于 RNN 的语言模型以词序列作为输入基于被循环编码的上文和当前词来预测下一个词出现的概率。
循环神经网络 RNN
按照推理过程中信号流转的方向神经网络的正向传播范式可分为两大类前馈传播范式和循环传播范式。 采用前馈传播范式的神经网络可以统称为前馈神经网络Feed-forward Neural NetworkFNN 而采用循环传播范式的神经网络被统称为循环神经网络Recurrent Neural Network, RNN
前馈神经网络FNN
计算是逐层向前的没有反馈连接。输出仅依赖于当前输入不考虑历史信息
计算公式 输入层 假设输入向量为 x [ x 1 , x 2 , . . . , x n ] \mathbf{x} [x_1, x_2, ..., x_n] x[x1,x2,...,xn]。 隐藏层如果有多个隐藏层这个过程会重复 每个神经元的加权输入计算为 z w 1 x 1 w 2 x 2 . . . w n x n b z w_1x_1 w_2x_2 ... w_nx_n b zw1x1w2x2...wnxnb其中 w i w_i wi是权重 b b b是偏置项。激活函数 g ( z ) g(z) g(z)被应用于加权输入以产生神经元的输出。常见的激活函数包括 Sigmoid、Tanh、ReLU 等。因此隐藏层的输出 h h h可以表示为 h g ( z ) g ( w 1 x 1 w 2 x 2 . . . w n x n b ) h g(z) g(w_1x_1 w_2x_2 ... w_nx_n b) hg(z)g(w1x1w2x2...wnxnb)。 输出层 输出层的计算与隐藏层类似但是输出层的输出通常不经过非线性激活函数如果是分类问题最后一层可能使用 Softmax 函数。输出 o \mathbf{o} o可以表示为 o f ( V h b ) \mathbf{o} f(Vh b) of(Vhb)其中 V V V是从隐藏层到输出层的权重矩阵 h h h是隐藏层的输出向量 b b b是输出层的偏置项 f f f是输出层的激活函数对于回归问题 f f f可以是恒等函数。
以一个具体的数学表达式来表示一个简单的FNN模型的前向传播过程
假设有一个输入向量 x \mathbf{x} x一个隐藏层其权重矩阵为 W \mathbf{W} W偏置向量为 b \mathbf{b} b激活函数为 g g g以及一个输出层其权重矩阵为 V \mathbf{V} V偏置向量为 b ′ \mathbf{b} b′输出层激活函数为 f f f
计算隐藏层的加权输入和输出 z W x b \mathbf{z} \mathbf{W}\mathbf{x} \mathbf{b} zWxb h g ( z ) \mathbf{h} g(\mathbf{z}) hg(z)计算输出层的加权输入和输出 o V h b ′ \mathbf{o} \mathbf{V}\mathbf{h} \mathbf{b} oVhb′ y f ( o ) \mathbf{y} f(\mathbf{o}) yf(o) 其中 y \mathbf{y} y是网络的最终输出。这个过程是逐层向前的每一层的输出仅依赖于当前层的输入和权重而不依赖于网络中其他层的历史信息。
循环神经网络RNN
RNN 的工作方式
输入序列被逐个元素地串行输入。具有循环连接可以将之前的状态信息传递到后续的计算中。每个时间步的隐状态是前一个隐状态和当前输入的函数。输出不仅依赖于当前输入还依赖于之前的所有输入因为它们被编码在隐状态中。输出是当前隐状态的函数。
基本计算公式 隐藏状态更新公式 h t f ( W h h h t − 1 W x h x t b h ) h_t f(W_{hh}h_{t-1} W_{xh}x_t b_h) htf(Whhht−1Wxhxtbh) h t h_t ht是时间步 t t t的隐藏状态。 h t − 1 h_{t-1} ht−1是时间步 t − 1 t-1 t−1的隐藏状态。 x t x_t xt是时间步 t t t的输入。 W h h W_{hh} Whh是隐藏状态到隐藏状态的权重矩阵。 W x h W_{xh} Wxh是输入到隐藏状态的权重矩阵。 b h b_h bh是隐藏状态的偏置项。 f f f是激活函数常用的激活函数包括tanh、ReLU等。 输出计算公式 y t g ( W h y h t b y ) y_t g(W_{hy}h_t b_y) ytg(Whyhtby) y t y_t yt是时间步 t t t的输出。 W h y W_{hy} Why是隐藏状态到输出的权重矩阵。 b y b_y by是输出的偏置项。 g g g是输出层的激活函数对于分类问题可能是softmax函数对于回归问题可能是线性函数。
梯度衰减
问题描述 在RNN中梯度需要通过时间反向传播每一步的梯度计算都会涉及到前一步的权重。如果权重的导数梯度是小于1的正数那么随着时间步的增加梯度会指数级减少。这意味着对于较早时间步的输入网络很难学习到它们对最终输出的影响。
解决方案
使用ReLU激活函数相比于tanh或sigmoidReLU激活函数可以减轻梯度衰减问题因为它的导数在正区间内是常数。权重初始化使用如Glorot初始化Xavier初始化或He初始化等方法可以更好地控制梯度的大小。梯度裁剪Gradient Clipping通过限制梯度的大小来防止梯度爆炸间接缓解梯度衰减。使用LSTM或GRU这两种RNN的变体通过引入门控机制来减少梯度衰减的影响。
梯度爆炸
问题描述 与梯度衰减相反梯度爆炸是指在反向传播过程中梯度值随着时间步的增加而变得非常大导致权重更新过大从而使学习过程变得不稳定。
解决方案
梯度裁剪在每次更新前将梯度限制在一个合理的范围内以防止梯度爆炸。使用LSTM或GRU这两种结构通过门控机制来控制信息流从而减少梯度爆炸的风险。正则化如L1、L2正则化可以限制权重的大小间接控制梯度的大小。使用批量归一化Batch Normalization在RNN中应用批量归一化可以帮助稳定梯度。
其他注意事项
截断反向传播Truncated Backpropagation Through Time, TBPTT这种方法不是在整个序列上进行反向传播而是在序列的一个小片段上进行可以减少计算量并减轻梯度问题。调整学习率使用自适应学习率算法如Adam可以帮助更好地控制学习过程。
基于循环神经网络RNN的语言模型
基于循环神经网络RNN的语言模型是一种序列生成模型它能够根据当前词和之前的隐藏状态来预测下一个词的概率。 条件概率 给定词序列 { w 1 , w 2 , … , w N } \{w_1, w_2, \ldots, w_N\} {w1,w2,…,wN}RNN语言模型预测下一个词 w i 1 w_{i1} wi1 出现的条件概率是 P ( w i 1 ∣ w 1 : i ) P ( w i 1 ∣ w i , h i − 1 ) P(w_{i1} | w_1:i) P(w_{i1} | w_i, h_{i-1}) P(wi1∣w1:i)P(wi1∣wi,hi−1)。 序列的整体概率 整个词序列 { w 1 , w 2 , … , w N } \{w_1, w_2, \ldots, w_N\} {w1,w2,…,wN} 出现的概率可以表示为 P ( w 1 : N ) ∏ i 1 N − 1 P ( w i 1 ∣ w i , h i − 1 ) P(w_1:N) \prod_{i1}^{N-1} P(w_{i1} | w_i, h_{i-1}) P(w1:N)∏i1N−1P(wi1∣wi,hi−1) 输出向量 RNN的输出是一个向量其中每一维代表词典中对应词的概率。如果词典 D D D 中有 ∣ D ∣ |D| ∣D∣ 个词那么输出向量 o i o_i oi 可以表示为 o i { o i [ w ^ d ] } d 1 ∣ D ∣ o_i \{ o_i[\hat{w}^d] \}_{d1}^{|D|} oi{oi[w^d]}d1∣D∣其中 o i [ w ^ d ] o_i[\hat{w}^d] oi[w^d] 表示词典中的词 w ^ d \hat{w}^d w^d 出现的概率。 序列的整体概率计算 利用输出向量整个序列的概率可以表示为 P ( w 1 : N ) ∏ i 1 N o i [ w i 1 ] P(w_1:N) \prod_{i1}^{N} o_i[w_{i1}] P(w1:N)∏i1Noi[wi1]这里 o i [ w i 1 ] o_i[w_{i1}] oi[wi1] 是在第 i i i 步输出中词 w i 1 w_{i1} wi1 的概率。
损失函数和训练 交叉熵损失 使用交叉熵损失函数来衡量模型预测的概率分布与真实词的概率分布之间的差异 l C E ( o i ) − ∑ d 1 ∣ D ∣ I ( w ^ d w i 1 ) log o i [ w ^ d ] l_{CE}(o_i) -\sum_{d1}^{|D|} I(\hat{w}_d w_{i1}) \log o_i[\hat{w}_d] lCE(oi)−∑d1∣D∣I(w^dwi1)logoi[w^d]其中 I ( ⋅ ) I(\cdot) I(⋅) 是指示函数当 w ^ d w i 1 \hat{w}_d w_{i1} w^dwi1 时为1否则为0。 总损失 训练集 S S S 的总损失是所有样本损失的平均值 L ( S , W I , W H , W O ) 1 ∣ S ∣ ∑ s 1 ∣ S ∣ ∑ i 1 N l C E ( o i , s ) L(S, W_I, W_H, W_O) \frac{1}{|S|} \sum_{s1}^{|S|} \sum_{i1}^{N} l_{CE}(o_{i,s}) L(S,WI,WH,WO)∣S∣1∑s1∣S∣∑i1NlCE(oi,s)这里 o i , s o_{i,s} oi,s 是第 s s s 个样本在第 i i i 步的输出。
文本生成和训练策略 自回归Autoregressive 在文本生成中模型通过迭代预测下一个词来生成文本。 (1) 错误级联放大 选用模型自己生成的词作为输入可能会有错误这样的错误循环输入将会不断的放大错误导致模型不能很好拟合训练集 (2) 串行计算效率低 因为下一个要预测的词依赖上一次的预测每次预测之间是串行的难以进行并行加速。 Teacher Forcing 在训练过程中使用真实的下一个词作为输入而不是模型预测的词以提高训练效率和效果。在 TeacherForcing 中每轮都仅将输出结果与“标准答案”Ground Truth进行拼接作为下一轮的输入。 曝光偏差Exposure Bias 由于训练和推理过程中的差异导致的偏差。Teacher Forcing 的训练方式将导致曝光偏差Exposure Bias的问题。曝光偏差是指 Teacher Forcing 训练模型的过程和模型在推理过程存在差异TeacherForcing 在训练中模型将依赖于“标准答案”进行下一次的预测但是在推理预测中模型“自回归”的产生文本没有“标准答案”可参考。 Scheduled Sampling 一种减少曝光偏差的方法通过在训练过程中逐渐引入模型自己生成的词。 循序渐进的使用一小部分模型自己生成的词代替“标准答案”在训练过程中对推理中无“标准答案”的情况进行预演。
RNN语言模型通过这些机制来学习序列数据的模式并能够用于文本生成等任务。然而由于RNN的循环迭代本质它在处理长序列时训练较慢且不易进行并行计算。因此后续的研究中出现了基于Transformer的模型它能够更有效地处理这些问题。