双向lstm结构图(bilstm模型结构)

:暂无数据 2026-05-24 23:00:02 1

双向lstm结构图(bilstm模型结构)

大家好,双向lstm结构图相信很多的网友都不是很明白,包括bilstm模型结构也是一样,不过没有关系,接下来就来为大家分享关于双向lstm结构图和bilstm模型结构的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

bilstm模型结构

biLSTM即双向LSTM,它是由两个单独的两个lstm组合合成,为了更直观的理解运猛,我画了下面的图

组合起来就是下面的图

注意上图只是一层的bilstm,如果是多层的bilstm,则是两个不同方向的多悄闭层lstm按照上图拼接在一起

最终的每个时间步i输出hi = 表示拼接操作,即如果lstm的隐层维度是50,那么bilstm的维度为100

语言模型介绍

语言模型(LM)是很多自然语言处理(NLP)任务的基础。语言模型是指对于语言序列 ,计算该序列的概率,即 ,这里的语言序列是有序的语言序列,后续计算也会体现这一点。一般我们认为一个正常的语句,它出现的概率是大于非正常的语句。比如有如下三个语句:

那么应当会有 和 ,这是因为 正常词序的语句会比乱序的语句更常见,正常含义的语句会比无意义的语句更常见

计算一个语言序列的概率,我们可以使用链式法则去计算

但该计算方法有两个缺陷:

我们能够建立语言模型了,一般的我们在训练集上得到语言模型的参数,在测试集里面来测试模型的性能,那么如何去衡量一个语言模型的好坏呢?比较两个模型A,B好坏,一种外在的评价就是将AB放入具体的任务中,然后分别得到模型的准确率,这种方式当然是最好的方式,但这种方式的缺点是过于耗时,在实际情况中往往需要花费过多时间才能得到结果。另一种方式是使用下面要介绍的困惑度,但注意困惑度并不是上述外在评价的一个好的近似,所以一般使用在试点试验上,所谓试点试验团薯猜就是一个小规模的初步研究,以评估一些性能。
困惑度的基本评价方式是对测试集赋予高概率值的模型更好,一个句子W的困惑度(PP)定义如下:

S代表sentence,N是句子长度, 是第i个词的概率。第一个词就是 ,而 是《s》,表示句子的起始,是个占位符,事实上,结尾应该也有一个占位符,但这里好像没有写。

这个式子可以这样理解,PPL越小, 则越大,一句我们期望的sentence出现的概率就越高。

为了解决参数空间过大的问题。人们引入了马尔科夫假设:随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关。

如果一个词的出现与它周围的词是独立的,那么我们就称之为unigram,也就是一元语言模型:

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram:

一般来说,N元模型就是假设当前词的出现概率只与它前面的n-1个词有关。而这些概率参数都是可以通过大规模语料库来计算:

在实践中用的最多的就是bigram和trigram了,高于四元的用的非常少,由于训练它须要更庞大的语料,并且数据稀疏严重,时间复杂度高,精度却提高的不多。

那在实际计算中,我们怎么计算一塌型个句子的概率呢?
以一元模型为例,在一元语言模型中,我们的句子概率定义为:

那么这里面的每个因子 该怎么计算呢?
这里使用频率统计的办法,由于一元模型认为每个词是相互独立的,所以统计的时候,只需要统计语料库中每个词出现的频率作为概率就可以了。

这里的计算可以认为是根据极大似然估计得到的,假如词典里有V个词,每个词对应一个概率,考虑到所有词出现的概率和是1,那就有V-1个参数手稿 。假设词典表中第i词在语料库中出现的数目为 ,并且 那么根据极大似然估计就有:


取对数之后:

这个可以用多元函数极值去求解。不过这样进行多元极值求解不容易计算,如果用条件极值会容易计算,用拉格朗日乘数法进行求解。

求解得:

有了每个词的出现概率,带入到式子 中就可以计算出对应句子的概率。

对于二元模型或者多元模型,其计算方式有些区别,因为假设有些不同,假如我们需要计算 的值,那么统计频率的方式是:

