RNN->LSTM->BiLSTM神经网络结构

最近在学习《自然语言处理 基于预训练模型的方法》,打打公式吧。

RNN(Recurrent Neural Network)

h t = t a n h ( W x h x t + b x h + W h h h t − 1 + b h h ) h_t = tanh(W^{xh}x_{t}+b^{xh}+W^{hh}h_{t-1}+b^{hh}) ht=tanh(Wxhxt+bxh+Whhht1+bhh)
y = s o f t m a x ( W h y h n + b h y ) y=softmax(W^{hy}h_{n}+b^{hy}) y=softmax(Whyhn+bhy)
在这里插入图片描述
如果是文本分类问题,可以只在最后进行输出结果,如下图所示:
在这里插入图片描述
  除此之外,还可以在每一时刻进行输出,可以用来处理序列标注问题,比如词性标注,NER,甚至分词。
在这里插入图片描述

LSTM(Long Short-Term Memory )

  由于在普通的RNN结构中,信息是通过隐含层逐层进行传递的,这样每传递一层就会导致信息的损失,由此出现了长短时记忆网络。

  为了不只是相邻两层有消息传递,有:

u t = t a n h ( W x h x t + b x h + W h h h t − 1 + b h h ) u_t = tanh(W^{xh}x_{t}+b^{xh}+W^{hh}h_{t-1}+b^{hh}) ut=tanh(Wxhxt+bxh+Whhht1+bhh)
h t = h t − 1 + u t h_t=h_{t-1}+u_t ht=ht1+ut

即: h t = h t − 1 + u t = h t − 2 + u t − 1 + u t = . . . . = h 1 + u 1 + . . . + u t h_t=h_{t-1}+u_t=h_{t-2}+u_{t-1}+u_{t}=....=h_1+u_1+...+u_t ht=ht1+ut=ht2+ut1+ut=....=h1+u1+...+ut

这样保证了对于 k < t k<t k<t,将 h k h_k hkand h t h_t ht连接了起来。

考虑到二者不应该知识线性的加权,所以引入了权重:

f t = σ ( W f , x h x t + b f , x h + W f , h h h t − 1 + b f , h h ) f_t = \sigma(W^{f,xh}x_{t}+b^{f,xh}+W^{f,hh}h_{t-1}+b^{f,hh}) ft=σ(Wf,xhxt+bf,xh+Wf,hhht1+bf,hh)
h t = f t ⊗ h t − 1 + ( 1 − f t ) ⊗ u t h_t = f_t\otimes h_{t-1} + (1-f_t) \otimes u_t ht=ftht1+(1ft)ut

  其中, σ \sigma σ是sigmoid函数,通过该函数得到0-1之间的值,可以看作是权重。当值过小时,可以看作是将 h t h_t ht的知识给遗忘了,因此 f t f_t ft也被称作是遗忘门。同时发现,两项的系数成反比,对于有时候是正比的情况下,所以需要改进 u t u_t ut的权重系数。

有:
i t = σ ( W i , x h x t + b i , x h + W i , h h h t − 1 + b i , h h ) i_t = \sigma(W^{i,xh}x_{t}+b^{i,xh}+W^{i,hh}h_{t-1}+b^{i,hh}) it=σ(Wi,xhxt+bi,xh+Wi,hhht1+bi,hh)
h t = f t ⊗ h t − 1 + i t ⊗ u t h_t = f_t\otimes h_{t-1} + i_t \otimes u_t ht=ftht1+itut

  其中 i t i_t it用来控制输入变量 u t u_t ut的贡献,被称作是输入门

有了遗忘门控制过去时刻的贡献,输入门控制现在输入变量的贡献,下面引进输出门控制输出。

o t = σ ( W o , x h x t + b o , x h + W o , h h h t − 1 + b o , h h ) o_t = \sigma(W^{o,xh} x_{t}+b^{o,xh}+W^{o,hh}h_{t-1}+b^{o,hh}) ot=σ(Wo,xhxt+bo,xh+Wo,hhht1+bo,hh)
c t = f t ⊗ c t − 1 + i t ⊗ u t c_t = f_t \otimes c_{t-1} + i_t \otimes u_t ct=ftct1+itut
h t = o t ⊗ t a n h ( c t ) h_t = o_t \otimes tanh(c_t) ht=ottanh(ct)

其中,c-t被称为记忆细胞,即存储了截至到当前时刻的2所有重要信息。

BiLSTM

  我们发现了,无论是传统的RNN还是LSTM,都是从前往后传递信息,这在很多任务中都有局限性,比如词性标注任务,一个词的词性不止和前面的词有关还和后面的词有关。

  为了解决该问题,设计出前向和方向的两条LSTM网络,被称为双向LSTM,也叫BiLSTM。其思想是将同一个输入序列分别接入向前和先后的两个LSTM中,然后将两个网络的隐含层连在一起,共同接入到输出层进行预测。
在这里插入图片描述另外一种对RNN改进的方式是通过将多个网络堆叠起来,形成stacked Rnn.

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
WOA-BiLSTM(Whale Optimization Algorithm-Bidirectional Long Short-Term Memory)是一种基于鲸鱼优化算法和双向长短期记忆神经网络的优化方法,用于解决机器学习中的问题。 首先,让我们了解一下双向长短期记忆神经网络(BiLSTM)。LSTM是一种特殊的循环神经网络RNN),它通过引入门控机制来解决传统RNN中的梯度消失和梯度爆炸问题。BiLSTM则是在LSTM的基础上增加了一个反向的LSTM层,可以同时考虑过去和未来的上下文信息。 而WOA(Whale Optimization Algorithm)是一种基于鲸鱼行为的优化算法,模拟了鲸鱼群体中的搜索和迁徙行为。它通过模拟鲸鱼的搜索过程来寻找最优解。 将WOA和BiLSTM结合起来,就得到了WOA-BiLSTM算法。该算法通过使用WOA算法来优化BiLSTM网络的参数,以提高其性能和泛化能力。具体而言,WOA-BiLSTM算法使用WOA算法来搜索BiLSTM网络中的权重和偏置,并通过迭代更新来逐步优化网络。 在Python中实现WOA-BiLSTM算法,你可以使用深度学习框架如TensorFlow或PyTorch来构建和训练BiLSTM网络,并结合WOA算法来优化网络参数。具体实现步骤如下: 1. 定义BiLSTM网络结构:使用TensorFlow或PyTorch构建一个包含双向LSTM层的神经网络模型。 2. 定义损失函数:选择适当的损失函数来度量模型的性能,例如均方误差(MSE)或交叉熵损失。 3. 定义WOA算法:实现WOA算法的搜索和迁徙过程,包括初始化鲸鱼位置、计算适应度函数、更新鲸鱼位置等步骤。 4. 结合WOA和BiLSTM:在每次迭代中,使用WOA算法来搜索并更新BiLSTM网络的权重和偏置。 5. 训练和优化:使用训练数据集对WOA-BiLSTM模型进行训练,并根据验证集的性能来调整模型参数。 6. 测试和评估:使用测试数据集对训练好的WOA-BiLSTM模型进行测试,并评估其性能指标,如准确率、精确率、召回率等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Weiyaner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值