RNN Encoder-Decoder

编码器-解码器模型(Encoder-Decoder) Encoder-Decoder算法是一种深度学习模型结构,广泛应用于自然语言处理(NLP)、图像处理、语音识别等领域。它主要由两部分组成:编码器(Encoder)和解码器(Decoder)。如图1所示,这种结构能够处理序列到序列(Seq2Seq)的任务,如机器翻译、文本摘要、对话系统、声音转化等。图1 编码器-解码器结构文本摘要是一种将长文本压缩成短文本的任务,其中Encoder-Decoder模型通常用于生成一个摘要句子。 阅读详情

Encoder-Decoder模型介绍

RNN Encoder-Decoder模型是一个sequence to sequence模型。该模型将输入序列映射到一个输出序列,而输入序列的长度和输出序列的长度可以是变化的。这种模型最常见的任务是机器翻译。从一种语言的句子(sequence)翻译成另一种语言的句子(sequence)。RNN Encoder-Decoder模型的想法很简单:
(1)一个编码器Encoder处理输入序列 X = ( x ( 1 ) , . . . , x ( n x ) ) \mathrm{X}=(\mathrm{x}^{(1)},...,\mathrm{x}^{(n_x)}) X=(x(1),...,x(nx​)),将它们表示成一个固定长度的向量C,通常是Encoder(是一个RNN)最后一个时间步的输出;
(2)一个解码器Decoder以C作为输入,产生一个输出序列 Y = ( y ( 1 ) , . . . , y ( n y ) ) \mathrm{Y}=(\mathrm{y}^{(1)},...,\mathrm{y}^{(n_y)}) Y=(y(1),...,y(ny​))。 n x n_x nx​和 n y n_y ny​是变化的。这是一个sequence-to-sequence结构,两个RNN联合训练,以最大化 log ⁡ P ( y ( 1 ) , . . . , y ( n y ) ∣ x ( 1 ) , . . . , x ( n x ) ) \log\mathrm{P}(\mathrm{y}^{(1)},...,\mathrm{y}^{(n_{y})}|\mathrm{x}^{(1)},...,\mathrm{x}^{(n_{x})}) logP(y(1),...,y(ny​)∣x(1),...,x(nx​))。
(3)(x,y)是所有的训练集中的序列对。当然Encoder-Decoder结构也有其他形式,例如有的翻译模型,就是Encoder的状态输出,传递给Decoder。

该模型最初是在EMNLP2014上的论文《Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation》里提出。我们下面就以该论文中的RNN Encoder-Decoder模型为主(该论文还涉及到的其他部分就不介绍了)。注:该文有EMNLP版和预印版。预印版的附录部分对模型具体的实施做了详细的介绍。此处参见的是预印版。

论文链接:https://arxiv.org/pdf/1406.1078

一个典型的RNN Encoder-Decoder例子如图所示。

图1.1 一个RNN Encoder-Decoder模型
设输入是一个词的序列 X = ( x 1 , x 2 , . . . , x N ) \mathrm{X=(x_1,x_2,...,x_N)} X=(x1​,x2​,...,xN​),输出序列是 Y = ( y 1 , y 2 , . . . , y M ) \mathrm{Y=(y_{1},y_{2},...,y_{M})} Y=(y1​,y2​,...,yM​)。输入序列和输出序列的长度可以是变化的。

Encoder

编码器Encoder是一个RNN。
Encoder结构
RNN隐层的状态按照这个公式计算: h t = f ( h t − 1 , x t ) \mathrm{h}_t=f(\mathrm{h}_{t-1},\mathrm{x}_t) ht​=f(ht−1​,xt​)

是 f f f一个非线性激活函数。 f f f即可以是一个简单的elemente-wise logistic sigmoid函数,也可以很复杂,如一个LSTM unit。最后一个时间步的输出是一个向量c。它是对整个输入序列做的一个总结(summary)得到的结果,即编码结果。
原文自己设计了cell,如图所示。
在这里插入图片描述
给出具体的计算如下。喂入Encoder的是一个词的序列,每个词是一个词向量embedding(该文的实验部分使用了维度为500的词向量),用 e ( x i ) ∈ R 500 \mathrm{e}(\mathrm{x}_i)\in\mathrm{R}^{500} e(xi​)∈R500表示。一个时间步的隐层包含1000个hidden unit(即隐层的输出是一个长度为1000维的向量)。时间步t的计算:

