news 2026/3/12 22:43:35

大模型学习基础(四) Transformer架构 下

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型学习基础(四) Transformer架构 下

上一篇文章里介绍了Encoder,本篇文章来介绍Decoder

以语音辨识问题为例。

一种典型的Decoder结构是Autoregressive(自回归)的Decoder。即每一步的输出依赖于之前的所有输出

有了Encoder的输出以后,将其一次性输入Decoder,并且伴随一个起始标识,Decoder的直接输出的是一个概率分布,例如如果是语音转中文辨识问题,会给出一组中文字表(这个中文字表需要事先人为设定)以及其对应的概率分布,然后将最大概率对应的字作为输出;有了第一个输出,Decoder会把这个输出连带之前的输入一起作为新的输入,再得到新的概率分布,再找到对应的中文字,然后重复上述过程。

Decoder的内部结构如下:

可以将其和Encoder做一个对比:

比较重要的几个点:
这里的Multi-Head Attention机制增加了Masked操作。

完整的Self-Attention机制如上,我们知道Self-Attention机制就是结合上下文机制,即每一个输入向量分量要考虑其它所有分量的相关度。

而增加了Masked以后,其表示图如下:

其实是每一个输入向量分量在计算相关度时,只能考虑在它之前出现过的分量,而不能考虑在它之后出现过的分量。

Decoder在上述语音辨识问题中还要遇到一个问题,就是判断输出何时停止。那么这时需要在前面提到的中文字表中添加一个“end”即停止标识。

Encoder和Decoder交互的地方实际如下图(Cross attention部分):

其详细作用过程如下:

给Encoder输入语音序列,在经过Encoder的多block处理后,得到一排向量。首先将begin向量作为Mask Self-attention层的输入,得到第一个输出向量,计算该向量的q向量,利用self-attention中的k、v向量生成机制计算出Encoder每个输出向量的k、v向量,将其组合产生输出向量,通过全链接神经网络,最终得到一个输出词;将这个输出词作为新的输入交给Mask Self-attention层,计算和之前的所有输入向量的相关度继续得到新的输出,然后继续和Encoder的输出进行self-attention操作,然后循环此操作。

将Mask Self-Attention的输出向量和Encoder的输出向量进行Self-Attention操作称之为Cross attention计算。

下面介绍Transformer如何训练。

以中文语音辨识为例,显然数据集格式应该为:输入(语音),输出(文字序列)

我们知道Decoder直接输出每个向量是一组概率分布,如第一个输出:{机(0.8)器(0.1)学(0.1)习(0)}

而实际上第一个输出向量标签为“机”,转化成独热码形式应该是:{机(1)器(0)学(0)习(0)}

显然这类似一个多分类问题,可以用交叉熵作为损失函数,

,在第一个输出向量中,

这里需要特别提醒的是,在训练阶段,Decoder的输入是人为给定正确答案,而不是用其自己根据起始Begin向量生成的向量通过cross attention生成的输出向量作为输入再做mask self-attention。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 22:39:06

零拷贝的原理

零拷贝(Zero-copy)是一种计算机 I/O 优化技术,其核心原理是‌通过减少数据复制次数和上下文切换,提升数据传输效率‌。传统 I/O 操作中,数据需多次在用户空间和内核空间之间复制,而零拷贝技术通过硬件&…

作者头像 李华
网站建设 2026/3/11 22:37:18

微服务架构下高可用、高保真接口 MOCK 解决方案的深度解析与实践

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

作者头像 李华
网站建设 2026/3/11 21:09:37

MoonBit Pearls Vol.17 :在 MoonBit 中实现 IntMap

在MoonBit中实现IntMap 键值对容器是现代编程语言必备的标准库成员之一,它应用广泛,所以其基本操作的性能非常重要。函数式语言的键值对容器实现大多基于某种平衡二叉搜索树,这样实现的键值对容器在查找和插入操作上表现优秀,但在…

作者头像 李华
网站建设 2026/3/11 22:18:16

14、Mercurial与Buildbot搭建代码管理与持续集成环境

Mercurial与Buildbot搭建代码管理与持续集成环境 1. Mercurial基础操作 在代码管理中,Mercurial是一款强大的分布式版本控制系统。 clone 命令可用于复制一个仓库以开始工作,示例如下: # 克隆仓库 hg clone repositories/stable repositories/release-0.1hg serve 可…

作者头像 李华