<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>机器学习 on 方糖猫Blog</title>
    <link>https://ftmao.com/blog/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/</link>
    <description>AI 视频、AI Agent 与工程实践笔记</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 07 Nov 2025 15:18:31 +0800</lastBuildDate><atom:link href="https://ftmao.com/blog/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>生成式AI原理与实战（Part 1）学习笔记：给初级开发者的 LLM 入门图解</title>
      <link>https://ftmao.com/blog/posts/llm-interview-notes-part1/</link>
      <pubDate>Fri, 07 Nov 2025 15:18:31 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/llm-interview-notes-part1/</guid>
      <description>&lt;h1 id=&#34;生成式ai原理与实战part-1学习笔记给初级开发者的-llm-入门图解&#34;&gt;生成式AI原理与实战（Part 1）学习笔记：给初级开发者的 LLM 入门图解&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;读完《生成式AI原理与实战 —— Part 1》后，我把 58 个问题整理成这篇文章。目标读者是&lt;strong&gt;刚接触 AI 的初中级开发者&lt;/strong&gt;：你不用会推反向传播，但读完后应该能清楚地说出大模型是怎么“看”文本、怎么生成文本、以及怎么在实际任务里用它。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;写在前面为什么开发者要懂这些&#34;&gt;写在前面：为什么开发者要懂这些？&lt;/h2&gt;
&lt;p&gt;如果你只是调用 API，可能会觉得大模型就像一个“黑盒 HTTP 服务”。但真到做项目时，很多问题都和底层机制有关：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为什么同样的中文输入，不同模型算出来的 Token 数差很多？&lt;/li&gt;
&lt;li&gt;为什么上下文不能无限长？&lt;/li&gt;
&lt;li&gt;为什么模型做数学题会错？&lt;/li&gt;
&lt;li&gt;RAG、Agent、微调这些词到底在解决什么问题？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这篇文章会用“概念 + 图 + 生活化类比”来回答。每张图都是帮助你建立直觉，而不是背公式。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一大模型不是单一结构三种-transformer-架构&#34;&gt;一、大模型不是单一结构：三种 Transformer 架构&lt;/h2&gt;
&lt;p&gt;大模型基本都基于 Transformer。Transformer 最初有&lt;strong&gt;编码器 + 解码器&lt;/strong&gt;，但后来发展出三种形态。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;graph LR
    subgraph 仅编码器模型
        A1[输入文本] --&amp;gt; E1[Encoder&amp;lt;br/&amp;gt;双向 Self-Attention]
        E1 --&amp;gt; O1[理解结果/分类]
    end

    subgraph 仅解码器模型
        A2[前缀文本] --&amp;gt; D2[Decoder&amp;lt;br/&amp;gt;Masked Self-Attention]
        D2 --&amp;gt; O2[逐字生成&amp;lt;br/&amp;gt;自回归]
    end

    subgraph 编码器-解码器模型
        A3[输入文本] --&amp;gt; E3[Encoder]
        E3 --&amp;gt; D3[Decoder&amp;lt;br/&amp;gt;Cross-Attention]
        D3 --&amp;gt; O3[翻译/摘要]
    end&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;类型&lt;/th&gt;
					&lt;th&gt;代表&lt;/th&gt;
					&lt;th&gt;看上下文的方式&lt;/th&gt;
					&lt;th&gt;典型用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;仅编码器&lt;/td&gt;
					&lt;td&gt;BERT、RoBERTa&lt;/td&gt;
					&lt;td&gt;双向（整句一起看）&lt;/td&gt;
					&lt;td&gt;分类、检索、文本匹配&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;仅解码器&lt;/td&gt;
					&lt;td&gt;GPT、LLaMA、Mistral&lt;/td&gt;
					&lt;td&gt;单向（只能看左边）&lt;/td&gt;
					&lt;td&gt;续写、对话、代码生成&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;编码器-解码器&lt;/td&gt;
					&lt;td&gt;T5、BART&lt;/td&gt;
					&lt;td&gt;编码器双向 + 解码器单向&lt;/td&gt;
					&lt;td&gt;翻译、摘要、复杂生成&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;GPT 和原始 Transformer 的最大区别&lt;/strong&gt;：GPT 把解码器单独拿出来，训练目标是“给定前文，预测下一个 token”，也就是&lt;strong&gt;自回归语言建模&lt;/strong&gt;。这让 GPT 系列天然适合生成任务。&lt;/p&gt;
