编码器和解码器是神经网络中互补的组件,分别处理输入处理和输出生成。编码器将输入数据转换为紧凑、结构化的表示形式(通常称为潜在向量或上下文),而解码器使用此表示形式来重建数据或生成新的输出。这些组件通常在诸如自动编码器(用于数据压缩/重建)和序列到序列模型(用于诸如翻译之类的任务)的架构中配对。例如,在机器翻译中,编码器处理源语言句子,解码器生成目标语言句子。
编码器专注于将输入提炼为其基本特征。它们通常通过诸如卷积(用于图像)或循环/注意力层(用于文本)之类的层来降低维度。在卷积自动编码器中,编码器可以使用步幅卷积来缩小图像的空间尺寸,同时增加通道深度,从而捕获分层模式。在自然语言处理 (NLP) 中,Transformer 编码器通过应用自注意力来构建上下文嵌入来处理文本,其中每个 token 的表示都包含来自周围单词的信息。输出是总结输入的固定大小向量(或向量序列)。例如,在 BERT 中,编码器产生用于诸如情感分析之类的任务的嵌入,其中模型必须“理解”输入的含义而无需生成新的文本。
解码器反转此过程,将编码的表示形式映射回可用的格式。它们通常采用上采样层(例如,用于图像的转置卷积)或自回归机制(例如,用于文本的 LSTM 或 Transformer 解码器)。在自动编码器的解码器中,转置卷积可以通过扩展空间尺寸来从潜在向量重建图像。在 NLP 中,Transformer 解码器逐个 token 地生成文本,使用屏蔽的自注意力来防止未来 token 泄漏,并使用交叉注意力来与编码器的上下文对齐。例如,在翻译模型中,解码器从编码器的上下文向量开始,并迭代地预测目标语言中的每个单词,从而根据先前的输出对每个步骤进行调节。与编码器不同,解码器专为生成而设计,通常结合波束搜索或采样等技术来产生连贯的序列。
一个关键的区别在于它们的使用案例和设计。编码器擅长特征提取,并且在诸如 BERT 之类的模型中是独立的,而解码器则驱动生成任务,正如在 GPT 中看到的那样。在 VAE 中,编码器输出概率分布的参数,解码器从中采样以创建新数据。实际上,开发人员在诸如 PyTorch 之类的框架中将它们实现为单独的模块——例如,双向 LSTM 编码器与基于注意力的 LSTM 解码器配对用于翻译。它们的角色是不同的:编码器压缩和解释,解码器扩展和创建,但两者都依赖于彼此在需要端到端处理的架构中。