那对于bigram中的第一个词的概率,由于他之前没有词汇,那这时候我们一般会认为句子的开头和结尾分别有一个抽象符号《s》和《/s》,那么句子就变成了《s》, ,《/s》,因此 式可以变为:

其余的n-gram模型也是类似的计算方法,有的地方说的是不要用添加开始和结尾的符号,直接用unigram和bigram的方法去计算 即可,这里暂时以斯坦福的课程为准吧,但是应该对最终影响有限,毕竟本质上是在做最大似然估计。

在上述 计算过程中,由于分子是词对出现的次数,那很有可能在语料库中没有出现这样的词对,这时计算结果就是0,同时也会导致句子的出现概率也为0,那这样有些不合理,即使写错了字,也应当有一定概率出现,所以在计算 式的时候要做一下平滑处理

其原理是保证每一个词对(对于bigram而言)都会出现一次,因此, 式可以修改为:

其中V是词的字典数目,这里分母加1是为了保证概率和为1,即 ,通俗理解为,我们往语料库中加入了 这V个词对,因此其分母语料库统计的数目也要加V。

Add-K平滑就是保证每个词对都出现K次,因此, 式可以修改为:

这里分母加KV和之前的模式是一样的。

这个估计是一个很重要的平滑方式,其原理就是对于没有看见的事件,我们不能认为它的发生概率就是零,因此我们从概率的总量(Probability mass)中,分配一个很小的比例给予这些没有看见的事件,这样一来,看见的那些事件的概率总和就要小于1,因此,需要将所有看见的事件概率小一点。至于小多少,要根据“越是不可信的统计折扣越多”的方法进行。
***隐藏网址***

神经网络语言模型就是指利用神经网络进行语言建模,当前的一些预训练语言模型就是利用神经网络来建模的。

前向神经网络,又被称为全连接(Fully Connected Neural Network)神经网络,是最早被引入到语言建模中的神经网络结构。前向神经网络一般可表示为:

这里的 是一个residual connect的含义。
其中 ,是权重矩阵, 是输出层的节点数,在语言模型中等于词典的大小, 等于隐藏层大小,为用户自定义。 是输入的特征维度。

当我们用上述前馈神经网络来描述语言模型的时候,我们假设要预测词 ,那我们通常用 这前n-1个词作为输入。一般词的输入先要做一层embedding的映射,将每个词转为一个低维度的向量,这就需要一个look up table,假设字典数目是V,而embedding的长度是m,那么这个look up table就是一个 的矩阵。输入了n-1个词,经过embedding之后,就有n-1个m维度向量,我们将它们拼接起来作为前馈神经网络的输入,这时候前馈神经网络的输入维度 ,最终输出的 作为预测 的得分,然后再接一层softmax得出概率,计算交叉熵损失函数即可训练模型。
下图中的每个子单元是在对语句中的某一个词进行预测。

循环神经网络(Recurrent Neural Networks)是另一种可以用来进行语言模型建模的网络结构,之前提到的前向神经网络语言模型是以前n-1个词作为输入来预测当前词,这种处理方式是解决不了时序问题的,在预测当前词的时候,无法很好的依赖于上下文(主要是上文),而循环神经网络则可以解决上下文依赖问题。

循环神经网络引入了一个中间隐藏层 ,该隐藏层的状态可以沿着时间将信息传给下一次预测。直观来说,就是将第 时刻的隐藏层的状态 作为第 时刻模型预测或者训练的一个输入,这里的时刻也可以叫做时间步。
下图是一张对RNN进行时间铺开的展示图,每个时间单元都将自身的隐藏层作为下一个时间单元的输入,这张图上面并没有画出第一个时间单元接受的隐藏层的输入,事实上,第一个单元也接受了输入,一般是一个初始化的0向量。