&lt;h3 id=&#34;11-为什么-transformer-比-rnnattention-强&#34;&gt;1.1 为什么 Transformer 比 RNN+Attention 强？&lt;/h3&gt;
&lt;p&gt;早期 LSTM/GRU 需要一步一步处理序列，计算是串行的。Transformer 的自注意力可以一次性看到整句话，所有位置并行计算。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;并行&lt;/strong&gt;：训练速度大幅提升。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长距离依赖&lt;/strong&gt;：RNN 对很远距离的信息容易“遗忘”，自注意力让任意两个 token 直接建立联系。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结构统一&lt;/strong&gt;：没有复杂的循环状态，更容易扩展成超大模型。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代价是计算复杂度为 &lt;code&gt;O(n²)&lt;/code&gt;，n 是序列长度。这也是上下文窗口不能无限长的根本原因。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二从文本到向量token-与-embedding&#34;&gt;二、从文本到向量：Token 与 Embedding&lt;/h2&gt;
&lt;p&gt;大模型看不懂“字”，它只能处理数字。所以第一步是&lt;strong&gt;分词（Tokenization）&lt;/strong&gt;。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    T[原始文本] --&amp;gt; Token[Tokenizer 切分]
    Token --&amp;gt; ID[Token ID]
    ID --&amp;gt; Emb[Embedding 向量]
    Emb --&amp;gt; PE[加位置编码]
    PE --&amp;gt; In[输入 Transformer]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h3 id=&#34;21-大模型分词器-vs-传统中文分词&#34;&gt;2.1 大模型分词器 vs 传统中文分词&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;对比&lt;/th&gt;
					&lt;th&gt;大模型 Tokenizer&lt;/th&gt;
					&lt;th&gt;传统中文分词&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;目标&lt;/td&gt;
					&lt;td&gt;给神经网络高效编码&lt;/td&gt;
					&lt;td&gt;切出符合语言学的“词”&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;粒度&lt;/td&gt;
					&lt;td&gt;子词、字符、字节，视词表而定&lt;/td&gt;
					&lt;td&gt;一般是词&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;OOV 处理&lt;/td&gt;
					&lt;td&gt;拆成子词/字节，几乎不会失败&lt;/td&gt;
					&lt;td&gt;拆成单字或按规则处理&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;例子&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;hello&amp;rdquo; → [&amp;ldquo;hell&amp;rdquo;, &amp;ldquo;o&amp;rdquo;]&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;人工智能&amp;rdquo; → [&amp;ldquo;人工&amp;rdquo;, &amp;ldquo;智能&amp;rdquo;]&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;给定一个词表，分词结果通常是唯一的&lt;/strong&gt;。因为现代 Tokenizer 大多采用贪心最长匹配（BPE、WordPiece、Unigram 等），优先匹配最长的子词。&lt;/p&gt;
