<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Transformer on Blog</title>
    <link>/tags/transformer/</link>
    <description>Recent content in Transformer on Blog</description>
    <generator>Hugo -- 0.146.0</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 21 Aug 2026 07:00:00 +0800</lastBuildDate>
    <atom:link href="/tags/transformer/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>【LLM】从零开始学大语言模型 | 5 | Transformer</title>
      <link>/posts/transformer/</link>
      <pubDate>Fri, 21 Aug 2026 07:00:00 +0800</pubDate>
      <guid>/posts/transformer/</guid>
      <description>&lt;h1 id=&#34;从多头注意力到完整-transformer-block结构原理与训练逻辑的系统讲解&#34;&gt;从多头注意力到完整 Transformer Block：结构、原理与训练逻辑的系统讲解&lt;/h1&gt;
&lt;p&gt;本文假设你已经了解词向量、位置编码以及单头 Self-Attention 的基本思想。在这个基础上，我们继续向前推进：为什么单头注意力不够用？多头注意力到底在做什么？Attention 之后为什么还要接一个前馈网络？残差连接和层归一化为什么是深层 Transformer 能够训练的关键？最终的 Transformer Block 又如何组成一个完整的语言模型？&lt;/p&gt;
&lt;p&gt;我们会尽量把这些问题放在同一条主线里讲清楚：以一个&amp;quot;预测下一个词&amp;quot;的语言模型为例，从输入词向量开始，一步一步说明数据如何被加工，参数如何被训练，以及每个组件为什么必须存在。&lt;/p&gt;
&lt;h2 id=&#34;一从任务出发transformer-在语言模型中做什么&#34;&gt;一、从任务出发：Transformer 在语言模型中做什么&lt;/h2&gt;
&lt;h3 id=&#34;1-语言模型的核心任务&#34;&gt;1. 语言模型的核心任务&lt;/h3&gt;
&lt;p&gt;为了让讨论有明确的目标，我们采用现代大语言模型最常见的训练任务之一：预测下一个词。&lt;/p&gt;
&lt;p&gt;给定一句话的前半部分，例如：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;今天天气真好，我想去&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;模型的任务是预测下一个最可能出现的词，例如：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;公园&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;这看起来只是&amp;quot;猜下一个词&amp;quot;，但要做好这件事，模型需要理解词义、语法、指代关系、常识推理，甚至语气和语境。因此，Transformer 并不是简单地查表，而是要把原始词向量逐层加工成更适合预测的语义表示。&lt;/p&gt;
&lt;h3 id=&#34;2-transformer-的整体流水线&#34;&gt;2. Transformer 的整体流水线&lt;/h3&gt;
&lt;p&gt;一个典型的 Decoder-only 语言模型，前向过程大致可以概括为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;词编号 → 词嵌入与位置编码 → 多个 &lt;strong&gt;Transformer Block&lt;/strong&gt; → LM Head → 下一个词的概率分布&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;更具体地说：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入文本首先被切成 token，并转换为整数编号。&lt;/li&gt;
&lt;li&gt;每个 token 编号通过词嵌入矩阵变成一个稠密向量。&lt;/li&gt;
&lt;li&gt;为了让模型知道 token 的位置，再加入位置编码。&lt;/li&gt;
&lt;li&gt;得到的向量矩阵进入第一个Transformer Block。&lt;/li&gt;
&lt;li&gt;经过多个 Block 的逐层加工后，得到更高层的语义表示。&lt;/li&gt;
&lt;li&gt;最后的 LM Head 将某个位置的隐藏向量映射到词表大小的 logits。&lt;/li&gt;
&lt;li&gt;通过 Softmax 得到下一个词的概率分布。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果输入序列的形状是 &lt;code&gt;[batch_size, seq_len, d_model]&lt;/code&gt;，那么经过每一个 Transformer Block 后，形状通常保持不变，仍然是 &lt;code&gt;[batch_size, seq_len, d_model]&lt;/code&gt;。也就是说，Block 的工作不是改变序列长度或向量维度，而是不断改变每个 token 向量内部的语义内容。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