上述的结构依然有局限性,就是它只能利用近期的信息去编码我们需要的格式,如果时间步的跨度过大,原先的信息会在传递中逐渐丢失。
假设现在有这样一个任务,考虑到下面这句话“I grew up in France… I speak fluent French.”,现在需要语言模型通过现有以前的文字信息预测该句话的最后一个字。通过以前文字语境可以预测出最后一个字是某种语言,但是要猜测出French,要根据之前的France语境。因为这次的有用信息与需要进行处理信息的地方之间的距离较远,这样容易导致RNN不能学习到有用的信息,最终推导的任务可能失败。

LSTMs也是循环神经网络的一种,它利用了cell状态将长期依赖的信息保留了下来,它也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs的结构如下图所示。

LSTM的核心是细胞状态,用贯穿计算单元的水平线表示。这个状态区别于隐藏层的状态,它只是很少的参与信息交换,所以可以保存较远的时间步的信息。我们可以从下图看到,细胞状态在一个时间步里面只参与三次信息交互:两次接受信息,一次输出信息参与计算。这三个操作被称为门,分别称为忘记门、输入门和输出门。

最后回到语言模型上面,使用RNN进行语言模型建模,那么输入的 就是经过embedding的结果,并且最后对于每个 的输出上再接一层全连接层,输出词典数目的维度,最后再加一层softmax就可以得到下一个词输出的概率

上述的都是单向语言模型,但是实际上,我们在t时刻的词的概率不只会依赖于之前的词,有时候还会和后面的词有关,比如说there is a tree,这里的is就是单数形式,依赖于后面的a tree来确定。所以就有了两个单向的LSTM(并不是Bi-LSTM)去更好的进行语言建模。

给定N个token的序列 ,前向语言模型的表示方法为:

同样的,后向语言模型的表示方法为:

前向模型和后向模型都是用同样的方式去预测下一个词,只是方向不同,而且ELMo不光是两个反方向的LSTM模型叠加,还可以是多层的两个反方向LSTM叠加,因此会有多个细胞状态和隐藏层,但其实和单层的是一样的,只是上层的LSTM接受的输入是下层的隐藏层(也可以加上残差连接),两个不同方向的LSTM模型是互不干扰的,他们的联系就只有输入的token的embedding是共用的,以及最后的全连接加softmax是通用的。ELMo训练的时候,比如预测词 ,输入 左边的词汇,经过正向LSTM得到一个 ,同时输入 右边的词汇,经过反向LSTM也得到了一个 ,然后将这两个hidden拼接到一起之后接一个全连接softmax,就可以得到当前输出为词汇表中各词的概率了,同前文中描述的一样,交叉熵损失函数就是当前预测词为实际词的概率,也就是我们要求的语言模型的概率。
最后的极大似然估计则为:

其中token 的embedding表示的参数 以及softmax 层(全连接加softmax转成字典的向量维度)参数 前后向是通用的,LSTM 的参数按照方向取不同值。

传统的语言模型是从左到右或者从右到左的利用上文或者下文去预测当前词,但实际上,当前词出现不只是单单依靠上文或者下文,其实应该是同时依赖于上下文,在ELMo里面,就是用了双向语言模型的结构,但是这种双向语言模型只是两个独立的前向和后向模型合并起来的,并不是一种完美的结合上下文。因此谷歌在Bidirectional Encoder Representation from Transformers一文中,提出了一种Masked Language Model,该语言模型结构是在一个句子中随机挑选一部分词汇,用一个MASK标记替换掉该词汇,然后在模型训练的时候去预测该词汇,完成训练过程
Masked的具体过程是随机选择语料中15%的token,然后再将这些token以80%的概率用的表征结果经过一层全连接softmax,然后去判断这个句子对是随机生成的还是真实的。最后,这两个损失值是直接相加作为最终损失值。
参考链接:
Statistical language model 统计语言模型
深入理解语言模型 Language Model
从经典结构到改进方法,神经网络语言模型综述
深入浅出讲解语言模型
神经网络语言建模系列之一:基础模型

几种常见的循环神经网络结构RNN、LSTM、GRU