&lt;h3 id=&#34;22-字节级-bpe-为什么更通用&#34;&gt;2.2 字节级 BPE 为什么更通用？&lt;/h3&gt;
&lt;p&gt;GPT-4、Llama 等模型使用 &lt;strong&gt;byte-level BPE&lt;/strong&gt;：先把文本转成 UTF-8 字节序列，再在字节上做 BPE。&lt;/p&gt;
&lt;p&gt;好处：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任何语言、Emoji、乱码、代码都能被编码，&lt;strong&gt;没有 OOV&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;不需要为每种语言设计特殊预处理。&lt;/li&gt;
&lt;li&gt;不同平台对 UTF-8 字节表示一致，迁移更稳定。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-大模型怎么区分用户说的和ai-说的&#34;&gt;2.3 大模型怎么区分“用户说的”和“AI 说的”？&lt;/h3&gt;
&lt;p&gt;靠&lt;strong&gt;特殊 Token&lt;/strong&gt; 和固定格式。训练时，对话会被包装成类似下面的结构：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;|user|&amp;gt; 今天天气怎么样？ &amp;lt;|assistant|&amp;gt; 今天天气很好，晴朗温暖。 &amp;lt;|end|&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;模型在训练过程中学会了：看到 &lt;code&gt;&amp;lt;|assistant|&amp;gt;&lt;/code&gt; 就知道要切换成回答模式。实际调用 ChatGPT、Claude 的 API 时，&lt;code&gt;role: user/assistant/system&lt;/code&gt; 也是同样的道理。&lt;/p&gt;
&lt;h3 id=&#34;24-工具调用时输出怎么和文本回复区分&#34;&gt;2.4 工具调用时，输出怎么和文本回复区分？&lt;/h3&gt;
&lt;p&gt;模型通过&lt;strong&gt;输出格式约定&lt;/strong&gt;区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;普通回复：生成自然语言文本。&lt;/li&gt;
&lt;li&gt;工具调用：生成结构化的 JSON / Function Call Schema。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;服务端拿到输出后，检查结构：如果是 JSON，就执行工具；如果是文本，就直接返回给用户。训练阶段会通过 RLHF 告诉模型“该调用工具时不要废话，直接输出 JSON”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三静态-vs-上下文相关-embedding&#34;&gt;三、静态 vs 上下文相关 Embedding&lt;/h2&gt;
&lt;h3 id=&#34;31-word2vec-的负例有什么用&#34;&gt;3.1 word2vec 的负例有什么用？&lt;/h3&gt;
&lt;p&gt;word2vec 有两种训练方式：CBOW 和 Skip-gram。Skip-gram + Negative Sampling 中，负例让训练从“对整个词表做 softmax”变成“对少量正例 + 负例做二分类”。&lt;/p&gt;
&lt;p&gt;作用：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;减少计算量&lt;/strong&gt;：每次只更新少量向量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学到区分性表示&lt;/strong&gt;：正确搭配拉近，错误搭配推远。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;32-静态-embedding-和上下文相关-embedding&#34;&gt;3.2 静态 Embedding 和上下文相关 Embedding&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;特性&lt;/th&gt;
					&lt;th&gt;静态词嵌入（word2vec/GloVe）&lt;/th&gt;
					&lt;th&gt;上下文相关嵌入（BERT/GPT）&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;向量&lt;/td&gt;
					&lt;td&gt;每个词一个固定向量&lt;/td&gt;
					&lt;td&gt;每个词每次出现都不同&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;例子&lt;/td&gt;
					&lt;td&gt;“bank” 永远是一个向量&lt;/td&gt;
					&lt;td&gt;在 “river bank” 和 “investment bank” 中向量不同&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;结构&lt;/td&gt;
					&lt;td&gt;浅层神经网络&lt;/td&gt;
					&lt;td&gt;深层 Transformer&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;能力&lt;/td&gt;
					&lt;td&gt;捕捉共现关系&lt;/td&gt;
					&lt;td&gt;理解语义、消歧、语法&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;静态 Embedding 仍然有价值&lt;/strong&gt;：轻量、快速、可解释、适合小数据和边缘设备。很多推荐系统、搜索召回场景仍然用 Embedding 模型。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    subgraph 静态词嵌入
        W1[bank] --&amp;gt; V1[固定向量]
    end
    subgraph 上下文相关嵌入
        S1[&amp;#34;river bank&amp;#34;] --&amp;gt; C1[向量A]
        S2[&amp;#34;investment bank&amp;#34;] --&amp;gt; C2[向量B]
    end&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;四llm-的内部机制&#34;&gt;四、LLM 的内部机制&lt;/h2&gt;
&lt;h3 id=&#34;41-模型怎么知道该停下来了&#34;&gt;4.1 模型怎么知道该停下来了？&lt;/h3&gt;
&lt;p&gt;训练数据每段文本末尾都有一个特殊 token，通常叫 &lt;code&gt;&amp;lt;eos&amp;gt;&lt;/code&gt;（End of Sequence）。模型的训练目标是预测下一个 token，所以它会自然学会：当回答完整时，输出 &lt;code&gt;&amp;lt;eos&amp;gt;&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;推理时还有辅助规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;达到最大生成长度。&lt;/li&gt;
&lt;li&gt;输出 &lt;code&gt;&amp;lt;eos&amp;gt;&lt;/code&gt; 立即停止。&lt;/li&gt;
&lt;li&gt;检测到重复循环时停止。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;42-训练时怎么防止偷看未来&#34;&gt;4.2 训练时怎么防止偷看未来？&lt;/h3&gt;
&lt;p&gt;用 &lt;strong&gt;Causal Mask（因果掩码）&lt;/strong&gt;。它是一个上三角矩阵，遮住当前位置右边的 token，让模型只能看到“过去”的信息。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;graph TD
    subgraph 序列
        T1[token1]
        T2[token2]
        T3[token3]
        T4[token4]
    end
    T1 --&amp;gt; T1
    T2 --&amp;gt; T1
    T2 --&amp;gt; T2
    T3 --&amp;gt; T1
    T3 --&amp;gt; T2
    T3 --&amp;gt; T3
    T4 --&amp;gt; T1
    T4 --&amp;gt; T2
    T4 --&amp;gt; T3
    T4 --&amp;gt; T4&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;箭头表示“能看到”。token3 看不到 token4，这就是自回归的核心。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;43-self-attention-到底在算什么&#34;&gt;4.3 Self-Attention 到底在算什么？&lt;/h3&gt;
&lt;p&gt;每个 token 都有三个向量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Q（Query）&lt;/strong&gt;：我想找什么信息？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K（Key）&lt;/strong&gt;：我是什么信息？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V（Value）&lt;/strong&gt;：我的实际内容是什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;计算步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Q 和 K 做点积，得到注意力分数。&lt;/li&gt;
&lt;li&gt;除以 &lt;code&gt;√d_k&lt;/code&gt;，防止数值过大导致 softmax 太尖锐。&lt;/li&gt;
&lt;li&gt;softmax 得到权重。&lt;/li&gt;
&lt;li&gt;用权重对 V 做加权求和。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    X[输入 X] --&amp;gt; Q[Query]
    X --&amp;gt; K[Key]
    X --&amp;gt; V[Value]
    Q --&amp;gt; DOT[Q × K^T]
    K --&amp;gt; DOT
    DOT --&amp;gt; SCALE[÷ √d]
    SCALE --&amp;gt; SOFT[softmax]
    SOFT --&amp;gt; MUL[× V]
    V --&amp;gt; MUL
    MUL --&amp;gt; OUT[输出]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;&lt;strong&gt;为什么要除以 &lt;code&gt;√d_k&lt;/code&gt;？&lt;/strong&gt; 因为维度越高，点积值越容易变大，softmax 会趋向“只有一个位置是 1，其他都是 0”的极端分布，梯度变小，训练不稳定。&lt;/p&gt;
&lt;h3 id=&#34;44-为什么需要多头注意力&#34;&gt;4.4 为什么需要多头注意力？&lt;/h3&gt;
&lt;p&gt;多个头相当于多个“观察角度”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有的头关注语法结构。&lt;/li&gt;
&lt;li&gt;有的头关注相邻词。&lt;/li&gt;
&lt;li&gt;有的头关注长距离依赖。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只用一个头，模型只能学一种注意模式，表达能力受限。&lt;/p&gt;
&lt;h3 id=&#34;45-kv-cache让生成变快的关键&#34;&gt;4.5 KV Cache：让生成变快的关键&lt;/h3&gt;
&lt;p&gt;生成文本时，模型是逐 token 生成的。如果没有 KV Cache，每生成一个新 token，都要重新计算前面所有 token 的 Attention，复杂度是 &lt;code&gt;O(L²)&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;有了 KV Cache：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已经生成过的 token 的 K 和 V 被缓存下来。&lt;/li&gt;
&lt;li&gt;每次只需要计算新 token 的 Q，再和缓存中的 K、V 做 Attention。&lt;/li&gt;
&lt;li&gt;复杂度变成 &lt;code&gt;O(L)&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TB
    subgraph 无 KV Cache
        A1[生成 token1] --&amp;gt; A2[生成 token2&amp;lt;br/&amp;gt;重算 token1]
        A2 --&amp;gt; A3[生成 token3&amp;lt;br/&amp;gt;重算 token1, token2]
    end

    subgraph 有 KV Cache
        B1[生成 token1&amp;lt;br/&amp;gt;缓存 K1,V1] --&amp;gt; B2[生成 token2&amp;lt;br/&amp;gt;只算 Q2 + 读取 K1,V1]
        B2 --&amp;gt; B3[生成 token3&amp;lt;br/&amp;gt;只算 Q3 + 读取 K1~V2]
    end&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;&lt;strong&gt;为什么只缓存 K 和 V，不缓存 Q？&lt;/strong&gt; 因为 K、V 来自“已经生成的历史”，是固定的；Q 来自“当前要生成的这个新 token”，每次都要重新算。&lt;/p&gt;
&lt;h3 id=&#34;46-残差连接layernormffn-各有什么用&#34;&gt;4.6 残差连接、LayerNorm、FFN 各有什么用？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;残差连接（Residual Connection）&lt;/strong&gt;：把子层输入直接加回输出，缓解深层网络梯度消失，让训练更稳定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LayerNorm&lt;/strong&gt;：对每个样本内部做归一化，不依赖 batch 大小，适合 NLP。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RMSNorm&lt;/strong&gt;：Llama-3 使用，去掉减均值步骤，计算更快更稳定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FFN（前馈神经网络）&lt;/strong&gt;：Attention 负责“看哪里”，FFN 负责“怎么理解”。两者缺一不可。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;47-为什么大模型做数学题经常不准&#34;&gt;4.7 为什么大模型做数学题经常不准？&lt;/h3&gt;
&lt;p&gt;大模型本质是&lt;strong&gt;概率模式匹配器&lt;/strong&gt;，不是计算器：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;优化目标是“下一个 token 看起来合理”，不是“答案精确”。&lt;/li&gt;
&lt;li&gt;训练数据里的数学推导质量参差不齐。&lt;/li&gt;
&lt;li&gt;多步推理会累积误差。&lt;/li&gt;
&lt;li&gt;没有内建算术引擎。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;改善方法：提示工程、CoT（Chain-of-Thought）链式推理、调用外部计算器工具。但无法根治。&lt;/p&gt;
&lt;h3 id=&#34;48-扩展上下文长度会带来的问题&#34;&gt;4.8 扩展上下文长度会带来的问题&lt;/h3&gt;
&lt;p&gt;把 8K 模型扩展到 32K，KV Cache 大小会变成 4 倍。同时 Attention 计算量和内存带宽需求也同步增加。&lt;/p&gt;
&lt;p&gt;常用做法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;位置编码外推&lt;/strong&gt;：RoPE 可以通过插值扩展范围。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;继续训练&lt;/strong&gt;：在长文本上继续训练一段时间，让模型适应新的长度分布。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;打包训练 + Attention Mask&lt;/strong&gt;：把多个短样本拼成一条长序列，用块对角掩码阻止它们互相看到。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;49-flash-attention-为什么能加速&#34;&gt;4.9 Flash Attention 为什么能加速？&lt;/h3&gt;
&lt;p&gt;Flash Attention 没有减少总计算量，但大幅减少了对 HBM（GPU 显存）的访问。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把 Attention 拆成小块，在片上 SRAM 完成计算。&lt;/li&gt;
&lt;li&gt;融合多个 kernel，减少数据搬运。&lt;/li&gt;
&lt;li&gt;用 online softmax 增量维护最大值和归一化因子。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;410-rope-比绝对位置编码强在哪&#34;&gt;4.10 RoPE 比绝对位置编码强在哪？&lt;/h3&gt;
&lt;p&gt;原始 Transformer 把位置编码加到 Embedding 上，是&lt;strong&gt;加法&lt;/strong&gt;的。RoPE（旋转位置编码）通过旋转 Q、K 向量把位置信息&lt;strong&gt;乘进去&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;天然编码相对位置信息。&lt;/li&gt;
&lt;li&gt;具备一定的长度外推能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;挑战：超长上下文下，旋转角度增长过快，可能出现周期折叠和数值精度问题。&lt;/p&gt;
&lt;h3 id=&#34;411-推测解码用小模型加速大模型&#34;&gt;4.11 推测解码：用小模型加速大模型&lt;/h3&gt;
&lt;p&gt;思路：让小模型快速猜一串 token，大模型一次性批量验证。如果猜对了，直接接受；如果错了，从错的地方用大模型重新生成。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;sequenceDiagram
    participant User
    participant Small as 小模型
    participant Large as 大模型

    User-&amp;gt;&amp;gt;Small: 请生成候选 token
    Small-&amp;gt;&amp;gt;Large: 提交候选序列
    Large-&amp;gt;&amp;gt;Large: 一次性验证多个 token
    alt 全部正确
        Large--&amp;gt;&amp;gt;User: 直接返回候选结果
    else 第 k 个错误
        Large--&amp;gt;&amp;gt;User: 前 k-1 个接受，从 k 开始重新生成
    end&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;推测解码没有减少总计算量，但减少了“慢的大模型”的运行次数，从而降低延迟。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五预训练--微调两步范式&#34;&gt;五、预训练 + 微调：两步范式&lt;/h2&gt;
&lt;p&gt;大模型不是一开始就会聊天、会做题的。它通常经历两个阶段：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    PT[预训练&amp;lt;br/&amp;gt;海量无标注文本] --&amp;gt;|获得通用能力| FT[微调&amp;lt;br/&amp;gt;指令/人类偏好数据]
    FT --&amp;gt;|对齐人类价值观| Model[可用模型]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h3 id=&#34;51-预训练让模型获得什么&#34;&gt;5.1 预训练让模型获得什么？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;语言理解与生成能力。&lt;/li&gt;
&lt;li&gt;世界知识和常识。&lt;/li&gt;
&lt;li&gt;基本的推理和归纳能力。&lt;/li&gt;
&lt;li&gt;跨任务泛化能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;52-微调做什么&#34;&gt;5.2 微调做什么？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;指令遵循&lt;/strong&gt;：学会按照用户要求组织答案。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;问答能力&lt;/strong&gt;：更准确、简洁、相关地回答问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对齐人类价值观&lt;/strong&gt;：减少有害、偏见、违法内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也是 Llama-3 8B 能比 Llama-1 70B 更强的关键原因之一：更好的数据、更优的训练方法、更系统的微调和对齐。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六文本分类embedding-还是生成&#34;&gt;六、文本分类：Embedding 还是生成？&lt;/h2&gt;
&lt;h3 id=&#34;61-embedding--分类头&#34;&gt;6.1 Embedding + 分类头&lt;/h3&gt;
&lt;p&gt;流程：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    T[文本] --&amp;gt; M[Embedding 模型]
    M --&amp;gt; V[向量]
    V --&amp;gt; C[分类头&amp;lt;br/&amp;gt;Linear/MLP]
    C --&amp;gt; L[标签]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;优点：推理快、成本低、类别可以很多、精度通常稳定。&lt;/p&gt;
&lt;h3 id=&#34;62-生成模型直接分类&#34;&gt;6.2 生成模型直接分类&lt;/h3&gt;
&lt;p&gt;把分类任务写成 prompt，让模型直接输出类别文本。例如：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;你是情感分析专家。请判断下面电影评论是 positive 还是 negative，只返回标签：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;评论：这部电影太精彩了！&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;优点：零样本、少样本能力强，加新类别不用重新训练。
缺点：推理慢、对 prompt 敏感、类别多时容易出错。&lt;/p&gt;
&lt;h3 id=&#34;63-没有标注数据怎么办&#34;&gt;6.3 没有标注数据怎么办？&lt;/h3&gt;
&lt;p&gt;可以把分类变成&lt;strong&gt;文本相似度检索&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;给每个类别写一段自然语言描述。&lt;/li&gt;
&lt;li&gt;用 Embedding 模型把描述和待分类文本都变成向量。&lt;/li&gt;
&lt;li&gt;计算余弦相似度，选最相似的类别。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;标签描述的技巧&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用具体场景描述，而不是抽象词。&lt;/li&gt;
&lt;li&gt;写成完整短句。&lt;/li&gt;
&lt;li&gt;包含领域关键词。&lt;/li&gt;
&lt;li&gt;长度适中（10-20 字左右）。&lt;/li&gt;
&lt;li&gt;类别之间要有区分度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;64-transformer-为什么比朴素贝叶斯强&#34;&gt;6.4 Transformer 为什么比朴素贝叶斯强？&lt;/h3&gt;
&lt;p&gt;朴素贝叶斯假设：给定类别后，每个词都是条件独立的。这忽略了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;词语之间的相关性（如“银行”和“贷款”）。&lt;/li&gt;
&lt;li&gt;语序信息（“这部电影不好看” vs “这部电影好看”）。&lt;/li&gt;
&lt;li&gt;否定词、修饰语的语义反转。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Transformer 通过自注意力建模上下文关系，没有强独立性假设，因此表现更好。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;七文本聚类与主题建模&#34;&gt;七、文本聚类与主题建模&lt;/h2&gt;
&lt;h3 id=&#34;71-为什么有了生成式大模型还需要-embedding-模型&#34;&gt;7.1 为什么有了生成式大模型，还需要 Embedding 模型？&lt;/h3&gt;
&lt;p&gt;生成模型擅长理解和生成，但不擅长：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对海量候选做快速相似度检索。&lt;/li&gt;
&lt;li&gt;低延迟推荐。&lt;/li&gt;
&lt;li&gt;大规模向量化索引。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;推荐系统&lt;/strong&gt;就是典型例子：先把商品/用户变成向量，再用向量数据库做近邻搜索，效率高、成本低。&lt;/p&gt;
&lt;h3 id=&#34;72-从文档到主题的流程&#34;&gt;7.2 从文档到主题的流程&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    Docs[大量文档] --&amp;gt; Prep[预处理]
    Prep --&amp;gt; Vec[向量化&amp;lt;br/&amp;gt;TF-IDF 或 Embedding]
    Vec --&amp;gt; Cluster[聚类&amp;lt;br/&amp;gt;KMeans / HDBSCAN]
    Cluster --&amp;gt; Topic[主题提取&amp;lt;br/&amp;gt;TF-IDF / c-TF-IDF / LLM]
    Topic --&amp;gt; Label[人工命名/标签]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h3 id=&#34;73-词袋法-vs-文档嵌入&#34;&gt;7.3 词袋法 vs 文档嵌入&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;特性&lt;/th&gt;
					&lt;th&gt;词袋法 / TF-IDF&lt;/th&gt;
					&lt;th&gt;文档嵌入（BERT/SBERT）&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;表示&lt;/td&gt;
					&lt;td&gt;稀疏向量&lt;/td&gt;
					&lt;td&gt;稠密向量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;上下文&lt;/td&gt;
					&lt;td&gt;不考虑&lt;/td&gt;
					&lt;td&gt;考虑&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;一词多义&lt;/td&gt;
					&lt;td&gt;不能处理&lt;/td&gt;
					&lt;td&gt;能处理&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;资源&lt;/td&gt;
					&lt;td&gt;快速轻量&lt;/td&gt;
					&lt;td&gt;需要模型和算力&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;可解释性&lt;/td&gt;
					&lt;td&gt;强&lt;/td&gt;
					&lt;td&gt;弱&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;词袋法在很多简单任务上仍是有效的基线，别急着上深度学习。&lt;/p&gt;
&lt;h3 id=&#34;74-c-tf-idf-改进在哪&#34;&gt;7.4 c-TF-IDF 改进在哪？&lt;/h3&gt;
&lt;p&gt;BERTopic 里的 c-TF-IDF 把统计单位从“文档”改成“主题（簇）”。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TF&lt;/strong&gt;：某个词在主题内所有文档合并后的频率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IDF&lt;/strong&gt;：&lt;code&gt;log(K / df)&lt;/code&gt;，K 是主题总数，df 是包含该词的主题数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样提取出来的关键词更能代表整个主题的共性，而不是单篇文档的特例。&lt;/p&gt;
&lt;h3 id=&#34;75-聚类算法怎么选&#34;&gt;7.5 聚类算法怎么选？&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;算法&lt;/th&gt;
					&lt;th&gt;优点&lt;/th&gt;
					&lt;th&gt;缺点&lt;/th&gt;
					&lt;th&gt;适合&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;K-Means&lt;/td&gt;
					&lt;td&gt;快、可扩展&lt;/td&gt;
					&lt;td&gt;需指定 K、对噪声敏感、只能找球形簇&lt;/td&gt;
					&lt;td&gt;大规模、簇形状规则&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;DBSCAN/HDBSCAN&lt;/td&gt;
					&lt;td&gt;自动识别噪声、任意形状&lt;/td&gt;
					&lt;td&gt;高维稀疏空间效果差、HDBSCAN 较慢&lt;/td&gt;
					&lt;td&gt;中小规模、噪声多&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;76-为什么把聚类和主题表示分开更好&#34;&gt;7.6 为什么把聚类和主题表示分开更好？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;灵活性&lt;/strong&gt;：聚类方法可以换，主题提取方法也可以换。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解释性&lt;/strong&gt;：先聚类再从每簇提关键词，比联合模型更直观。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;降噪&lt;/strong&gt;：聚类只关心语义相似度，主题提取专注于代表性关键词。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;77-主题关键词重叠怎么办&#34;&gt;7.7 主题关键词重叠怎么办？&lt;/h3&gt;
&lt;p&gt;可以尝试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 c-TF-IDF 提升每个主题的代表词独特性。&lt;/li&gt;
&lt;li&gt;去掉停用词和高频无意义词。&lt;/li&gt;
&lt;li&gt;合并过细的小簇后重新提取关键词。&lt;/li&gt;
&lt;li&gt;用 MMR（Maximal Marginal Relevance）兼顾相关性和多样性。&lt;/li&gt;
&lt;li&gt;换更好的语义嵌入模型。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;78-bertopic-离群点太多怎么办&#34;&gt;7.8 BERTopic 离群点太多怎么办？&lt;/h3&gt;
&lt;p&gt;可能原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;嵌入模型和领域不匹配。&lt;/li&gt;
&lt;li&gt;文本太短，语义信息不足。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;min_cluster_size&lt;/code&gt; 设置过大。&lt;/li&gt;
&lt;li&gt;语料本身主题分散。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;调整方法：减小 &lt;code&gt;min_cluster_size&lt;/code&gt;、换 &lt;code&gt;cluster_selection_method=&#39;leaf&#39;&lt;/code&gt;、使用更适合短文本的嵌入模型（如 SimCSE、MiniLM）。&lt;/p&gt;
&lt;h3 id=&#34;79-检测新兴主题&#34;&gt;7.9 检测新兴主题&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;滑动窗口 + 动态聚类&lt;/strong&gt;：按时间切分数据，追踪主题演化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;频率突变监测&lt;/strong&gt;：统计词频增长率，发现突然火起来的词。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embedding 演化分析&lt;/strong&gt;：新聚类中心远离旧中心，说明出现新主题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;710-推荐系统冷启动怎么做&#34;&gt;7.10 推荐系统冷启动怎么做？&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;阶段&lt;/th&gt;
					&lt;th&gt;推荐方式&lt;/th&gt;
					&lt;th&gt;方法&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;冷启动&lt;/td&gt;
					&lt;td&gt;内容理解&lt;/td&gt;
					&lt;td&gt;TF-IDF + KMeans / BERTopic&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;初始推荐&lt;/td&gt;
					&lt;td&gt;主题/相似内容&lt;/td&gt;
					&lt;td&gt;用户兴趣引导 + 主题中心匹配&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;有行为数据&lt;/td&gt;
					&lt;td&gt;协同过滤 + 内容&lt;/td&gt;
					&lt;td&gt;ItemCF / UserCF + 向量相似度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;数据丰富&lt;/td&gt;
					&lt;td&gt;CTR 预估&lt;/td&gt;
					&lt;td&gt;FM / DNN / DSSM&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;八写在最后&#34;&gt;八、写在最后&lt;/h2&gt;
&lt;p&gt;这篇笔记覆盖了《生成式AI原理与实战 —— Part 1》的 5 个章节。对初级开发者来说，最重要的不是记住每个公式，而是建立下面几个直觉：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;大模型 = 分词 + 向量 + Transformer + 生成概率&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transformer 的核心是 Attention：看哪里（QK）和拿什么信息（V）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成模型靠自回归逐 token 预测，每次只能看过去，靠 KV Cache 加速&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;预训练给通识，微调给方向，对齐给安全&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embedding 模型在检索、推荐、聚类场景仍然不可替代&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你能把这些讲给一位没做过 AI 的后端同事听明白，说明这篇文章的目的就达到了。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;参考资料：《生成式AI原理与实战 —— Part 1》&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
  </channel>
</rss>
