从零开始的Transformer(1): 架构拆解

在如今的深度学习领域,Transformer架构已经称得上是经典模型了。从最初的NLP自然语言处理到后来推广到计算机视觉领域,ChatGPT等一系列基于Transformer模型的产品,对世界带来翻天覆地的变化改变世界的充分说明了它的强大实力与重要作用。 作为深度学习领域的初学者,我想简单介绍这一经典架构的同时,用案例编码来学习模型的实际应用,为后续工作打打基础。 值得一提的,本文中给出的案例大部分还是来自NLP领域。 Transformer 架构简介 语言模型 正如前文所说,Transformer最开始解决的问题是自然语言处理。Transformer 模型本质上都是预训练语言模型,在大量生语料上进行训练。我们可以看到两类常见的任务: 基于句子前$n$个词来预测下一个词。 因为输出依赖于过去和当前的输入,该任务被称为因果语言建模(causal language modeling)。 在气象预测领域,也常常见到这个因果(Causual)的概念。 我们在训练模型预测未来天气时,预测的结果同样依赖于过去的输入,而不能受未来时间天气的影响,这样的预测符合现实逻辑的。 基于上下文(周围的词语)来预测句子中被遮盖掉的词语(masked word)。 这类任务称为遮盖语言建模(masked language modeling)。 训练这类模型不需要人工标注数据,它们可以对训练过的语言产生统计意义上的理解。但如果直接拿来完成特定任务,效果往往不好。 迁移学习 前面提到的预训练相当于是从头开始训练模型:所有模型的权重都被随机初始化,并在没有先验知识的情况下开始训练。显而易见的,这个过程不仅需要海量的训练数据,时间经济成本都非常高。 因此,大部分情况下,我们将别人预训练好的模型权重通过 迁移学习 应用到自己的模型中,使用自己的任务语料对模型进行“二次训练“,通过微调参数使模型适用于新任务。 例如,我们可以选择一个在大规模英文语料上预训练好的模型,使用 arXiv 语料进行微调,以生成一个面向学术/研究领域的模型。 在绝大部分情况下,我们都应该尝试找到一个尽可能接近我们任务的预训练模型,然后微调它。 这一点在气象领域同样适用。我曾经看到过一个研究([2601.20342] StormDiT: A generative AI model bridges the 2-6 hour ‘gray zone’ in precipitation nowcasting),它就使用了视频生成模型Cosmos-Predict2.5,然后再用气象数据训练它,最终得到气象领域的预测模型。 Transformer 结构 一个常见的Transformer架构示例图如下所示: 看着很复杂哦,首先简化一下: 一个标准的 Transformer 模型主要由两个模块构成: Encoder(编码器):负责理解输入文本,为每个输入构造对应的语义表示(语义特征)。 Decoder(解码器):负责生成输出,使用Encoder输出的语义表示结合其他输入来生成目标序列。 让我们详细看看两部分的内部结构: 编码器 编码器由 N 层相同的模块堆叠而成,每层包括两个子层: 多头自注意力机制(Multi-Head Self-Attention):计算输入序列中每个词与其他词的相关性。 前馈神经网络(Feed-Forward Neural Network):对每个词进行独立的非线性变换 每个子层后面都接有残差连接(Residual Connection)和层归一化(Layer Normalization) ...

February 15, 2026 · ClarkFlyBee

Transformer + 扩散模型:DiT 入门

ℹ️ 写在前面 本文尚未完成,但近期不会补充完整。 这里记录一下还需要写的部分: diffusion.py 的代码解析 DiT 模型小实验的整体运行效果 参考文献也需要补充 本文内容基于论文 Scalable Diffusion Models with Transformers。 但文章内容并不是论文阅读笔记,而是对 DiT 的入门介绍。未来有机会可以写一个详细的阅读笔记。 扩散模型介绍 扩散模型(Denoising Diffusion Probabilistic Models,DDPMs)在图像/音频/视频生成方面取得了显著的成果。 本文中,采用离散时间(潜变量模型)(discrete-time (lantent variable model))的视角,事实上有多种关于扩散模型的观点,可以都去了解一下。 随机微分方程(SDE)、得分匹配(Score Matching)、朗之万动力学(Langevin Dynamics)、变分推断视角(Variational Inference)…… 我们常说的机器学习,或者更准确一些,监督学习中,我们做的是“判别”: 输入:一张猫的图片 输出:标签”cat“ 本质:学习 p(y|x) (给定图片,预测类别) 而扩散模型做的是”生成“,可以理解为与监督学习相反的问题: 输入:随机噪声 输出:一张猫的图片 本质:学习 p(x) (数据本身的分布) 下面,让我们详细看看扩散模型是如何完成它的工作的: 前向过程:数据 → 噪声 我们定义一个固定的、不需要学习的前向过程(Forward Process),把真实图像 $x_0$ 逐步变成纯噪声 $x_T$ 。 为什么要做这个? 我们在 前向过程 中人为构造一条从数据到噪声的渐进式退化路径。 扩散模型可以理解为一个去噪网络,它的工作流程就是对着一张图片(初始是随机噪声),一步一步去掉噪声,最后得到我们要生成的目标图片。 那么,我们现在手上有原始图片,我们希望模型学会如何去噪,需要从这一张图片构造出足够多的训练数据供扩散模型学习。 我们把原始图片一步步加噪,得到一系列图片(每个图片即对应一个时间步 $t$ ),每个图片都比前一张有更多噪声,直到最后成为纯噪声。 然后我们把这一系列图片反过来看,就是一个从纯噪声一步步变成目标图片的过程,这就是扩散模型需要的训练数据。它会从这一系列数据中学会去噪的技巧,最后能够按需求生成图片。 总而言之,这就是前向过程可以理解为训练数据的构造方式。 这个数据到噪声的过程是一步步进行的。我们看到其中一步: 单步转移 从第 $t-1$ 步到 第 $t$ 步,我们做的就是依赖当前状态,加一点点高斯噪声: ...

February 6, 2026 · ClarkFlyBee