传统文本处理任务的方法中一般将TF-IDF向量作为特征输入。显而易见,这样的表示实际上丢失了输入的文本序列中每个单词的顺序。在神经网络的建模过程中,一般的前馈神经网络,如卷积神经网络,通常接受一个定长的向量作为输入。卷积神经网络对文本数据建模时,输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式将原先的输入转换成一个固定长度的向量表示,这样做可以捕捉到原文本中的一些局部特征,但是两个单词之间的长距离依赖关系还是很难被学习到。
循环神经网络却能很好地处理文本数据变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。
其网络结构如下图所示:

由图可见,t是时刻,x是输入层,s是隐藏层,o是输出层,矩阵W就是隐藏层上一次的值作为这一次的输入的权重。

如果反复把式 2 带入到式 1,将得到:

其中f和g为激活函数,U为输入层到隐含层的权重矩阵,W为隐含层从上一时刻到下一时刻状态转移的权重矩阵。在文本分类任务中,f可以选取Tanh函数或者ReLU函数,g可以采用Softmax函数。

通过最小化损失误差(即输出的y与真实类别之间的距离),我们可以不断训练网络,使得得到的循环神经网络可以准确地预测文本所属的类别,达到分类目的。相比于卷积神经网络等前馈神经网络,循环神经网络由于具备对序列顺序信息的刻画能力,往往能得到更准确的结果。

RNN的训练算法为:BPTT
BPTT的基本原理和BP算法是一样的,同样是三步:
1.前向计算每个神经元的输出值;
2.反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;
3.计算每个权重的梯度。
最后再用随机梯度下降算法更新权重。
***隐藏网址***
最后由链式法则得到下面以雅可比矩阵来表达的每个权重的梯度:

由于预测的误差是沿着神经网络的每一层反向传播的,因此当雅克比矩阵的最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸;反之,若雅克比矩阵的最大特征值小于1,梯度的大小会呈指数缩小,产生梯度消失。对于普通的前馈网络来说,梯度消失意味着无法通过加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习的作用。 这使得循环神经网络模型很难学习到输入序列中的长距离依赖关系

***隐藏网址***

梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比收缩。而梯度消失问题相对比较棘手,需要对模型本身进行改进。深度残差网络是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象,从而使得我们能够学习到更深层的网络表示;而对于循环神经网络来说,长短时记忆模型及其变种门控循环单元等模型通过加入门控机制,很大程度上弥补了梯度消失所带来的损失。

LSTM的网络机构图如下所示:

与传统的循环神经网络相比,LSTM仍然是基于xt和ht−1来计算ht,只不过对内部的结构进行了更加精心的设计,加入了输入门it 、遗忘门ft以及输出门ot三个门和一个内部记忆单元ct。输入门控制当前计算的新状态以多大程度更新到记忆单元中;遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉;输出门控制当前的输出有多大程度上取决于当前的记忆单元。

在经典的LSTM模型中,第t层的更新计算公式为

其中it是通过输入xt和上一步的隐含层输出ht−1进行线性变换,再经过激活函数σ得到的。输入门it的结果是向量,其中每个元素是0到1之间的实数,用于控制各维度流过阀门的信息量;Wi 、Ui两个矩阵和向量bi为输入门的参数,是在训练过程中需要学习得到的。遗忘门ft和输出门ot的计算方式与输入门类似,它们有各自的参数W、U和b。与传统的循环神经网络不同的是,从上一个记忆单元的状态ct−1到当前的状态ct的转移不一定完全取决于激活函数计算得到的状态,还由输入门和遗忘门来共同控制。

在一个训练好的网络中,当输入的序列中没有重要信息时,LSTM的遗忘门的值接近于1,输入门的值接近于0,此时过去的记忆会被保存,从而实现了长期记忆功能;当输入的序列中出现了重要的信息时,LSTM应当把其存入记忆中,此时其输入门的值会接近于1;当输入的序列中出现了重要信息,且该信息意味着之前的记忆不再重要时,输入门的值接近1,而遗忘门的值接近于0,这样旧的记忆被遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。

