31.Encoder-Decoder(Seq2Seq)

常见网络结构

在这里插入图片描述

  • One2One
    固定大小的输入,固定大小的输出。如:图像分类任务,输入固定大小图片,输出一个类别。
    在这里插入图片描述

  • One2Many
    固定大小的输入,不固定大小的输出。如:看图说话、用词造句。

在这里插入图片描述

  • Many2One
    不固定的输入,固定的输出。如:语句情感分析、文章分类、视频分类
    在这里插入图片描述
    在这里插入图片描述

  • Many2Many同步
    固定长度的序列,输出等长的序列。如:词性标注、字符级预测、视频帧级分类
    在这里插入图片描述

  • Many2Many异步——Seq2Seq
    不固定输入,不固定输出。如:机器翻译、命题作文、语音识别。
    在这里插入图片描述

Encoder-Decoder

编码器-解码器架构:不固定输入,不固定输出。分为编码和解码两个部分:编码器处理输入序列,经过一个隐藏层输出向量。解码器把向量作为输入,输出新序列。
在这里插入图片描述

训练时

Decoder并不是把当前时刻的输出,作为下一时刻的输入。训练阶段的Decoder,输入时刻为目标序列(橙色)。
意为:如果在输出am的位置,输出的不是am,而是is。那么,下一时刻的输入(橙色am位置),依然为am。
其实好理解,这是训练阶段,他做错了,你需要纠正他。这个过程叫做Teacher Forcing。
在这里插入图片描述

预测时

decoder的当前输入,作为下一时刻输出。

在这里插入图片描述

### Encoder-Decoder 架构与 Seq2Seq 模型的主要区别及联系 #### 主要差异 尽管 Encoder-DecoderSeq2Seq 常被提及并互换使用,但实际上它们存在一定的层次关系。 1. **定义范围不同** - Seq2Seq 是一种特定的应用场景下的模型框架,主要用于序列到序列的任务(如机器翻译)。它通常由一个编码器(Encoder)和解码器(Decoder)组成[^1]。 - Encoder-Decoder 则是一个更通用的概念,指的是通过编码器将输入数据映射到隐空间表示,再通过解码器将其转换为目标形式的过程。这种架构可以应用于多种任务,而不仅限于序列到序列的转化[^2]。 2. **适用领域不同** - Seq2Seq 特定用于处理两个序列间的映射问题,例如源语言句子转化为目标语言句子。其核心在于如何有效地捕捉输入序列的信息并通过注意力机制传递给输出序列[^3]。 -Encoder-Decoder 可以扩展至图像生成、语音合成等领域,不仅仅局限于文本或时间序列的数据类型[^4]。 #### 主要联系 两者之间有着紧密的关系: 1. **结构相似性** 无论是 Seq2Seq 还是更为广泛的 Encoder-Decoder 结构,都依赖于两部分的核心组件——编码器负责提取特征或将输入压缩成固定长度向量;解码器则基于该向量逐步生成期望的结果[^5]。 2. **技术实现共享** 在实际应用中,Seq2Seq 的具体实例化往往采用 RNN 或 LSTM/GRU 等循环神经网络作为基础单元来构建编码器和解码器。这些方法同样适用于其他类型的 Encoder-Decoder 实现当中[^6]。 以下是简单的 Python 示例展示了一个基本的 Seq2Seq 模型搭建方式: ```python import tensorflow as tf class Encoder(tf.keras.Model): def __init__(self, vocab_size, embedding_dim, enc_units, batch_sz): super(Encoder, self).__init__() self.batch_sz = batch_sz self.enc_units = enc_units self.embedding = tf.keras.layers.Embedding(vocab_size, embedding_dim) self.gru = tf.keras.layers.GRU(self.enc_units, return_sequences=True, return_state=True) class Decoder(tf.keras.Model): def __init__(self, vocab_size, embedding_dim, dec_units, batch_sz): super(Decoder, self).__init__() self.dec_units = dec_units self.batch_sz = batch_sz self.embedding = tf.keras.layers.Embedding(vocab_size, embedding_dim) self.gru = tf.keras.layers.GRU(self.dec_units, return_sequences=True, return_state=True) encoder = Encoder(vocab_size=1000, embedding_dim=64, enc_units=256, batch_sz=64) decoder = Decoder(vocab_size=1000, embedding_dim=64, dec_units=256, batch_sz=64) ``` 上述代码片段展示了如何利用 GRUs 来分别创建 encoderdecoder 部分,这是典型的 seq2seq 设计思路之一[^7]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值