h t = z h t − 1 + ( 1 − z ) h ~ t \mathrm{h}_t=\mathbf{z}\mathrm{h}_{t-1}+(1-\mathbf{z})\tilde{\mathrm{h}}_t ht​=zht−1​+(1−z)h~t​

其中:

h ~ t = tanh ⁡ ( W e ( x t ) + U ( r ⊙ h t − 1 ) ) z = σ ( W z e ( x t ) + U z h t − 1 ) r = σ ( W r e ( x t ) + U r h t − 1 ) \tilde{\mathrm{h}}_{t}=\tanh\left(\boldsymbol{W}e(x_t)+\boldsymbol{U}(\boldsymbol{r}\odot\mathrm{h}_{t-1})\right)\\\mathbf{z}=\sigma(\boldsymbol{W}_\mathbf{z}e(x_t)+\boldsymbol{U}_\mathbf{z}\mathrm{h}_{t-1})\\\boldsymbol{r}=\sigma(\boldsymbol{W}_re(x_t)+\boldsymbol{U}_r\mathrm{h}_{t-1}) h~t​=tanh(We(xt​)+U(r⊙ht−1​))z=σ(Wz​e(xt​)+Uz​ht−1​)r=σ(Wr​e(xt​)+Ur​ht−1​)

e ( x t ) e(x_t) e(xt​)是词对应的词向量。 σ \text{σ} σ是一个logistic sigmoid激活函数。 ⋅ ◯ \textcircled{\cdot} ⋅◯是一个逐个元素相乘运算符。计算时初始隐状态设为0。编码器的输出是:

c = tanh ⁡ ( V h N ) c=\tanh{(Vh_N)} c=tanh(VhN​)

矩阵W, U, V都是需要学习的参数。

Decoder

解码器Decoder也是一个RNN,它用于产生输出序列。Decoder RNN的隐状态是:

h ′ t = f ( h ′ t − 1 , y t − 1 , c ) \mathrm{h'}_t=f(\mathrm{h'}_{t-1},\mathrm{y}_{t-1},\mathrm{c}) h′t​=f(h′t−1​,yt−1​,c)

符号’ 用于表示和Encoder RNN中的参数有区分。Decoder输出序列的第t个元素(例如一个词)的产生是一个条件分布

P ( y t ∣ y t − 1 , y t − 2 , . . . , y 1 , c ) = g ( h t ′ , y t − 1 , c ) \mathrm{P}(\mathrm{y}_t|\mathrm{y}_{t-1},\mathrm{y}_{t-2},...,\mathrm{y}_1,\mathrm{c})=\mathrm{g}(\mathrm{h}_t^{\prime},\mathrm{y}_{t-1},\mathrm{c}) P(yt​∣yt−1​,yt−2​,...,y1​,c)=g(ht′​,yt−1​,c)

激活函数 g g g必须能产生概率值。例如,可以是softmax。原文采用的Decoder计算过程如下:

Decoder RNN的初始状态是:

h 0 = tanh ⁡ ( V ′ c ) \mathrm{h}_0=\tanh{(V^{\prime}c)} h0​=tanh(V′c)

在时间步t的输出的计算如下:

h ′ t = z ′ h ′ t − 1 + ( 1 − z ′ ) h ′ ~ t \mathrm{h'}_t=\mathbf{z'h'}_{t-1}+(1-\mathbf{z'})\tilde{\mathrm{h'}}_t h′t​=z′h′t−1​+(1−z′)h′~t​

其中

h ′ ~ t = tanh ⁡ ( W ′ e ( y t − 1 ) + r ′ ⊙ ( U ′ h t − 1 ′ + C c ) ) z ′ = σ ( W z ′ e ( y t − 1 ) + U z ′ h t − 1 ′ + C z c ) r ′ = σ ( W r ′ e ( y t − 1 ) + U r ′ h t − 1 ′ + C r c ) \begin{aligned}\tilde{\mathrm{h'}}_{t}&=\tanh\left(\mathbf{W}^{'}e(\mathbf{y}_{t-1})+\boldsymbol{r}^{'}\odot(\mathbf{U}^{'}\mathbf{h}_{t-1}^{'}+\boldsymbol{C}c)\right)\\\mathbf{z}^{\prime}&=\sigma\left(\mathbf{W}_z^{\prime}e(\mathbf{y}_{t-1})+\mathbf{U}_z^{\prime}\mathbf{h}_{t-1}^{\prime}+\boldsymbol{C}_z\boldsymbol{c}\right)\\\boldsymbol{r}^{\prime}&=\sigma\left(\mathbf{W}_r^{\prime}e(\mathbf{y}_{t-1})+\mathbf{U}_r^{\prime}\mathbf{h}_{t-1}^{\prime}+\boldsymbol{C}_r\boldsymbol{c}\right)\end{aligned} h′~t​z′r′​=tanh(W′e(yt−1​)+r′⊙(U′ht−1′​+Cc))=σ(Wz′​e(yt−1​)+Uz′​ht−1′​+Cz​c)=σ(Wr′​e(yt−1​)+Ur′​ht−1′​+Cr​c)​

e ( y t − 1 ) \mathrm{e(y_{t-1})} e(yt−1​)表示是t-1步预测的输出的词的词向量。 e ( y 0 ) \mathrm{e}(\mathrm{y}_0) e(y0​)是一个全部值为0的向量。
在每个时间步,decoder计算产生词j的概率:

P ( y t , j = 1 ∣ y t − 1 , y t − 2 , . . . , y 1 , X ) = exp ⁡ ( G j s t ) ∑ j ′ = 1 K exp ⁡ ( G j ′ s t ) \mathrm{P}(\mathrm{y}_{t,j}=1|\mathrm{y}_{t-1},\mathrm{y}_{t-2},...,\mathrm{y}_1,\boldsymbol{X})=\frac{\exp\left(\boldsymbol{G}_j\boldsymbol{s}_t\right)}{\sum_{j^{\prime}=1}^K\exp\left(\boldsymbol{G}_j^{\prime}\boldsymbol{s}_t\right)} P(yt,j​=1∣yt−1​,yt−2​,...,y1​,X)=∑j′=1K​exp(Gj′​st​)exp(Gj​st​)​

X表示词汇表, G ∈ R K × d G\in R^{K\times d} G∈RK×d是权重矩阵,K是词汇表的大小,d是向量s的维度。 G j \mathbf{G}_j Gj​是权重矩阵的一行。 s t s_t st​的计算如下:

s t = max ⁡ { s t , 2 i − 1 ′ , s t , 2 i ′ } s_t=\max\{s_{t,2i-1}^{'},s_{t,2i}^{'}\} st​=max{st,2i−1′​,st,2i′​}

这个操作叫max-out,就像是pooling操作,输出的 s t s_t st​的向量长度是 s t ′ {s_t}^{'} st​′的一半。

其中:

s t ′ = O h h t ′ + O y e ( y t − 1 ) + O c c s_t^{\prime}=O_hh_t^{\prime}+O_ye(y_{t-1})+O_cc st′​=Oh​ht′​+Oy​e(yt−1​)+Oc​c

可以看到,Decoder在计算输出序列的一个词时,采用了解码器当前时间步的隐状态 h t ′ h^{\prime}_t ht′​,序列上一个词 y t − 1 \mathrm{y}_{t-1} yt−1​的表示向量和Encoder输出的context c c c。

实例:实现一个翻译模型

建立一个字符级的英-中翻译模型。

要得到一个翻译模型,它包含两个阶段:一个是训练阶段;一个是推断阶段。第一阶段建立的模型结构与第二阶段的不完全一致。而是推断阶段使用第一阶段训练好的模型组件,搭建一个可以进行翻译的模型。下图是一个训练阶段的模型结构。

在这里插入图片描述
这是一个字符级的LSTM Encoder-Decoder模型。Encoder是一个LSTM模型,对输入数据(英文字符加符号)进行编码。Decoder是一个基于LSTM的语言模型,根据输入预测下一个中文字符或符号。实例的翻译模型很简单,只为说明怎样使用Encoder-Decoder模型。

实现程序包括:数据集准备、模型的训练和推断(inference)三个部分。

1. 数据集准备

网站http://www.manythings.org/anki/提供了许多语言翻译成英语的预料库。比如,法语-英语、中文-英语。下面的模型都可以适用。本例子中,使用一个英-中数据集。
数据集被处理成三个部分:Encoder的输入encoder_inputs,Decoder的输入decoder_inputs和Decoder的输出decoder_target。
Encoder的输入数据将英文文本按照字符序列来处理。每个字符用one-hot编码。因此encoder_inputs是一个3d的tensor,它的shape是[样本数,最长序列长度,英文字符表大小]。每个英文样本按照最长样本字符长度用空格符进行补齐。
Decoder的输入是将中文文本按照字符序列来处理。同样每个字符用one-hot编码。在输入的中文文本补充一个开始字符’\t’和一个结束符’\n’,同样每个中文文样本按照最长样本字符长度用空格符进行补齐。
Decoder是一个语言模型,因此Decoder的输出的目标数据是Decoder输入数据的左移一位。见上图。

2. 建立模型和训练模型

模型包括Encoder和Decoder。其中Encoder就是一个LSTM模型,我们只需获取最后一个时间步的输出。Decoder在训练阶段是按照一个语言模型来训练。即输入是一个字符的序列,目标数据是错开一位的输入数据。例如,输入是‘hello’,目标数据是‘ello<结束符>’。
建立模型和训练模型的程序如下,

encoder_inputs = Input(shape=(None, num_encoder_tokens))
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
encoder_states = [state_h, state_c]

decoder_inputs = Input(shape=(None, num_decoder_tokens))
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs,
                                     initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
          batch_size=batch_size,
          epochs=epochs,
          validation_split=0.2)
model.save('s2s.h5')

Encoder模型的输出encoder_outputs后面没有使用。而它的两个状态encoder_states = [state_h, state_c],作为了decoder的初始状态。训练好的模型会被保存到磁盘。

3.推断(翻译过程)

进行推断的工作原理如下:

在这里插入图片描述
(1)LSTM每个时间步产生一个状态c和一个输出h。我们说,基于LSTM的encoder将输入序列编码成两个向量h和 c。
(2)在Decoder, 接收Encoder传递的向量h和c作为自己的状态向量的初始值。
(3)喂入Decoder的输入层一个开始符,本文我们用的是字符’\t’。Decoder将预测一个输出字符。
(4)将预测的字符再喂入Decoder的输入层,再产生一个输出字符。重复这个过程,直到产生了结束符,本文我们用的是’\n’,或者达到了设定的序列长度。
推断的核心是先搭建新的模型

encoder_model = Model(encoder_inputs, encoder_states)

decoder_state_input_h = Input(shape=(latent_dim,))
decoder_state_input_c = Input(shape=(latent_dim,))
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
decoder_outputs, state_h, state_c = decoder_lstm(
    decoder_inputs, initial_state=decoder_states_inputs)
decoder_states = [state_h, state_c]
decoder_outputs = decoder_dense(decoder_outputs)
decoder_model = Model(
    [decoder_inputs] + decoder_states_inputs,
    [decoder_outputs] + decoder_states)

这段程序非常有意思的是,它利用前面的模型的构件,搭建新的模型。这些构件已经训练好了。新的模型encoder_model = Model(encoder_inputs, encoder_states)
就是前面的:

encoder_inputs = Input(shape=(None, num_encoder_tokens))
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
encoder_states = [state_h, state_c]

而新的模型decoder_model用到了前面定义的层decoder_dense和decoder_lstm。模型的参数不变,但喂入模型的状态数据不同。
进行推断是一个函数decode_sequence,如下。此处把模型简化了,一次喂入decoder的只有一个one-hot编码了的字符,它的tensor的shape=(1,1,字符集大小)。得到的输出包括,一个预测的字符和状态值。再下一趟的预测时,把预测的字符和状态值作为了模型的输入。即一个字符一个字符进行预测,然后拼接成翻译的句子。

def decode_sequence(input_seq):
    states_value = encoder_model.predict(input_seq)
    target_seq = np.zeros((1, 1, num_decoder_tokens))
    target_seq[0, 0, target_token_index['\t']] = 1.  # one-hot编码起始字符’\t’
    stop_condition = False
decoded_sentence = ''

    while not stop_condition:
        output_tokens, h, c = decoder_model.predict(
            [target_seq] + states_value)

        sampled_token_index = np.argmax(output_tokens[0, -1, :])
        sampled_char = reverse_target_char_index[sampled_token_index]
        decoded_sentence += sampled_char

        if (sampled_char == '\n' or
           len(decoded_sentence) > max_decoder_seq_length):
            stop_condition = True

        target_seq = np.zeros((1, 1, num_decoder_tokens))
        target_seq[0, 0, sampled_token_index] = 1. #one-hot编码上一个预测的字符,作为下一个时间步的输入
        states_value = [h, c]

    return decoded_sentence

使用decode_sequence函数进行测试的程序如下:

for seq_index in range(100):
    input_seq = encoder_input_data[seq_index: seq_index + 1]
    decoded_sentence = decode_sequence(input_seq)
    print('-')
    print('Input sentence:', input_texts[seq_index])
    print('Decoded sentence:', decoded_sentence)

下面是列出的一些翻译结果:
Input sentence: Try it.
Decoded sentence: 试试吧。
Input sentence: We try.
Decoded sentence: 我们来试试。
Input sentence: Why me?
Decoded sentence: 为什么是我?
Input sentence: Ask Tom.
Decoded sentence: 去问汤姆。
Input sentence: Awesome!
Decoded sentence: 好棒!
可以看到有些翻译的可以,有些还是不准。模型还是有很大的改善的空间。

【2020人工智能培训课】笔记八:深度学习之RNN、LSTM、encoder-decoder模型 Gensim 工具包 Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。 它支持包括TF-IDF、LSA、LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。 三大经典深度学习网络:CNN GAN RNN 语言模型与RNN 语言模型就是指给定一个一句话前面的部分,预测接下来最有可能的一个词是什么。 语言模型是对一种语言的特征进行建模,它有很多很多用处。 比如在语音. 阅读详情

相关推荐

深度学习(BOT方向) 学习笔记(2) RNN Encoder-Decoder 及 LSTM 学习

深度学习(BOT方向) 学习笔记(2) Sequence2Sequence 学习21 前言这个系列的笔记拖了很久了,一直没时间仔细详细写,一来是因为自己能力不足,学习进度也很慢,二是真的很懒,也没有什么outline,所以一直拖着没写,现在终于挤出第二篇来了。话说之前的第一篇,我很匆忙的写了写Sequence2Sequence RNN-Encoder-Decoder的框架,写的不是很认真,这篇博客则

MebiuW的专栏 1万+

Encoder-Decoder 模型架构详解

文章目录概述Seq2Seq( Sequence-to-sequence )Encoder-Decoder的缺陷Attention 机制的引入Transformer中的Encoder-Decoder 概述 Encoder-Decoder 并不是一个具体的模型,而是一个通用的框架。 Encoder 和

Joselynzhao 3万+

详解从 Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention模型

注:本文的所有模型只涉及自然语言处理领域,同时本文不涉及太多复杂公式推导。 一、Seq2Seq 模型 1. 简介 Sequence-to-sequence (seq2seq) 模型,顾名思义,其输入是一个序列,输出也是一个序列,例如输入是英文句子,输出则是翻译的中文。seq2seq 可以用在很多方面:机器翻译、QA 系统、文档摘要生成、Image Captioning (图片描述...

生命不息,Coding不止 5810

【论文学习】RNN Encoder–Decoder机器翻译

在本文中,作者提出了一种称为RNN编码器-解码器的新型神经网络模型-由两个循环解码器组成神经网络。一个RNN作为编码器将一系列符号编码为固定长度的向量表示,另一个RNN作为解码器将固定长度的向量表示形式解码为另一个符号序列。所提出模型的编码器和解码器是联合训练的,最大化在给定源序列的情况下得出目标序列的条件概率。通过使用RNN编码器- 解码器计算的短语对的条件概率作为现有对数线性中的附加功能模型。

XD的博客 1759

论文笔记:GRU----RNN Encoder-Decoder

&lt;&lt;Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation&gt;&gt;这篇论文在传统的Encoder-Decoder模型上使用RNN,模型结构如下:看图就知道要说什么了,亮点在于文章对隐层节点的创新:先回顾下传统的 naive RNN:看图就行,不多说。...

hx14301009的博客 5424

Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation文献阅读笔记

发表日期、所属会议/期刊/预印本: arXiv 2014 做得什么: 本文提出了一种新的神经网络模型,即RNN Encoder-Decoder, 由两个神经网络(RNN)组成。一个RNN将一个符号序列(sequence of symbols)编码成一个固定长度的向量表示,另一个则将这个表示解码成另一个符号序列。该模型的编码器和解码器被联合训练,以最大化给定源序列的目标序列的条件概率。对学习语言短句的表达且其在语义上和句法上都是有意义的。 怎么做的(重点): 循环神经网络(RNN) 循环神经网络(RN

NINJA_xu的博客 603

RNN成长记(三):Encoder-Decoder

在本文中,我将介绍基本的编码器(encoder)和解码器(decoder),用于处理诸如机器翻译之类的 seq2seq 任务。我们不会在这篇文章中介绍注意力机制,而在下一篇文章中去实现它。 如下图所示,我们将输入序列输入给编码器,然后将生成一个最终的隐藏状态,并将其输入到解码器中。即编码器的最后一个隐藏状态就是解码器的新初始状态。我们将使用 softmax 来处理解码器输出,并将其与目标进行比较,从而计算我们的损失函数。这里的主要区别在于,我没有向编码器的输入添加 EOS(译注:句子结束符,end-of.

2371

大模型开发 - 一文搞懂Encoder-Decoder工作原理

通过计算Decoder的隐藏状态与Encoder输出的每个词的隐藏状态的相似度(Score),进而得到每个词的Attention Weight,再将这些Weight与Encoder的隐藏状态加权求和,生成一个Context Vector。:第一个子层是一个带掩码的多头自注意力子层,第二个子层是一个多头注意力子层(编码器到解码器),第三个子层是一个前馈全连接子层。编码器(Encoder):使用一个循环神经网络(RNN)作为编码器(Encoder),读取输入句子,并将其压缩成一个固定维度的编码。

具身机器人和通用AI 2306

全连接网络(FC),卷积网络(CNN),循环神经网络(RNN),Encoder-Decoder结构

每层的每个节点由前一层。

MayLYM233的博客 667

DeepLearing—CV系列(二十四)——Pytorch实现OCR识别图片转文字(2)——CRNN+CTC_Loss理论

文章目录一、CRNN(卷积递归神经网络)1.1 CRNN介绍与网络结构1.1.1 网络结构二、网络结构详解2.1 CNN2.2 Map-to-Sequence2.3 RNN2.3 CTC Loss2.3.1 序列合并机制2.3.2 训练阶段2.3.3 划分标准2.3.4 CRNN总结结 一、CRNN(卷积递归神经网络) 1.1 CRNN介绍与网络结构 CRNN模型,即将CNN与RNN网络结合,共同训练。主要用于在一定程度上实现端到端(end-to-end)地对不定长的文本序列进行识别,不用先对单个文字进行切

wa1tzy的博客 3503

机器翻译——从RNN Encoder–Decoder到LSTM Seq2Seq(经典论文解读)

RNN Encoder–Decoder 论文《Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation》 简介 RNN Encoder–Decoder由两个循环神经网络(recurrent neural networks,RNN)构成,...

L 1139

Python----循环神经网络(Transformer ----Encoder-Decoder)

本文介绍了自然语言处理任务的分类及Encoder-Decoder结构。自然语言任务可分为三类:N对1(如文本摘要)、N对N(如机器翻译)和N对M(如序列标注)。针对输入输出长度不等的情况,Encoder-Decoder结构通过编码器压缩输入序列为固定表示,解码器再解压生成输出序列。训练中可采用Teacher-forcing技术,使用真实目标序列加速收敛,但也存在测试时泛化性不足的问题,可通过Scheduled Sampling方法平衡训练模式。

weixin_64110589的博客 1083

[Paper Notes] Learning Phrase Representations using RNN Encoder-Decoder

Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation Abstract 提出了Encoder-Decoder结构,包含两个RNN 其中一个将序列编码为固定长度的向量表示 Decoder将向量解码为目标序列 两个RNN是联合训练的,训练目标是给定源序列的情况下,最大化目标序列的条件概率。 在已有的log-linear翻译模型中使用Encoder-Decoder计算出来的条件概率

Young 496

Sequence to sequence入门详解:从RNN, LSTM到Encoder-Decoder, Attention, transformer

文章目录1. 前馈神经网络的缺点2. 循环神经网络RNN2.1. RNN的基本结构与数学定义2.2. 输入输出长度的讨论2.2.1. nx=ny=nn_x=n_y=nnx​=ny​=n2.2.2. nx=n,ny=1n_x=n,n_y=1nx​=n,ny​=12.2.3. nx=1,ny=nn_x=1,n_y=nnx​=1,ny​=n2.2.4. nx=n,ny=mn_x=n,n_y=mnx​=n,ny​=m,Encoder-Decoder模型3. RNN的复杂变种3.1. GRU(Gated Recur.

lankuohsing的博客 2575

STC8G1K08A 实战应用:从配置到功能实现

本文详细介绍了STC8G1K08A单片机的实战应用,从开发环境搭建、GPIO配置、ADC模块使用到定时器中断处理和PWM输出等核心功能。重点讲解了外设模块的协同工作配置技巧,并分享了实际项目开发中的经验教训,帮助开发者快速掌握STC8G1K08A的高效应用。

n4o5p6q7r的博客 391

高频面波成像实战:从频散曲线到全波形反演

面波勘探是近地表工程勘察的重要手段,其核心原理在于不同频率的面波对地下介质的敏感深度不同,由此形成的频散曲线能够反映浅层剪切波速结构。相较于传统钻探与折射波法,高频面波成像具有无损、高效、对低速夹层敏感等优势,广泛应用于路基检测、空洞探测、滑坡调查等领域。在实际工程中,从野外采集的排列设计、震源选型,到频散谱提取与频散曲线反演,每一步都直接影响成像精度。然而频散反演受限于一维层状假设,难以刻画横向剧烈变化的地质体。全波形反演通过拟合完整波形信息,能够突破频散曲线的分辨率边界,获得更精细的近地表速度模型。本文

weixin_29090917的博客 270

人工智能概念:RNN中的基础Encoder-Decoder框架

Seq2Seq模型与注意力机制:自然语言处理的关键突破 Seq2Seq模型通过Encoder-Decoder架构实现跨序列转换,但传统方法存在两大核心缺陷:1)固定维度语义向量C导致信息瓶颈,长序列信息丢失严重;2)单一C无法区分不同解码阶段的语义焦点,造成翻译错误。注意力机制的创新在于动态生成上下文向量ct,通过权重分配聚焦关键输入。例如翻译"欢迎来北京"时,生成"Beijing"阶段会赋予"北京"最高权重(如0.8),而非均分注意力。这种机制更

Springfield3006的博客 1120

【keras】走近VGG16卷积神经网络

        VGG16是一个16层的卷积神经网络模型,输入数据的维度为224*224*3,即长宽均为224像素的RGB彩色图片,VGG16模型的权重由ImageNet训练而来。由于其具有简单实用的优点,因此,在图像分类和目标检测任务中得到了较为广泛的应用。 1.卷积神经网络的基本概念 1.1卷积         简单的将其理解为一种数学运算,具体的计算过程如下图所示:       ...

XYZ 1万+

Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

预备知识: RNN:循环神经网络 处理序列化数据,一般用于多输入多输出,数据之间存在关联性 U:输入层到隐藏层的权重矩阵 V:隐藏层到输出层的权重矩阵 W:隐藏层S不仅仅取决于当前这次的的输入x,还取决于上一次隐藏层的值St-1,权重矩阵W就是隐藏层上一次的值作为这一次输入的权重。 用公式表示如下: Ot=g(V*St) St=f(U*Xt+W*St-1) 在处理序列化数据时,当序列数据比较长时,RNN展开的层次就会越来越...

qq_39778575的博客 3243

西电计科数据库系统期末复习笔记

本人西电19计科,数据库系统98,这是复习期间整理的笔记,基本涵盖了课程全部重点,有需要的学弟学妹可以在复习的时候参考一下。

Polaris的博客 8596

不用Root也能抓包?Android高版本HTTPS抓包的3种替代方案(含Charles技巧)

本文针对Android高版本HTTPS抓包难题,提供了三种无需Root权限的实战解决方案:利用VirtualXposed等虚拟沙盒环境、配置Postern等系统级代理工具,以及通过修改应用源码或网络安全配置。文章还详细解析了Charles抓包工具在非Root环境下的高级配置与排错技巧,帮助开发者在遵守安全规范的前提下,有效进行网络调试与监控。

http9protocoller的博客 647

RNN 不只是预测下一个词:从序列任务到 Encoder–Decoder 的前因后果

RNN 能按顺序更新状态↓不同任务选择不同的输出方式↓语言模型把输出设计成“预测下一个词”↓翻译需要根据一个序列生成另一个序列↓输入和输出长度、顺序可能不同↓出现 Encoder–Decoder↓Encoder 先读,Decoder 再逐词生成RNN 不是只能预测下一个词;它是一个序列状态更新工具。Encoder–Decoder 则利用 RNN 的状态,把“读取输入序列”和“生成输出序列”组织成两个阶段,从而处理 Seq2Seq 任务。

探索大数据世界 - 深入解析数据存储、分布式计算与人工智能 403

【飞控】UAV Toolbox Support Package for PX4 Autopilots安装与配置

安装配置UAV Toolbox Support Package for PX4 Autopilots硬件安装包

m0_58373406的博客 1613

Hierarchical Encoder Decoder RNN 项目教程

Hierarchical Encoder Decoder RNN 项目教程 项目介绍 Hierarchical Encoder Decoder RNN (HRED) 是一个用于处理对话生成任务的模型。该项目在 GitHub 上由 julianser 维护,地址为 https://github.com/julianser/hed-dlg-truncated。HRED 模型通过层次化的编码器和解码器结...

gitblog_00015的博客 599

用playwright封装一个处理web网页的爬虫,并隐藏自动化特征,自动处理反爬

本文介绍了一个使用Playwright封装的Python爬虫函数,具备反爬对抗能力。该脚本通过移除自动化标志、注入真实用户代理、禁用Chrome自动化属性等措施,有效绕过电商、新闻等中等反爬网站的检测。核心功能包括:隐藏navigator.webdriver标志、模拟人类浏览行为、设置合理的设备参数,并支持代理和延迟加载。使用时需注意避免高频访问并定期更新User-Agent。该方案适用于需要JavaScript渲染的动态网页,性能优于非无头模式。

数据知道的博客 3393

测试用例设计工具大盘点:总有一款适合你

本文旨在帮助测试工程师、开发人员及团队管理者快速了解主流测试用例设计工具的特点、适用场景和选择逻辑。覆盖工具类型包括传统文档工具、开源管理工具、商业集成平台及新兴AI工具,范围涵盖中小团队到大型企业的不同需求。本文从“测试用例设计的痛点”切入,用生活案例解释核心概念;接着按“工具类型”分类盘点主流工具(附优缺点对比表);再通过“小团队/中大型团队/敏捷团队”等真实场景教你选工具;最后展望AI等未来趋势,帮你“一次学透,终身受用”。

项目管理的博客 1590
上一篇: ViT原理及用法
下一篇: 深度学习简介
风眠玄清
博客等级 码龄7年 21粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值