GRU是在LSTM上进行简化而得到的,GRU的网络结构如下所示:

Zt代表更新门,更新门的作用类似于LSTM中的遗忘门和输入门,它能决定要丢弃哪些信息和要添加哪些新信息。
Rt代表重置门,重置门用于决定丢弃先前信息的程度。

要注意的是,h只是一个变量,因此在每个时刻,包括最后的线性组合,h都是在用以前的自己和当前的备选答案更新自己。举例来说,这一个变量好比一杯酒,每次我们要把一部分酒倒出去,并把倒出去的酒和新加入的原料混合,然后在倒回来,这里的reset控制的就是要倒出去的,并且混合好之后再倒回来的酒的比例,而update控制的则是用多大的比例混合新原料和倒出来的之前调制好的酒。同理,也可以以此理解LSTM,LSTM的遗忘门功能上和reset相似,而输入门与update相似,不同之处在于LSTM还控制了当前状态的exposure,也就是输出门的功能,这是GRU所没有的。

1.百面机器学习
***隐藏网址***
***隐藏网址***

lstm和gru结构的再理解

单片机,单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/O)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等优点。主要是增强 “ 控制 ” 能力,满足实时控制(就是快速反应)方面的需要。因此,它在硬件结构、指令 系统、I/O端口、功率消耗及可靠性等方面均有其独特之处, 更专业的解答可联系意法半导体,产品服务:意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗…

OK,关于双向lstm结构图和bilstm模型结构的内容到此结束了,希望对大家有所帮助。

双向lstm结构图(bilstm模型结构)

本文编辑:admin

更多文章:


blast premier春季赛(csgo战队vitality有谁)

blast premier春季赛(csgo战队vitality有谁)

“blast premier春季赛”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看blast premier春季赛(csgo战队vitality有谁)!

2026年9月7日 21:50

send out用法及例句(send out是什么意思)

send out用法及例句(send out是什么意思)

各位老铁们好,相信很多人对send out用法及例句都不是特别的了解,因此呢,今天就来为大家分享下关于send out用法及例句以及send out是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 20:30

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

大家好,关于全球新冠肺炎疫情背景下航运发展很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年9月7日 17:10

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

大家好,关于matlab求解带字母参数方程组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数的知识点,相信应该可以解决大家的一些困惑和问题,

2026年9月7日 16:30

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

本篇文章给大家谈谈oracle中的循环语句,以及下面哪个不是oracle程序设计中的循环语句 a for对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 15:30

多表查询怎么做(Excel技巧:如何多表同步筛选)

多表查询怎么做(Excel技巧:如何多表同步筛选)

各位老铁们好,相信很多人对多表查询怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于多表查询怎么做以及Excel技巧:如何多表同步筛选的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 15:10

服装店网站网页设计(服装网站建设目标设计要看甲方)

服装店网站网页设计(服装网站建设目标设计要看甲方)

“服装店网站网页设计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看服装店网站网页设计(服装网站建设目标设计要看甲方)!

2026年9月7日 14:10

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

大家好,电脑里2个系统怎么删除一个相信很多的网友都不是很明白,包括电脑开机显示有两个系统,如何删除一个也是一样,不过没有关系,接下来就来为大家分享关于电脑里2个系统怎么删除一个和电脑开机显示有两个系统,如何删除一个的一些知识点,大家可以关注

2026年9月7日 12:20

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

大家好,今天小编来为大家解答以下的问题,关于苹果手机代码大全,恢复更新固件iOS未知错误代码解决大全这个很多人还不知道,现在让我们一起来看看吧!

2026年9月7日 10:20

scrollthrough意思(“scroll”是什么意思)

scrollthrough意思(“scroll”是什么意思)

今天给各位分享“scroll”是什么意思的知识,其中也会对“scroll”是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 08:00

最近更新

blast premier春季赛(csgo战队vitality有谁)
2026-09-07 21:50:01 浏览:0
热门文章

dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表