<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent Frameworks | Home</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/</link><atom:link href="https://wzhai-hub.github.io/Tony/ai/agent-frameworks/index.xml" rel="self" type="application/rss+xml"/><description>Agent Frameworks</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 05 Aug 2026 00:00:00 +0000</lastBuildDate><image><url>https://wzhai-hub.github.io/Tony/media/icon_hua2ec155b4296a9c9791d015323e16eb5_11927_512x512_fill_lanczos_center_3.png</url><title>Agent Frameworks</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/</link></image><item><title>AI开发中常用的Python库</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/lib/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/lib/</guid><description>&lt;h1 id="ai开发中常用的python库">AI开发中常用的Python库&lt;/h1>
&lt;blockquote>
&lt;p>Python之所以成为AI开发的主流语言，并不是因为它本身运行速度快，而是因为它构建了一套极其完整的AI计算、机器学习、深度学习、数据处理、模型推理、RAG、Agent和MLOps生态。&lt;/p>
&lt;p>真正进入AI工程开发之后，开发者面对的并不是“会不会Python语法”，而是一个更加复杂的问题：&lt;/p>
&lt;p>&lt;strong>什么时候使用 NumPy？什么时候使用 PyTorch？什么时候使用 Transformers？RAG应该选择什么框架？Agent又应该如何组织？&lt;/strong>&lt;/p>
&lt;p>本文从AI应用架构的角度，对目前AI开发中最常用的Python库进行系统梳理。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="一ai开发为什么离不开python">一、AI开发为什么离不开Python？&lt;/h1>
&lt;p>传统后端开发经常以Java、Go、C++为核心，而AI开发则大量采用Python。&lt;/p>
&lt;p>核心原因并不是Python语言本身，而是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── 数值计算
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── NumPy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── 数据分析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Pandas
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Polars
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── 机器学习
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Scikit-learn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── XGBoost
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── LightGBM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── 深度学习
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── TensorFlow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Accelerate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── PEFT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── TRL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Embedding / RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Sentence Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── FAISS
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Chroma
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Milvus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Qdrant
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── LangChain
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── LlamaIndex
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── AutoGen
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── AI服务化
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Uvicorn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Celery
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此可以把AI Python生态理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Python不是一个AI库，而是一整个AI软件工程平台。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二numpyai计算的基础设施">二、NumPy：AI计算的基础设施&lt;/h1>
&lt;h2 id="21-numpy是什么">2.1 NumPy是什么？&lt;/h2>
&lt;p>NumPy，全称 Numerical Python，是Python科学计算生态最基础的库之一。&lt;/p>
&lt;p>核心对象是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">numpy&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ndarray&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它提供了高效的多维数组以及大量数学运算。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">array&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[2 4 6 8]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是NumPy真正重要的地方不是简单的数组运算，而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Tensor和Vector思想的基础。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="三numpy为什么对ai如此重要">三、NumPy为什么对AI如此重要？&lt;/h1>
&lt;p>假设一个Embedding：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[0.123, -0.532, 0.832, ...]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本质上就是一个向量。&lt;/p>
&lt;p>一个Batch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [0.1, 0.2, 0.3],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [0.4, 0.5, 0.6],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [0.7, 0.8, 0.9]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就是一个二维矩阵。&lt;/p>
&lt;p>深度学习模型进一步扩展：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Scalar
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Matrix
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tensor
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此NumPy是理解：&lt;/p>
&lt;ul>
&lt;li>Embedding&lt;/li>
&lt;li>Matrix&lt;/li>
&lt;li>Tensor&lt;/li>
&lt;li>Cosine Similarity&lt;/li>
&lt;li>Dot Product&lt;/li>
&lt;li>Attention&lt;/li>
&lt;/ul>
&lt;p>的重要基础。&lt;/p>
&lt;hr>
&lt;h1 id="四pandasai数据处理的瑞士军刀">四、Pandas：AI数据处理的瑞士军刀&lt;/h1>
&lt;p>Pandas主要解决：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>结构化数据处理问题。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pandas&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">pd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;users.csv&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">head&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">describe&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>典型能力包括：&lt;/p>
&lt;ul>
&lt;li>CSV读取&lt;/li>
&lt;li>Excel处理&lt;/li>
&lt;li>数据清洗&lt;/li>
&lt;li>缺失值处理&lt;/li>
&lt;li>数据过滤&lt;/li>
&lt;li>GroupBy&lt;/li>
&lt;li>Join&lt;/li>
&lt;li>聚合&lt;/li>
&lt;li>数据转换&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;age&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五pandas在llm时代仍然重要">五、Pandas在LLM时代仍然重要&lt;/h1>
&lt;p>很多人认为：&lt;/p>
&lt;blockquote>
&lt;p>“现在都是LLM了，Pandas是不是没用了？”&lt;/p>
&lt;/blockquote>
&lt;p>实际上恰恰相反。&lt;/p>
&lt;p>AI应用中经常需要处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CSV / JSON
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">数据清洗
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector Database
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此Pandas依然大量出现在：&lt;/p>
&lt;ul>
&lt;li>数据预处理&lt;/li>
&lt;li>AI训练数据处理&lt;/li>
&lt;li>Evaluation Dataset&lt;/li>
&lt;li>RAG数据清洗&lt;/li>
&lt;li>Fine-tuning Dataset&lt;/li>
&lt;li>日志分析&lt;/li>
&lt;/ul>
&lt;p>中。&lt;/p>
&lt;hr>
&lt;h1 id="六polarspandas的高性能替代方案">六、Polars：Pandas的高性能替代方案&lt;/h1>
&lt;p>Polars是近年来越来越受到关注的数据处理库。&lt;/p>
&lt;p>相比传统Pandas，它强调：&lt;/p>
&lt;ul>
&lt;li>Rust实现&lt;/li>
&lt;li>并行计算&lt;/li>
&lt;li>Lazy Execution&lt;/li>
&lt;li>更高性能&lt;/li>
&lt;li>更低内存开销&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">polars&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">pl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;data.csv&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">df&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">.&lt;/span>&lt;span class="n">filter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">col&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;age&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">.&lt;/span>&lt;span class="n">group_by&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;department&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">.&lt;/span>&lt;span class="n">agg&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">col&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;salary&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mean&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于大规模AI数据处理，Polars非常值得掌握。&lt;/p>
&lt;p>可以简单理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pandas
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">通用数据分析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Polars
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">高性能数据工程
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="七scikit-learn传统机器学习核心框架">七、Scikit-learn：传统机器学习核心框架&lt;/h1>
&lt;p>Scikit-learn是Python机器学习领域最经典的库之一。&lt;/p>
&lt;p>它主要覆盖：&lt;/p>
&lt;ul>
&lt;li>分类&lt;/li>
&lt;li>回归&lt;/li>
&lt;li>聚类&lt;/li>
&lt;li>降维&lt;/li>
&lt;li>特征工程&lt;/li>
&lt;li>模型评估&lt;/li>
&lt;li>数据预处理&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sklearn.linear_model&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">LogisticRegression&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">LogisticRegression&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">X_train&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y_train&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">prediction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">predict&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">X_test&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="八scikit-learn与llm是什么关系">八、Scikit-learn与LLM是什么关系？&lt;/h1>
&lt;p>Scikit-learn并没有因为LLM出现而失去价值。&lt;/p>
&lt;p>在真实AI系统中，经常出现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传统机器学习
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">规则引擎
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;p>一个金融风控系统可能：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">用户请求
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM提取用户意图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Engineering
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">XGBoost
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Risk Score
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM生成解释
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>AI Engineering并不等于LLM Engineering。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="九xgboost工业界非常重要的机器学习库">九、XGBoost：工业界非常重要的机器学习库&lt;/h1>
&lt;p>XGBoost是一种Gradient Boosting算法实现。&lt;/p>
&lt;p>特别适合：&lt;/p>
&lt;ul>
&lt;li>风控&lt;/li>
&lt;li>推荐&lt;/li>
&lt;li>CTR预测&lt;/li>
&lt;li>用户画像&lt;/li>
&lt;li>表格数据&lt;/li>
&lt;li>分类&lt;/li>
&lt;li>回归&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">xgboost&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">XGBClassifier&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">XGBClassifier&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">X_train&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y_train&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于结构化数据：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">年龄
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">收入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">地区
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">历史行为
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">交易次数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">信用记录
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>XGBoost往往仍然是非常强的解决方案。&lt;/p>
&lt;hr>
&lt;h1 id="十lightgbm大规模结构化数据机器学习">十、LightGBM：大规模结构化数据机器学习&lt;/h1>
&lt;p>LightGBM也是Gradient Boosting家族的重要成员。&lt;/p>
&lt;p>特点：&lt;/p>
&lt;ul>
&lt;li>高性能&lt;/li>
&lt;li>低内存&lt;/li>
&lt;li>支持大规模数据&lt;/li>
&lt;li>训练速度快&lt;/li>
&lt;/ul>
&lt;p>典型应用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">推荐系统
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">广告系统
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">风控
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">搜索排序
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户预测
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十一pytorch现代ai开发的核心">十一、PyTorch：现代AI开发的核心&lt;/h1>
&lt;p>如果说NumPy是科学计算基础设施，那么：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>PyTorch就是现代深度学习开发的核心框架之一。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>PyTorch核心对象：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Tensor&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tensor&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十二pytorch为什么如此重要">十二、PyTorch为什么如此重要？&lt;/h1>
&lt;p>PyTorch提供：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Autograd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neural Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Distributed Training
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tensor&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">requires_grad&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">**&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">y&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">backward&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">grad&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch会自动计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">dy/dx = 2x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Automatic Differentiation&lt;/p>
&lt;/blockquote>
&lt;p>即自动微分。&lt;/p>
&lt;hr>
&lt;h1 id="十三pytorch是理解llm的基础">十三、PyTorch是理解LLM的基础&lt;/h1>
&lt;p>现代Transformer模型最终仍然建立在：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Matrix Multiplication
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neural Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>之上。&lt;/p>
&lt;p>例如Transformer中的核心计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">softmax(QKᵀ / √d)V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本质上就是大量Tensor运算。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>想真正理解LLM底层原理，PyTorch是非常值得掌握的。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十四tensorflow另一套深度学习生态">十四、TensorFlow：另一套深度学习生态&lt;/h1>
&lt;p>TensorFlow曾经长期占据深度学习主流位置。&lt;/p>
&lt;p>典型组件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">TensorFlow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Keras
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── TensorBoard
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── TensorFlow Serving
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Keras可以快速构建模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tensorflow&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">keras&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">keras&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Sequential&lt;/span>&lt;span class="p">([&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">keras&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">layers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Dense&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">activation&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;relu&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">keras&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">layers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Dense&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不过对于今天的新一代LLM研究和开源模型生态而言，PyTorch的存在感通常更强。&lt;/p>
&lt;hr>
&lt;h1 id="十五hugging-face-transformersllm开发核心库">十五、Hugging Face Transformers：LLM开发核心库&lt;/h1>
&lt;p>进入大模型开发以后，最重要的Python库之一就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">transformers
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它提供大量预训练模型和统一接口。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">transformers&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pipeline&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">generator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pipeline&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;text-generation&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generator&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;AI is&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十六transformers解决了什么问题">十六、Transformers解决了什么问题？&lt;/h1>
&lt;p>如果没有Transformers，开发者需要自己处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">模型结构
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tokenizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">权重加载
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Configuration
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Inference
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformers将这些统一起来。&lt;/p>
&lt;p>常见模型类型包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">BERT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">T5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Llama
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Qwen
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Mistral
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gemma
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Whisper
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CLIP
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此可以把Transformers理解为：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>开源LLM模型的软件接口层。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十七tokenizerllm的输入层">十七、Tokenizer：LLM的输入层&lt;/h1>
&lt;p>LLM并不是直接理解字符串。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hello AI
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>会经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tokenizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token IDs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformers提供统一Tokenizer接口：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">transformers&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AutoTokenizer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tokenizer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AutoTokenizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_pretrained&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tokens&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tokenizer&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Hello AI&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tokens&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十八accelerate让模型运行在不同硬件上">十八、Accelerate：让模型运行在不同硬件上&lt;/h1>
&lt;p>Hugging Face Accelerate解决：&lt;/p>
&lt;ul>
&lt;li>CPU&lt;/li>
&lt;li>GPU&lt;/li>
&lt;li>Multi-GPU&lt;/li>
&lt;li>Distributed Training&lt;/li>
&lt;li>Mixed Precision&lt;/li>
&lt;/ul>
&lt;p>等问题。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">accelerate&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Accelerator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">accelerator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Accelerator&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它可以减少大量设备管理代码。&lt;/p>
&lt;p>在模型训练和推理工程中非常有价值。&lt;/p>
&lt;hr>
&lt;h1 id="十九peft参数高效微调">十九、PEFT：参数高效微调&lt;/h1>
&lt;p>PEFT：&lt;/p>
&lt;blockquote>
&lt;p>Parameter-Efficient Fine-Tuning&lt;/p>
&lt;/blockquote>
&lt;p>核心思想：&lt;/p>
&lt;blockquote>
&lt;p>不修改整个模型，而只训练少量参数。&lt;/p>
&lt;/blockquote>
&lt;p>典型技术：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LoRA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QLoRA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Adapter
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prefix Tuning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt Tuning
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如LoRA：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">原始LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Frozen Parameters
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── LoRA Parameters
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Fine-tuning
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>优势：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">训练参数 ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">显存 ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">训练成本 ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">部署成本 ↓
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十trlllm训练与对齐">二十、TRL：LLM训练与对齐&lt;/h1>
&lt;p>TRL：&lt;/p>
&lt;blockquote>
&lt;p>Transformer Reinforcement Learning&lt;/p>
&lt;/blockquote>
&lt;p>主要用于：&lt;/p>
&lt;ul>
&lt;li>SFT&lt;/li>
&lt;li>Reward Modeling&lt;/li>
&lt;li>RLHF&lt;/li>
&lt;li>Preference Optimization&lt;/li>
&lt;/ul>
&lt;p>可以理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">训练算法
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM Alignment
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十一sentence-transformersembedding核心工具">二十一、Sentence Transformers：Embedding核心工具&lt;/h1>
&lt;p>RAG系统最重要的组件之一就是Embedding。&lt;/p>
&lt;p>Sentence Transformers专门用于：&lt;/p>
&lt;blockquote>
&lt;p>将文本转换成向量。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sentence_transformers&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">SentenceTransformer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">SentenceTransformer&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">embedding&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;What is artificial intelligence?&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[0.123,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -0.234,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0.456,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十二embedding为什么是rag的核心">二十二、Embedding为什么是RAG的核心？&lt;/h1>
&lt;p>假设知识库：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">文档A：Java是一种面向对象编程语言
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档B：Redis是一种内存数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档C：Kafka是一种分布式消息系统
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用户问：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Java是什么？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>系统不是简单搜索关键词，而是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector Search
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">找到相似文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Answer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Semantic Search&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二十三faiss向量检索基础设施">二十三、FAISS：向量检索基础设施&lt;/h1>
&lt;p>FAISS：&lt;/p>
&lt;blockquote>
&lt;p>Facebook AI Similarity Search&lt;/p>
&lt;/blockquote>
&lt;p>主要解决：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>高维向量的相似度搜索。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">faiss&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">faiss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">IndexFlatL2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">768&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">vectors&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">I&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">index&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FAISS
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Top-K Similar Vectors
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>FAISS非常适合：&lt;/p>
&lt;ul>
&lt;li>本地RAG&lt;/li>
&lt;li>实验&lt;/li>
&lt;li>原型系统&lt;/li>
&lt;li>大规模向量检索研究&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h1 id="二十四chroma轻量级vector-database">二十四、Chroma：轻量级Vector Database&lt;/h1>
&lt;p>Chroma主要面向AI应用开发者。&lt;/p>
&lt;p>它提供：&lt;/p>
&lt;ul>
&lt;li>Embedding存储&lt;/li>
&lt;li>Vector Search&lt;/li>
&lt;li>Metadata&lt;/li>
&lt;li>Collection&lt;/li>
&lt;/ul>
&lt;p>非常适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RAG Demo
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prototype
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POC
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">chromadb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">chromadb&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Client&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_collection&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;documents&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十五milvus企业级向量数据库">二十五、Milvus：企业级向量数据库&lt;/h1>
&lt;p>如果RAG系统规模扩大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">百万级
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">千万级
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">亿级Vector
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就需要更加专业的Vector Database。&lt;/p>
&lt;p>Milvus支持：&lt;/p>
&lt;ul>
&lt;li>Vector Search&lt;/li>
&lt;li>Hybrid Search&lt;/li>
&lt;li>Metadata Filter&lt;/li>
&lt;li>Distributed Architecture&lt;/li>
&lt;li>Large-scale Retrieval&lt;/li>
&lt;/ul>
&lt;p>典型架构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM Application
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Milvus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector Search
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Top-K Documents
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十六qdrant现代vector-database">二十六、Qdrant：现代Vector Database&lt;/h1>
&lt;p>Qdrant也是目前非常流行的向量数据库。&lt;/p>
&lt;p>特点包括：&lt;/p>
&lt;ul>
&lt;li>Vector Search&lt;/li>
&lt;li>Metadata Filtering&lt;/li>
&lt;li>Payload&lt;/li>
&lt;li>REST API&lt;/li>
&lt;li>高性能检索&lt;/li>
&lt;/ul>
&lt;p>适合构建：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Semantic Search
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Recommendation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent Memory
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十七langchainllm应用编排框架">二十七、LangChain：LLM应用编排框架&lt;/h1>
&lt;p>LangChain是AI应用开发中非常知名的框架。&lt;/p>
&lt;p>它试图解决：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Retriever
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>之间的组合问题。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Database
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Answer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十八langchain最重要的概念">二十八、LangChain最重要的概念&lt;/h1>
&lt;p>理解LangChain，建议掌握：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Parser
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Retriever
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chain
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Runnable
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">chain&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">prompt&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">model&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">parser&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这种Pipeline思想非常重要。&lt;/p>
&lt;hr>
&lt;h1 id="二十九langgraphagent开发的重要框架">二十九、LangGraph：Agent开发的重要框架&lt;/h1>
&lt;p>如果说LangChain偏向：&lt;/p>
&lt;blockquote>
&lt;p>LLM Application Framework&lt;/p>
&lt;/blockquote>
&lt;p>那么LangGraph更加关注：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Agent Workflow / Stateful Agent&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Agent并不是简单：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Prompt → LLM → Answer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Agent │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────┬───────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Analyze Task
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────┴──────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Tool A Tool B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────┬──────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Observation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Re-plan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是Graph思想。&lt;/p>
&lt;hr>
&lt;h1 id="三十llamaindexrag领域的重要框架">三十、LlamaIndex：RAG领域的重要框架&lt;/h1>
&lt;p>LlamaIndex主要关注：&lt;/p>
&lt;blockquote>
&lt;p>LLM + External Data&lt;/p>
&lt;/blockquote>
&lt;p>特别适合：&lt;/p>
&lt;ul>
&lt;li>Document ingestion&lt;/li>
&lt;li>Index&lt;/li>
&lt;li>Retrieval&lt;/li>
&lt;li>RAG&lt;/li>
&lt;li>Data Connector&lt;/li>
&lt;/ul>
&lt;p>典型流程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Document
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Index
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Retriever
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十一autogen多agent协作">三十一、AutoGen：多Agent协作&lt;/h1>
&lt;p>AutoGen主要关注：&lt;/p>
&lt;blockquote>
&lt;p>Multi-Agent Collaboration&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Orchestrator
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> / | \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> / | \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Research Coder Reviewer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> \ | /
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> \ | /
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Final Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>多个Agent分别承担：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Research Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Coding Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Testing Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Review Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Planning Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后通过Agent Communication完成协作。&lt;/p>
&lt;p>这和传统：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Microservice
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在架构思想上有一定相似性。&lt;/p>
&lt;hr>
&lt;h1 id="三十二openai-sdk调用llm的基础客户端">三十二、OpenAI SDK：调用LLM的基础客户端&lt;/h1>
&lt;p>如果应用直接调用模型API，那么通常需要官方SDK。&lt;/p>
&lt;p>基本形式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">openai&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">OpenAI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">OpenAI&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">responses&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">input&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Explain AI&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它主要解决：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">API Authentication
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Request
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Response
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Streaming
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool Calling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Structured Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十三pydanticai工程里被严重低估的库">三十三、Pydantic：AI工程里被严重低估的库&lt;/h1>
&lt;p>Pydantic不是AI专用库，但是现代AI开发非常重要。&lt;/p>
&lt;p>核心能力：&lt;/p>
&lt;blockquote>
&lt;p>数据验证 + 类型定义 + Schema生成&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pydantic&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">BaseModel&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">User&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">BaseModel&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">age&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">int&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十四为什么llm特别需要pydantic">三十四、为什么LLM特别需要Pydantic？&lt;/h1>
&lt;p>LLM输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Vincent&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;age&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>我们希望它符合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">User&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">BaseModel&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">age&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">int&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是可以实现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Structured Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Validation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Business Logic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这对于：&lt;/p>
&lt;ul>
&lt;li>Agent&lt;/li>
&lt;li>Tool Calling&lt;/li>
&lt;li>Structured Output&lt;/li>
&lt;li>API&lt;/li>
&lt;li>Workflow&lt;/li>
&lt;/ul>
&lt;p>都非常重要。&lt;/p>
&lt;hr>
&lt;h1 id="三十五fastapiai服务化的核心框架">三十五、FastAPI：AI服务化的核心框架&lt;/h1>
&lt;p>AI模型最终通常需要变成API。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Frontend
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">HTTP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Response
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">fastapi&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">FastAPI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">app&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">FastAPI&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@app.post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/chat&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Hello AI&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>FastAPI非常适合：&lt;/p>
&lt;ul>
&lt;li>LLM API&lt;/li>
&lt;li>RAG API&lt;/li>
&lt;li>Agent API&lt;/li>
&lt;li>Model Service&lt;/li>
&lt;li>AI Gateway&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h1 id="三十六uvicorn运行fastapi">三十六、Uvicorn：运行FastAPI&lt;/h1>
&lt;p>FastAPI本身不是完整Web Server。&lt;/p>
&lt;p>通常使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Uvicorn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ASGI
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>启动：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">uvicorn main:app --host 0.0.0.0 --port &lt;span class="m">8000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>生产环境还可以配合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Docker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kubernetes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十七httpxai服务中的http客户端">三十七、HTTPX：AI服务中的HTTP客户端&lt;/h1>
&lt;p>AI系统往往需要调用很多外部服务：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector DB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Internal Service
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">External API
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>HTTPX提供现代Python HTTP客户端：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">httpx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">httpx&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;https://example.com&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>还支持：&lt;/p>
&lt;ul>
&lt;li>Async&lt;/li>
&lt;li>Connection Pool&lt;/li>
&lt;li>HTTP/2&lt;/li>
&lt;/ul>
&lt;p>对于异步AI应用非常重要。&lt;/p>
&lt;hr>
&lt;h1 id="三十八asyncioai应用必须理解的异步模型">三十八、AsyncIO：AI应用必须理解的异步模型&lt;/h1>
&lt;p>LLM应用大量时间实际上花在：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">等待网络
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">等待模型
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">等待数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">等待Vector Search
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Request
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">等待
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector DB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">等待
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">等待
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此Python AsyncIO非常重要。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">asyncio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">call_model&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">await&lt;/span> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;result&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十九pymupdfrag文档解析">三十九、PyMuPDF：RAG文档解析&lt;/h1>
&lt;p>企业RAG经常需要处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DOCX
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PPTX
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">TXT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">HTML
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyMuPDF非常适合PDF文本提取。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">fitz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">doc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">fitz&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;document.pdf&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">page&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">doc&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">page&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_text&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>典型流程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PyMuPDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector DB
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十beautifulsoup网页数据提取">四十、BeautifulSoup：网页数据提取&lt;/h1>
&lt;p>如果AI系统需要读取网页：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">bs4&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">soup&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">html&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;html.parser&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_text&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>适合：&lt;/p>
&lt;ul>
&lt;li>HTML解析&lt;/li>
&lt;li>网页内容提取&lt;/li>
&lt;li>数据采集&lt;/li>
&lt;li>RAG数据源&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h1 id="四十一playwright浏览器自动化">四十一、Playwright：浏览器自动化&lt;/h1>
&lt;p>BeautifulSoup只能处理HTML。&lt;/p>
&lt;p>如果网页需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">JavaScript
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Login
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dynamic Rendering
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Click
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Scroll
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Form
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以使用Playwright。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">playwright.async_api&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">async_playwright&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这对于Browser Agent非常重要。&lt;/p>
&lt;p>架构可以是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Browser Tool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Playwright
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Browser
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Website
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十二ocr库让ai理解图片和扫描文档">四十二、OCR库：让AI理解图片和扫描文档&lt;/h1>
&lt;p>企业AI应用经常遇到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">扫描PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">发票
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">身份证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">合同
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">截图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">表格
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常见OCR技术栈包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PaddleOCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tesseract
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">EasyOCR
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中PaddleOCR在中文场景非常常见。&lt;/p>
&lt;p>典型流程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十三opencv计算机视觉基础设施">四十三、OpenCV：计算机视觉基础设施&lt;/h1>
&lt;p>OpenCV主要解决：&lt;/p>
&lt;ul>
&lt;li>图像处理&lt;/li>
&lt;li>视频处理&lt;/li>
&lt;li>OCR前处理&lt;/li>
&lt;li>图像识别&lt;/li>
&lt;li>Computer Vision&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">cv2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">image&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cv2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">imread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;image.jpg&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">gray&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cv2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cvtColor&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">image&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cv2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">COLOR_BGR2GRAY&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果开发：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vision AI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Video AI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Image Processing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>OpenCV依然重要。&lt;/p>
&lt;hr>
&lt;h1 id="四十四pillowpython图像处理基础库">四十四、Pillow：Python图像处理基础库&lt;/h1>
&lt;p>Pillow适合：&lt;/p>
&lt;ul>
&lt;li>图片读取&lt;/li>
&lt;li>Resize&lt;/li>
&lt;li>Crop&lt;/li>
&lt;li>Format转换&lt;/li>
&lt;li>压缩&lt;/li>
&lt;li>基础图像处理&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">PIL&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Image&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">image&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Image&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;image.jpg&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">image&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">image&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">resize&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="mi">512&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">512&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十五onnx-runtime模型推理">四十五、ONNX Runtime：模型推理&lt;/h1>
&lt;p>训练模型和运行模型是两件不同的事情。&lt;/p>
&lt;p>训练：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PyTorch
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>生产推理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ONNX Runtime
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以将模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ONNX
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ONNX Runtime
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>从而在不同环境中进行高性能推理。&lt;/p>
&lt;hr>
&lt;h1 id="四十六vllmllm推理服务器">四十六、vLLM：LLM推理服务器&lt;/h1>
&lt;p>如果自己部署大模型，vLLM非常值得掌握。&lt;/p>
&lt;p>它主要解决：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>如何高效运行LLM。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>核心技术包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PagedAttention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Continuous Batching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KV Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU Optimization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>典型架构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Client
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FastAPI / Gateway
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vLLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果目标是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>LLM Infrastructure Engineer&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>那么vLLM属于重点技术。&lt;/p>
&lt;hr>
&lt;h1 id="四十七tgitext-generation-inference">四十七、TGI：Text Generation Inference&lt;/h1>
&lt;p>TGI也是用于部署Transformer/LLM的推理服务器。&lt;/p>
&lt;p>主要关注：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Model Serving
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Streaming
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU Inference
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它与vLLM属于类似领域。&lt;/p>
&lt;hr>
&lt;h1 id="四十八rayai分布式计算平台">四十八、Ray：AI分布式计算平台&lt;/h1>
&lt;p>Ray解决的是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>如何把Python计算任务扩展到多机器。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>可以用于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Distributed Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Distributed Inference
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hyperparameter Tuning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data Processing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>架构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Ray Cluster
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────┼────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Node1 Node2 Node3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GPU GPU GPU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十九daskpython分布式数据计算">四十九、Dask：Python分布式数据计算&lt;/h1>
&lt;p>Dask主要用于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Large Dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parallel Computing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Distributed Data Processing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果Pandas处理不了数据规模，可以考虑：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pandas
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dask / Polars
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十mlflow机器学习生命周期管理">五十、MLflow：机器学习生命周期管理&lt;/h1>
&lt;p>AI项目不仅仅是训练模型。&lt;/p>
&lt;p>还需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Experiment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Version
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Deployment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Monitoring
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>MLflow可以管理：&lt;/p>
&lt;ul>
&lt;li>Experiment&lt;/li>
&lt;li>Metrics&lt;/li>
&lt;li>Parameters&lt;/li>
&lt;li>Model Registry&lt;/li>
&lt;li>Model Version&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Experiment #123
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">learning_rate = 0.001
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">batch_size = 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">accuracy = 0.94
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十一weights--biasesai实验管理">五十一、Weights &amp;amp; Biases：AI实验管理&lt;/h1>
&lt;p>W&amp;amp;B主要用于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Experiment Tracking
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Metrics Visualization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>特别适合深度学习训练。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Epoch 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss = 2.31
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Epoch 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss = 0.42
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Epoch 50
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss = 0.08
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以实时可视化。&lt;/p>
&lt;hr>
&lt;h1 id="五十二prometheusai系统监控">五十二、Prometheus：AI系统监控&lt;/h1>
&lt;p>AI应用上线后，需要监控：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Request Count
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Latency
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Error Rate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token Usage
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU Utilization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Latency
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG Latency
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Prometheus非常适合指标监控。&lt;/p>
&lt;p>典型AI监控：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> AI System
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────────┼─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> API Metrics Model Metrics GPU Metrics
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─────────────┼─────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Prometheus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Grafana
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十三loguru更方便的python日志库">五十三、Loguru：更方便的Python日志库&lt;/h1>
&lt;p>Python标准库：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">logging&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>已经足够强大。&lt;/p>
&lt;p>但Loguru提供更加简单的日志体验：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">loguru&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">logger&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">logger&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;AI request started&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">logger&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Model failed&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>适合AI应用开发阶段快速构建日志体系。&lt;/p>
&lt;hr>
&lt;h1 id="五十四tenacityai系统中的重试机制">五十四、Tenacity：AI系统中的重试机制&lt;/h1>
&lt;p>LLM应用非常容易遇到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Timeout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Rate Limit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">503
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Network Error
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Temporary Failure
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Tenacity可以实现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Retry
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backoff
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stop Condition
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tenacity&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">retry&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@retry&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">call_llm&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>生产AI系统中：&lt;/p>
&lt;blockquote>
&lt;p>Retry不是锦上添花，而是可靠性设计的一部分。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="五十五redisai应用中的基础设施">五十五、Redis：AI应用中的基础设施&lt;/h1>
&lt;p>Redis虽然不是Python AI库，但AI应用经常通过Python客户端使用Redis。&lt;/p>
&lt;p>典型用途：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Session
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Rate Limit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Task Queue
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Semantic Cache
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conversation State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十六celeryai异步任务">五十六、Celery：AI异步任务&lt;/h1>
&lt;p>有些AI任务非常耗时：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PDF解析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batch Inference
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Document Index
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Fine-tuning
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不应该阻塞HTTP请求。&lt;/p>
&lt;p>可以设计：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Celery
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Redis / RabbitMQ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Worker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI Task
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这和传统企业级Java异步任务架构非常类似。&lt;/p>
&lt;hr>
&lt;h1 id="五十七一个完整ai项目到底需要哪些python库">五十七、一个完整AI项目到底需要哪些Python库？&lt;/h1>
&lt;p>可以把AI开发技术栈分成七层。&lt;/p>
&lt;h2 id="layer-1基础计算">Layer 1：基础计算&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">NumPy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pandas
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Polars
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="layer-2machine-learning">Layer 2：Machine Learning&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Scikit-learn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">XGBoost
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LightGBM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="layer-3deep-learning">Layer 3：Deep Learning&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">TensorFlow
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="layer-4llm">Layer 4：LLM&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Accelerate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PEFT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">TRL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenAI SDK
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="layer-5rag">Layer 5：RAG&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sentence Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FAISS
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chroma
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Milvus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Qdrant
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LlamaIndex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="layer-6agent">Layer 6：Agent&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LangChain
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AutoGen
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="layer-7production">Layer 7：Production&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Uvicorn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">HTTPX
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Celery
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MLflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prometheus
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十八如果开发一个企业级rag系统">五十八、如果开发一个企业级RAG系统&lt;/h1>
&lt;p>假设我们要构建：&lt;/p>
&lt;blockquote>
&lt;p>企业内部知识库问答系统&lt;/p>
&lt;/blockquote>
&lt;p>可以设计：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Query Rewrite
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Vector Database│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Milvus/Qdrant │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───────┬────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Top-K Docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Reranker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Response
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对应Python技术栈：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sentence Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Milvus/Qdrant
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LangChain/LlamaIndex
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenAI SDK / Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prometheus
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十九如果开发一个agent系统">五十九、如果开发一个Agent系统&lt;/h1>
&lt;p>例如：&lt;/p>
&lt;blockquote>
&lt;p>AI软件开发Agent&lt;/p>
&lt;/blockquote>
&lt;p>可以设计：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Planner
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────┼──────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Coder Search Tester
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────┼──────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Reviewer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Planner
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Final
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Python技术栈可能是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM SDK
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PostgreSQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Playwright
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GitPython
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Docker SDK
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里真正重要的已经不是：&lt;/p>
&lt;blockquote>
&lt;p>“会不会调用LLM”&lt;/p>
&lt;/blockquote>
&lt;p>而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>如何设计Agent状态、工具、任务分解、错误恢复和多Agent通信。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="六十如果开发llm推理平台">六十、如果开发LLM推理平台&lt;/h1>
&lt;p>如果目标是AI基础设施：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Client
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Gateway
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Load Balancer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────┼───────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> vLLM vLLM vLLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GPU GPU GPU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>主要技术：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vLLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Ray
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CUDA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prometheus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Grafana
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Docker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kubernetes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个方向与传统：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Java
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Spring Boot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kubernetes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Microservices
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Observability
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>有很强的技术迁移关系。&lt;/p>
&lt;hr>
&lt;h1 id="六十一ai开发真正需要掌握的python能力">六十一、AI开发真正需要掌握的Python能力&lt;/h1>
&lt;p>不要把AI开发理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Python语法
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调用OpenAI API
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>真正的AI Engineer至少需要理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── OOP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Type Hint
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── AsyncIO
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Generator
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Decorator
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Context Manager
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Multiprocessing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Packaging
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── NumPy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Pandas
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Polars
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ML
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Scikit-learn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── XGBoost
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── LightGBM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Deep Learning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── PEFT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── TRL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Vector DB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Retrieval
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Tool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Workflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Production
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── FastAPI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Kubernetes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Observability
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="六十二ai开发中最值得优先掌握的库">六十二、AI开发中最值得优先掌握的库&lt;/h1>
&lt;p>如果从工程师角度排序，我更推荐：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>优先级&lt;/th>
&lt;th>库&lt;/th>
&lt;th>核心作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>NumPy&lt;/td>
&lt;td>数值计算&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>PyTorch&lt;/td>
&lt;td>深度学习&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>Transformers&lt;/td>
&lt;td>LLM&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>FastAPI&lt;/td>
&lt;td>AI服务&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>Pydantic&lt;/td>
&lt;td>数据与Schema&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>Sentence Transformers&lt;/td>
&lt;td>Embedding&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>LangGraph&lt;/td>
&lt;td>Agent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>FAISS / Qdrant / Milvus&lt;/td>
&lt;td>Vector Search&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>Pandas&lt;/td>
&lt;td>数据处理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>Scikit-learn&lt;/td>
&lt;td>传统ML&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>OpenAI SDK&lt;/td>
&lt;td>LLM API&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>vLLM&lt;/td>
&lt;td>LLM推理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>Redis&lt;/td>
&lt;td>Cache/State&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>LlamaIndex&lt;/td>
&lt;td>RAG&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>LangChain&lt;/td>
&lt;td>LLM编排&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>Playwright&lt;/td>
&lt;td>Browser Agent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>PyMuPDF&lt;/td>
&lt;td>PDF处理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>OpenCV&lt;/td>
&lt;td>Computer Vision&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>MLflow&lt;/td>
&lt;td>ML生命周期&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>Ray&lt;/td>
&lt;td>分布式AI&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h1 id="六十三一个ai-engineer真正应该形成的技术地图">六十三、一个AI Engineer真正应该形成的技术地图&lt;/h1>
&lt;p>最终可以形成下面这张地图：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> AI Engineer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────────┼────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> AI Model AI Application AI Platform
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> PyTorch RAG/Agent vLLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transformers LangGraph Ray
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> PEFT FastAPI CUDA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> TRL Pydantic K8s
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───────────────┼────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Data Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────┼───────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Pandas Redis Vector DB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Polars SQL Milvus
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Qdrant
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Observability
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Prometheus/Grafana
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="六十四最重要的认知不要背python库">六十四、最重要的认知：不要“背Python库”&lt;/h1>
&lt;p>AI工程师最容易陷入一个误区：&lt;/p>
&lt;blockquote>
&lt;p>“我要把这些库全部学一遍。”&lt;/p>
&lt;/blockquote>
&lt;p>实际上没有必要。&lt;/p>
&lt;p>真正应该掌握的是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">选择技术
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">组合组件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">解决工程问题
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;h3 id="问题1我要处理pdf">问题1：我要处理PDF&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PyMuPDF
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题2我要做embedding">问题2：我要做Embedding&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sentence Transformers
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题3我要做vector-search">问题3：我要做Vector Search&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FAISS / Qdrant / Milvus
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题4我要做agent">问题4：我要做Agent&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LangGraph
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题5我要部署llm">问题5：我要部署LLM&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">vLLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题6我要做ai-api">问题6：我要做AI API&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FastAPI + Pydantic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题7我要做生产监控">问题7：我要做生产监控&lt;/h3>
&lt;p>选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Prometheus + Grafana
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这才是AI Engineering的正确思维。&lt;/p>
&lt;hr>
&lt;h1 id="六十五从传统java后端到ai-engineer">六十五、从传统Java后端到AI Engineer&lt;/h1>
&lt;p>对于已经有Java/Spring Boot/微服务经验的工程师，实际上并不需要从零开始。&lt;/p>
&lt;p>很多能力可以直接迁移。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Java后端&lt;/th>
&lt;th>AI/Python&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Spring Boot&lt;/td>
&lt;td>FastAPI&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Jackson&lt;/td>
&lt;td>Pydantic&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Maven&lt;/td>
&lt;td>Poetry / uv / pip&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CompletableFuture&lt;/td>
&lt;td>asyncio&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Redis&lt;/td>
&lt;td>Redis&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Kafka&lt;/td>
&lt;td>Kafka&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MyBatis/JPA&lt;/td>
&lt;td>SQLAlchemy&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Microservice&lt;/td>
&lt;td>AI Service&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gateway&lt;/td>
&lt;td>AI Gateway&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OpenTelemetry&lt;/td>
&lt;td>OpenTelemetry&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Prometheus&lt;/td>
&lt;td>Prometheus&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Kubernetes&lt;/td>
&lt;td>Kubernetes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Docker&lt;/td>
&lt;td>Docker&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Service Discovery&lt;/td>
&lt;td>AI Service Discovery&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Workflow&lt;/td>
&lt;td>LangGraph&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>RPC/Tool&lt;/td>
&lt;td>Agent Tool&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Database&lt;/td>
&lt;td>Vector DB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cache&lt;/td>
&lt;td>Semantic Cache&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Service&lt;/td>
&lt;td>Agent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Scheduler&lt;/td>
&lt;td>Agent Workflow&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>因此对于有多年Java后端经验的工程师：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>最大的变化不是从Java切换到Python，而是从传统Business Logic转向AI-Native Architecture。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="六十六最终总结">六十六、最终总结&lt;/h1>
&lt;p>现代AI开发的Python生态已经形成了非常完整的技术体系：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Python AI Ecosystem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────────────┼─────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Data ML AI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> NumPy/Pandas sklearn/XGBoost PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Polars LightGBM Transformers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────────────┼─────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────┼──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RAG Agent Inference
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Vector DB LangGraph vLLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Embedding Tools Ray
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────┼──────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> AI Application
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> FastAPI/Pydantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Redis/PostgreSQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Prometheus/Grafana
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Kubernetes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果从&lt;strong>AI开发专家&lt;/strong>的角度看，我认为最重要的不是掌握几十个Python库，而是建立下面这条完整认知链：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Machine Learning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Deep Learning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multi-Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI Application
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI Infrastructure
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Production AI
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>CNN 深度技术详解：从卷积数学原理到现代计算机视觉工程实践</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/cnn/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/cnn/</guid><description>&lt;blockquote>
&lt;p>CNN（Convolutional Neural Network，卷积神经网络）是深度学习历史上最重要的模型架构之一。&lt;/p>
&lt;p>从图像分类、目标检测、图像分割，到OCR、人脸识别、医学影像和视频分析，CNN曾经长期占据计算机视觉的核心位置。&lt;/p>
&lt;p>即使今天 Vision Transformer（ViT）和多模态大模型快速发展，CNN依然没有消失。相反，理解CNN仍然是理解现代Computer Vision、理解视觉模型和理解神经网络底层计算机制的重要基础。&lt;/p>
&lt;p>本文不把CNN简单理解为“卷积 + 池化 + 全连接”，而是从数学、计算图和工程实现三个层面重新理解CNN。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="一cnn到底解决了什么问题">一、CNN到底解决了什么问题？&lt;/h1>
&lt;p>假设有一张RGB图片：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">224 × 224 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果使用传统全连接神经网络：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">224 × 224 × 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 150528
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Dense
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Dense
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第一个全连接层假设有1000个神经元，那么参数数量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">150528 × 1000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">≈ 150 million
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这会产生两个严重问题：&lt;/p>
&lt;ol>
&lt;li>参数量巨大&lt;/li>
&lt;li>完全忽略图像的空间结构&lt;/li>
&lt;/ol>
&lt;p>图片中相邻像素通常具有强相关性：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pixel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neighbor Pixel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Local Pattern
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Object
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">边缘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">纹理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">局部形状
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">物体部件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">完整物体
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>CNN的核心思想就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>利用局部连接和参数共享，在保持空间结构的同时提取视觉特征。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二cnn最核心的三个思想">二、CNN最核心的三个思想&lt;/h1>
&lt;p>CNN真正重要的不是“卷积”两个字，而是三个设计思想：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1. Local Connectivity
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Parameter Sharing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. Hierarchical Feature Learning
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="21-local-connectivity局部连接">2.1 Local Connectivity：局部连接&lt;/h2>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">5 × 5 Image
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>我们不让一个神经元连接所有25个像素，而只观察：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>区域：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">┌───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌───────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ 3 × 3 │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Kernel│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └───────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└───────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样神经元只关注局部区域。&lt;/p>
&lt;p>这与视觉系统中的局部感受野具有一定的对应关系。&lt;/p>
&lt;hr>
&lt;h1 id="三parameter-sharing参数共享">三、Parameter Sharing：参数共享&lt;/h1>
&lt;p>这是CNN最重要的设计之一。&lt;/p>
&lt;p>假设一个3×3卷积核：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 0 -1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1 0 -1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1 0 -1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它可能用于检测：&lt;/p>
&lt;blockquote>
&lt;p>垂直边缘。&lt;/p>
&lt;/blockquote>
&lt;p>这个Kernel不是只使用一次，而是在整张图片上滑动：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">左上区域
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">右移
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">继续计算
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">整个Image
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也就是说：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>同一组参数被重复用于不同空间位置。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>这就是参数共享。&lt;/p>
&lt;hr>
&lt;h1 id="四卷积到底在计算什么">四、卷积到底在计算什么？&lt;/h1>
&lt;p>假设输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 2 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4 5 6
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">7 8 9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Kernel：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进行一次卷积：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1×1 + 2×0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+ 4×0 + 5×1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Kernel向右移动：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">2 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">5 6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">2×1 + 3×0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+ 5×0 + 6×1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">= 8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>继续移动：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">6 7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是形成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">6 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">12 14
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是Feature Map。&lt;/p>
&lt;hr>
&lt;h1 id="五严格来说cnn使用的是cross-correlation">五、严格来说，CNN使用的是Cross-Correlation&lt;/h1>
&lt;p>很多教材直接把这个操作叫Convolution。&lt;/p>
&lt;p>但从数学定义来说，深度学习框架中的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Conv2d&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常执行的是cross-correlation，而不是严格意义上的数学卷积。&lt;/p>
&lt;p>严格卷积需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Kernel Flip
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c d
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">d c
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">b a
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而深度学习中通常直接使用原始Kernel进行滑动计算。&lt;/p>
&lt;p>由于Kernel参数本身是通过训练学习得到的，因此这种差异通常不影响神经网络的表达能力。&lt;/p>
&lt;hr>
&lt;h1 id="六cnn输入数据到底是什么">六、CNN输入数据到底是什么？&lt;/h1>
&lt;p>对于普通RGB图片：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Height × Width × Channels
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">224 × 224 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是PyTorch默认格式是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Batch × Channels × Height × Width
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">N × C × H × W
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32 × 3 × 224 × 224
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Batch = 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Channels = 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Height = 224
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Width = 224
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这是PyTorch CNN开发必须熟悉的数据格式。&lt;/p>
&lt;hr>
&lt;h1 id="七一个卷积层包含什么">七、一个卷积层包含什么？&lt;/h1>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Conv2d&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">in_channels&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">out_channels&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">kernel_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>含义：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">输入Channel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × 3 Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">64个Filter
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">64个Feature Maps
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Output Channels = Number of Filters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="八卷积核和filter有什么区别">八、卷积核和Filter有什么区别？&lt;/h1>
&lt;p>实际工程中经常混用。&lt;/p>
&lt;p>对于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Channels = 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一个完整Filter实际上不是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因为它需要覆盖RGB三个Channel。&lt;/p>
&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Channels = 64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Channels = 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel = 3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">128 × 64 × 3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>再加上Bias：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">128
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>总参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">128 × 64 × 3 × 3 + 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">= 73856
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="九卷积输出尺寸怎么算">九、卷积输出尺寸怎么算？&lt;/h1>
&lt;p>这是CNN面试和实际开发中非常重要的公式。&lt;/p>
&lt;p>对于二维卷积：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H_out =
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">floor(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(H + 2P - D(K-1) - 1) / S
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+ 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>W方向同理。&lt;/p>
&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H = Input Height
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W = Input Width
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K = Kernel Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">P = Padding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">S = Stride
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">D = Dilation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H = 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K = 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">P = 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">S = 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">D = 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H_out
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(32 + 2 - 3) / 1 + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">32
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32 × 32
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Padding=1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stride=1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>尺寸保持不变。&lt;/p>
&lt;hr>
&lt;h1 id="十stride卷积移动的步长">十、Stride：卷积移动的步长&lt;/h1>
&lt;p>Stride决定Kernel每次移动多少像素。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Stride = 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">→
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每次移动1个Pixel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Stride = 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">→→
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每次移动2个Pixel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此Stride越大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Feature Map尺寸越小
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">224 × 224
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stride = 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">112 × 112
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Stride本身就可以承担Downsampling作用。&lt;/p>
&lt;hr>
&lt;h1 id="十一padding为什么需要补零">十一、Padding：为什么需要补零？&lt;/h1>
&lt;p>如果没有Padding：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × 3 Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output尺寸减少
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32 × 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">30 × 30
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>连续使用很多卷积后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">30
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">28
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">26
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>空间尺寸会快速缩小。&lt;/p>
&lt;p>Padding可以保持尺寸。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">32 × 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Padding:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">32 × 32
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十二same和valid">十二、&amp;ldquo;Same&amp;quot;和&amp;quot;Valid&amp;rdquo;&lt;/h1>
&lt;p>常见概念：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Same
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Valid
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="valid">Valid&lt;/h3>
&lt;p>不Padding：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output尺寸缩小
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="same">Same&lt;/h3>
&lt;p>通过Padding使：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Output ≈ Input
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在Stride=1、奇数Kernel时尤其常见。&lt;/p>
&lt;hr>
&lt;h1 id="十三多个filter意味着什么">十三、多个Filter意味着什么？&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">224 × 224 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第一层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv2D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">64 Filters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">224 × 224 × 64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这64个Channel并不是64张原始图片。&lt;/p>
&lt;p>而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>64种不同的特征响应。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如某些Filter可能学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Filter 1 → Vertical Edge
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Filter 2 → Horizontal Edge
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Filter 3 → Corner
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Filter 4 → Texture
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Filter 5 → Color Pattern
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这些特征不是人工定义的，而是训练过程中自动学习出来的。&lt;/p>
&lt;hr>
&lt;h1 id="十四cnn的层级特征学习">十四、CNN的层级特征学习&lt;/h1>
&lt;p>这是理解CNN最重要的概念之一。&lt;/p>
&lt;p>CNN浅层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pixel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Edge
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>中层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Edge
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Texture
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Shape
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>深层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Shape
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Part
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Object
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如识别猫：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Layer 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">边缘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">纹理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">耳朵、眼睛
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer 4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">猫脸
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer 5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Hierarchical Representation Learning&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十五relu为什么需要存在">十五、ReLU为什么需要存在？&lt;/h1>
&lt;p>卷积之后通常需要激活函数。&lt;/p>
&lt;p>最经典的是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU(x) = max(0, x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">-3 → 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-1 → 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0 → 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 2 → 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 5 → 5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为什么需要它？&lt;/p>
&lt;p>因为如果所有层都只是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终仍然可以表示成一个线性变换。&lt;/p>
&lt;p>ReLU引入非线性：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是网络拥有更强的表达能力。&lt;/p>
&lt;hr>
&lt;h1 id="十六为什么cnn通常是conv--relu">十六、为什么CNN通常是Conv + ReLU？&lt;/h1>
&lt;p>经典结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pooling
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>现代网络可能进一步加入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dropout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual Connection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>形成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十七pooling是什么">十七、Pooling是什么？&lt;/h1>
&lt;p>Pooling用于：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>降低Feature Map空间尺寸。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>最经典的是Max Pooling：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">2 × 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2 4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Max Pooling：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4 × 4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">2 × 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十八max-pooling到底保留了什么">十八、Max Pooling到底保留了什么？&lt;/h1>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 2 1 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 8 2 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0 1 5 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2 3 1 4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>2×2 Max Pool：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">8 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它保留：&lt;/p>
&lt;blockquote>
&lt;p>局部区域中的最强激活。&lt;/p>
&lt;/blockquote>
&lt;p>所以可以理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Feature Detector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">强响应
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Max Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">保留最明显特征
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十九average-pooling">十九、Average Pooling&lt;/h1>
&lt;p>另一种是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Average Pooling
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>平均值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">(1+2+3+4)/4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=2.5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>相比Max Pooling：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Max Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 强调最强特征
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Average Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 强调整体统计
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>现代CNN中，Global Average Pooling非常常见。&lt;/p>
&lt;hr>
&lt;h1 id="二十global-average-pooling">二十、Global Average Pooling&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">7 × 7 × 512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Global Average Pooling
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 × 1 × 512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">512-dimensional vector
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后可以直接：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Classes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这可以减少大量参数。&lt;/p>
&lt;hr>
&lt;h1 id="二十一经典cnn结构lenet">二十一、经典CNN结构：LeNet&lt;/h1>
&lt;p>LeNet是CNN历史上的经典架构。&lt;/p>
&lt;p>大致：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FC
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它主要用于：&lt;/p>
&lt;blockquote>
&lt;p>手写数字识别。&lt;/p>
&lt;/blockquote>
&lt;p>LeNet的重要意义是证明：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>卷积 + 局部连接 + 参数共享可以有效解决视觉识别问题。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二十二alexnet深度学习视觉革命">二十二、AlexNet：深度学习视觉革命&lt;/h1>
&lt;p>2012年的AlexNet是CNN发展史上的重要节点。&lt;/p>
&lt;p>核心特点：&lt;/p>
&lt;ul>
&lt;li>更深的网络&lt;/li>
&lt;li>ReLU&lt;/li>
&lt;li>GPU训练&lt;/li>
&lt;li>Dropout&lt;/li>
&lt;li>Data Augmentation&lt;/li>
&lt;li>Max Pooling&lt;/li>
&lt;/ul>
&lt;p>结构可以简化理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FC
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Classification
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>AlexNet推动了深度学习重新成为Computer Vision主流。&lt;/p>
&lt;hr>
&lt;h1 id="二十三vgg用小卷积堆叠深度">二十三、VGG：用小卷积堆叠深度&lt;/h1>
&lt;p>VGG的重要思想：&lt;/p>
&lt;blockquote>
&lt;p>使用多个3×3卷积代替较大的卷积核。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">7 × 7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进行堆叠。&lt;/p>
&lt;p>优势：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">更多非线性
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">更深的网络
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">更小的Kernel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经典：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">VGG16
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">VGG19
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十四为什么多个33比一个77更有吸引力">二十四、为什么多个3×3比一个7×7更有吸引力？&lt;/h1>
&lt;p>假设单个：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">7 × 7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">49C²
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>三个：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3 × 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">27C²
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>同时还增加了多次非线性激活。&lt;/p>
&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3×3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3×3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3×3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>具有更强的表达能力。&lt;/p>
&lt;hr>
&lt;h1 id="二十五resnet解决深层网络训练问题">二十五、ResNet：解决深层网络训练问题&lt;/h1>
&lt;p>随着网络越来越深：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">20层
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">50层
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">100层
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1000层
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>出现：&lt;/p>
&lt;blockquote>
&lt;p>Degradation Problem&lt;/p>
&lt;/blockquote>
&lt;p>不是简单的过拟合，而是网络越深，优化反而变困难。&lt;/p>
&lt;p>ResNet提出：&lt;/p>
&lt;blockquote>
&lt;p>Residual Connection&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二十六residual-connection">二十六、Residual Connection&lt;/h1>
&lt;p>传统：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">F(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>ResNet：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x ─────┼→ F(x) ───────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────────→ +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数学：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y = F(x) + x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也就是说网络不直接学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H(x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">F(x) = H(x) - x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这让深层网络更容易优化。&lt;/p>
&lt;hr>
&lt;h1 id="二十七resnet为什么如此重要">二十七、ResNet为什么如此重要？&lt;/h1>
&lt;p>因为Residual Connection后来不仅影响CNN，也影响了Transformer。&lt;/p>
&lt;p>现代Transformer中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也存在类似：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Residual Connection
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>ResNet不仅是CNN架构，它影响了现代深度学习架构设计。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二十八batch-normalization">二十八、Batch Normalization&lt;/h1>
&lt;p>BatchNorm用于稳定网络训练。&lt;/p>
&lt;p>基本思想：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">原始激活
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalize
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Scale
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Shift
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(x - μ) / √(σ² + ε)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">γx + β
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它可以：&lt;/p>
&lt;ul>
&lt;li>稳定训练&lt;/li>
&lt;li>改善梯度传播&lt;/li>
&lt;li>加快收敛&lt;/li>
&lt;/ul>
&lt;p>经典CNN结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十九dropout">二十九、Dropout&lt;/h1>
&lt;p>Dropout是一种正则化方法。&lt;/p>
&lt;p>训练过程中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Neuron
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neuron
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neuron
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neuron
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>随机关闭部分神经元。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">○ ○ × ○ × ○
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>目的是减少：&lt;/p>
&lt;blockquote>
&lt;p>Overfitting&lt;/p>
&lt;/blockquote>
&lt;p>不过现代CNN中，随着BatchNorm、Data Augmentation、Weight Decay等方法普及，Dropout的使用方式已经发生变化。&lt;/p>
&lt;hr>
&lt;h1 id="三十cnn完整结构">三十、CNN完整结构&lt;/h1>
&lt;p>一个经典CNN可以表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Conv2D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Conv2D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> MaxPooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Conv Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Conv Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Global Average Pool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Softmax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Classification
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十一softmax是什么">三十一、Softmax是什么？&lt;/h1>
&lt;p>假设模型输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[2.1, 0.8, -1.2]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Softmax将它转成概率：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[0.75, 0.20, 0.05]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P_i = e^z_i / Σ e^z_j
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat: 0.75
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dog: 0.20
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Car: 0.05
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十二cnn是如何训练出来的">三十二、CNN是如何训练出来的？&lt;/h1>
&lt;p>整个训练过程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CNN Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Update Weights
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Repeat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">loss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">backward&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">optimizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">step&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十三loss-function">三十三、Loss Function&lt;/h1>
&lt;p>分类任务常用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cross Entropy Loss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">criterion&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CrossEntropyLoss&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果真实标签：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat = 0.9
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dog = 0.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Loss较低。&lt;/p>
&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat = 0.01
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dog = 0.99
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Loss很高。&lt;/p>
&lt;p>模型通过Loss知道：&lt;/p>
&lt;blockquote>
&lt;p>当前预测距离正确答案有多远。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="三十四cnn反向传播到底发生了什么">三十四、CNN反向传播到底发生了什么？&lt;/h1>
&lt;p>Forward：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Backward：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂Conv2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂Conv1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂Kernel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终更新：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Kernel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以CNN中的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Edge Detector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Texture Detector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Shape Detector
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>并不是人工写出来的。&lt;/p>
&lt;p>而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>通过反向传播自动学习出来的。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="三十五cnn如何学习一个edge-detector">三十五、CNN如何学习一个Edge Detector？&lt;/h1>
&lt;p>假设模型发现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Kernel A
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>能够让某种边缘产生较高激活。&lt;/p>
&lt;p>那么训练过程会：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Prediction错误
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调整Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Edge响应增强
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过数百万次训练样本后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">随机Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">有意义的Feature Detector
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>逐渐形成。&lt;/p>
&lt;p>这就是Representation Learning。&lt;/p>
&lt;hr>
&lt;h1 id="三十六感受野-receptive-field">三十六、感受野 Receptive Field&lt;/h1>
&lt;p>CNN另一个非常重要的概念：&lt;/p>
&lt;blockquote>
&lt;p>Receptive Field&lt;/p>
&lt;/blockquote>
&lt;p>一个神经元最终能够“看到”原始图片中的多大区域？&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Layer 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3×3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>感受野：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3×3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>再经过一个：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">3×3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>理论感受野变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">5×5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>再加一层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">7×7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Network越深
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Receptive Field越大
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>浅层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Local Features
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>深层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Global / Semantic Features
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十七dilation-convolution">三十七、Dilation Convolution&lt;/h1>
&lt;p>普通卷积：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">● ● ●
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">● ● ●
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">● ● ●
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Dilation可以扩大Kernel的间隔：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">● ● ●
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">● ● ●
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">● ● ●
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样可以：&lt;/p>
&lt;blockquote>
&lt;p>增大感受野，同时不显著增加参数量。&lt;/p>
&lt;/blockquote>
&lt;p>常用于：&lt;/p>
&lt;ul>
&lt;li>Semantic Segmentation&lt;/li>
&lt;li>Image Processing&lt;/li>
&lt;li>Dense Prediction&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h1 id="三十八depthwise-separable-convolution">三十八、Depthwise Separable Convolution&lt;/h1>
&lt;p>普通卷积：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Standard Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Depthwise Separable Convolution：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Depthwise Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pointwise Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Pointwise就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 × 1 Conv
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这种设计可以显著降低计算量。&lt;/p>
&lt;p>典型代表：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">MobileNet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十九11-convolution有什么用">三十九、1×1 Convolution有什么用？&lt;/h1>
&lt;p>很多人第一次看到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv2d(kernel_size=1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>会觉得：&lt;/p>
&lt;blockquote>
&lt;p>1×1卷积不是没有空间感受野吗？&lt;/p>
&lt;/blockquote>
&lt;p>它的重要作用之一是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>改变Channel维度。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">56 × 56 × 256
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 × 1 Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">64 filters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">56 × 56 × 64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>空间尺寸不变，但Channel从：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">256 → 64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此1×1 Conv可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>对每一个像素位置上的Channel向量进行一次Linear Projection。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="四十cnn计算量如何估算">四十、CNN计算量如何估算？&lt;/h1>
&lt;p>卷积层FLOPs通常与：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H × W × Cin × Cout × K²
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>有关。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H = 56
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W = 56
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cin = 64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cout = 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K = 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>计算规模大约：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">56 × 56 × 64 × 128 × 9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此CNN优化时需要重点关注：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Feature Map Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Channels
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batch Size
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十一cnn为什么适合gpu">四十一、CNN为什么适合GPU？&lt;/h1>
&lt;p>CNN本质上包含大量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Matrix Operation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tensor Operation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parallel Computation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Millions of Multiply-Add
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>GPU拥有大量计算核心，非常适合执行这类高度并行的运算。&lt;/p>
&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cuda&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就可以把模型放到GPU上。&lt;/p>
&lt;hr>
&lt;h1 id="四十二pytorch实现一个cnn">四十二、PyTorch实现一个CNN&lt;/h1>
&lt;p>一个简单的CNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">nn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">CNN&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Module&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">num_classes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">super&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">features&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Sequential&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Conv2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">padding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BatchNorm2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Conv2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">padding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BatchNorm2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MaxPool2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Conv2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">padding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BatchNorm2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">AdaptiveAvgPool2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">classifier&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_classes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">forward&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">features&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">flatten&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">classifier&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3 × H × W
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv 64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MaxPool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Global Average Pool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Classes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十三为什么使用adaptiveavgpool2d">四十三、为什么使用AdaptiveAvgPool2d？&lt;/h1>
&lt;p>传统CNN经常：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Flatten
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Fully Connected
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">7 × 7 × 512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flatten：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">25088
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">25088 → 4096
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数量巨大。&lt;/p>
&lt;p>使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">AdaptiveAvgPool2d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>直接得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 × 1 × 512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">512 → Classes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数大幅下降。&lt;/p>
&lt;hr>
&lt;h1 id="四十四cnn中的data-augmentation">四十四、CNN中的Data Augmentation&lt;/h1>
&lt;p>训练图像模型时，数据增强非常重要。&lt;/p>
&lt;p>常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Random Crop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Random Flip
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Rotation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Color Jitter
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Resize
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">torchvision&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">transforms&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transform&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transforms&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Compose&lt;/span>&lt;span class="p">([&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transforms&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RandomResizedCrop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">224&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transforms&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RandomHorizontalFlip&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transforms&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ToTensor&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为什么有效？&lt;/p>
&lt;p>因为我们希望模型学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Object
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而不是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Specific Pixel Arrangement
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如猫向左：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat →
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>和猫向右：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">← Cat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>应该属于同一类别。&lt;/p>
&lt;hr>
&lt;h1 id="四十五cnn在目标检测中的应用">四十五、CNN在目标检测中的应用&lt;/h1>
&lt;p>CNN不只是分类。&lt;/p>
&lt;p>目标检测任务：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CNN Backbone
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Maps
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Detection Head
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Bounding Boxes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">┌──────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌───────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Cat │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └───────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌───┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │Dog│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └───┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经典模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">R-CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Fast R-CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Faster R-CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">YOLO
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SSD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RetinaNet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>很多经典检测模型都以CNN作为Backbone。&lt;/p>
&lt;hr>
&lt;h1 id="四十六cnn在图像分割中的应用">四十六、CNN在图像分割中的应用&lt;/h1>
&lt;p>语义分割：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CNN Encoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Decoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pixel-level Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经典架构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">U-Net
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FCN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DeepLab
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">每一个Pixel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Class
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pixel 1 → Road
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pixel 2 → Road
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pixel 3 → Car
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pixel 4 → Person
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十七cnn与transformer的关系">四十七、CNN与Transformer的关系&lt;/h1>
&lt;p>近年来：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ViT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Swin Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vision-Language Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multimodal LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer在视觉领域快速发展。&lt;/p>
&lt;p>但是不能简单认为：&lt;/p>
&lt;blockquote>
&lt;p>CNN已经被Transformer淘汰。&lt;/p>
&lt;/blockquote>
&lt;p>二者解决问题的思路不同。&lt;/p>
&lt;hr>
&lt;h1 id="四十八cnn-vs-vision-transformer">四十八、CNN vs Vision Transformer&lt;/h1>
&lt;p>CNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Local
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hierarchical
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Global
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Patch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Global Interaction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>CNN天然具有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Locality
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Translation Equivariance
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parameter Sharing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer更加擅长：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Long-range Dependency
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Global Context
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Flexible Attention
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十九为什么transformer需要大量数据">四十九、为什么Transformer需要大量数据？&lt;/h1>
&lt;p>CNN拥有比较强的Inductive Bias：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Locality
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Spatial Structure
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Translation Equivariance
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也就是说CNN：&lt;/p>
&lt;blockquote>
&lt;p>对图像结构已经有先验假设。&lt;/p>
&lt;/blockquote>
&lt;p>Transformer的先验更弱。&lt;/p>
&lt;p>因此通常需要更多数据来学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">什么是局部关系？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">什么是空间关系？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">什么是物体结构？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这也是CNN在数据规模有限的视觉任务中仍然具有价值的原因之一。&lt;/p>
&lt;hr>
&lt;h1 id="五十现代cnn已经发生了什么变化">五十、现代CNN已经发生了什么变化？&lt;/h1>
&lt;p>现代CNN已经不再是简单：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pool
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是逐渐演化为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Depthwise Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Large Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multi-scale
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Pyramid
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代表架构包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ResNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DenseNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MobileNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">EfficientNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ConvNeXt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中ConvNeXt尤其值得关注。&lt;/p>
&lt;hr>
&lt;h1 id="五十一convnext现代cnn重新思考">五十一、ConvNeXt：现代CNN重新思考&lt;/h1>
&lt;p>ConvNeXt的思想之一是：&lt;/p>
&lt;blockquote>
&lt;p>把Transformer时代的一些设计经验重新应用到CNN。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Large Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Depthwise Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Modern Training Recipe
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这说明一个非常重要的事实：&lt;/p>
&lt;blockquote>
&lt;p>CNN和Transformer并不是完全割裂的两套体系。&lt;/p>
&lt;/blockquote>
&lt;p>现代视觉模型正在不断融合两者的思想。&lt;/p>
&lt;hr>
&lt;h1 id="五十二cnn真正的核心知识体系">五十二、CNN真正的核心知识体系&lt;/h1>
&lt;p>如果把CNN压缩成一张知识地图：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Tensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Convolution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Filter
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Stride
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Padding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── Dilation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Feature
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Edge
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Texture
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Shape
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── Semantic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Downsampling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── MaxPool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── AvgPool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── Stride Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Nonlinearity
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Optimization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Backprop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Architecture
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── LeNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── AlexNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── VGG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── ResNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── MobileNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── ConvNeXt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Applications
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Classification
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Detection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Segmentation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── OCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Video
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十三作为ai-engineercnn应该学到什么程度">五十三、作为AI Engineer，CNN应该学到什么程度？&lt;/h1>
&lt;p>如果目标是AI应用开发，不一定需要自己实现一个完整CNN训练框架。&lt;/p>
&lt;p>但是以下内容必须理解：&lt;/p>
&lt;h3 id="第一层必须掌握">第一层：必须掌握&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Channel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stride
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Padding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Map
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="第二层深入理解">第二层：深入理解&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Receptive Field
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="第三层模型架构">第三层：模型架构&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LeNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AlexNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">VGG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ResNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MobileNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">EfficientNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ConvNeXt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="第四层工程实践">第四层：工程实践&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PyTorch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CUDA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Mixed Precision
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data Augmentation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Distributed Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Export
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Inference
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十四cnn最重要的本质">五十四、CNN最重要的本质&lt;/h1>
&lt;p>如果只记住CNN的几个核心思想，可以记住：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┼─────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Local Sharing Hierarchy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 局部 参数共享 层级特征
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─────────┼─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Visual Representation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Classification / Detection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Segmentation / Recognition
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>CNN真正厉害的地方不是：&lt;/p>
&lt;blockquote>
&lt;p>“用一个3×3的Kernel扫描图片。”&lt;/p>
&lt;/blockquote>
&lt;p>而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>通过局部连接和参数共享，把原始像素逐层转换成越来越抽象的视觉表示。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pixels
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Edges
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Textures
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Shapes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Objects
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Semantics
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是CNN最核心的思想。&lt;/p>
&lt;hr>
&lt;h1 id="五十五从cnn进一步理解现代ai">五十五、从CNN进一步理解现代AI&lt;/h1>
&lt;p>如果继续向现代AI发展，可以沿着下面的技术演化理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── ResNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Object Detection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Semantic Segmentation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Vision Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── CLIP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Vision-Language Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Multimodal LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终会发现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Computer Vision
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Visual Representation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multimodal Representation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vision-Language Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multimodal Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以学习CNN并不是学习一项“过时技术”，而是在学习：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>现代视觉AI的基础计算思想。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="结语">结语&lt;/h1>
&lt;p>CNN经历了从LeNet、AlexNet、VGG到ResNet，再到MobileNet、EfficientNet和ConvNeXt的发展。&lt;/p>
&lt;p>它解决的核心问题始终没有改变：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>如何让神经网络高效地从空间结构数据中学习层级化特征。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>从工程角度看，CNN最值得掌握的不是背诵网络结构，而是理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Tensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Convolution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Extraction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Non-linearity
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Downsampling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hierarchical Representation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weight Update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一旦真正理解这条链路，后面学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ResNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MobileNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">EfficientNet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ConvNeXt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ViT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Swin Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CLIP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vision-Language Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multimodal LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>都会容易很多。&lt;/p>
&lt;p>&lt;strong>CNN不是计算机视觉的终点，而是理解现代视觉AI的一个重要起点。&lt;/strong>&lt;/p></description></item><item><title>DNN：从神经元数学原理到现代深度学习架构</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/dnn/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/dnn/</guid><description>&lt;blockquote>
&lt;p>DNN（Deep Neural Network，深度神经网络）是现代人工智能最基础、最重要的模型体系之一。&lt;/p>
&lt;p>CNN解决了空间结构数据的问题，RNN解决了序列数据的问题，而Transformer进一步解决了长距离依赖和大规模并行计算问题。&lt;/p>
&lt;p>但它们的共同基础仍然是：&lt;/p>
&lt;p>&lt;strong>神经元 + 线性变换 + 非线性激活 + 损失函数 + 反向传播 + 梯度下降。&lt;/strong>&lt;/p>
&lt;p>因此，真正理解DNN，是理解CNN、RNN、Transformer、LLM乃至现代Agent模型底层训练机制的重要基础。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="一dnn到底是什么">一、DNN到底是什么？&lt;/h1>
&lt;p>DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Deep Neural Network
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>中文：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">深度神经网络
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最简单的神经网络：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里的核心概念是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>存在多个隐藏层。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Shallow Neural Network
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常指隐藏层较少的网络。&lt;/p>
&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Deep Neural Network
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>则通过多层网络逐渐学习更加复杂的特征。&lt;/p>
&lt;hr>
&lt;h1 id="二dnn解决的核心问题">二、DNN解决的核心问题&lt;/h1>
&lt;p>假设我们要预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">用户是否会购买商品？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">年龄
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">收入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">访问次数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">停留时间
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">历史购买次数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">设备类型
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">地区
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x = [age, income, visits, duration, purchases, ...]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>传统程序可能写：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">if income &amp;gt; X
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">and visits &amp;gt; Y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">and purchases &amp;gt; Z:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> buy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>问题是：&lt;/p>
&lt;blockquote>
&lt;p>人工很难写出复杂的数据规律。&lt;/p>
&lt;/blockquote>
&lt;p>DNN的思路是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neural Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">自动学习规律
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也就是说：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>DNN通过数据自动学习输入与输出之间的复杂非线性映射。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>数学上：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y = f(x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>DNN希望学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fθ(x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">θ = 所有需要学习的参数
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三dnn最基本的组成神经元">三、DNN最基本的组成：神经元&lt;/h1>
&lt;p>一个神经元可以表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 ──w1──┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 ──w2──┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 ──w3──┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Σ + bias
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数学公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z = w1x1 + w2x2 + w3x3 + b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也可以写成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z = wᵀx + b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后经过激活函数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a = f(z)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以一个神经元实际上就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear Transformation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Non-linear Activation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四weight到底是什么">四、Weight到底是什么？&lt;/h1>
&lt;p>Weight是模型需要学习的参数。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 = 年龄
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 = 收入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 = 购买次数
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型可能学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">w1 = 0.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">w2 = 0.7
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">w3 = 1.8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>意味着：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">购买次数
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对最终结果的影响可能比：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">年龄
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>更大。&lt;/p>
&lt;p>训练过程中，模型不断调整：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">w1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">w2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">w3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终找到一组比较合适的参数。&lt;/p>
&lt;hr>
&lt;h1 id="五bias是什么">五、Bias是什么？&lt;/h1>
&lt;p>神经元：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z = wᵀx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能无法灵活调整。&lt;/p>
&lt;p>因此加入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z = wᵀx + b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Bias可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>对神经元输出进行额外偏移。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="六dnn最重要的结构layer">六、DNN最重要的结构：Layer&lt;/h1>
&lt;p>一个Layer可以包含大量Neuron。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[ x1 x2 x3 x4 ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[ ○ ○ ○ ○ ○ ○ ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[ ○ ○ ○ ○ ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[ ○ ]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input = 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden1 = 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden2 = 64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output = 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就是一个典型DNN。&lt;/p>
&lt;hr>
&lt;h1 id="七fully-connected-layer">七、Fully Connected Layer&lt;/h1>
&lt;p>DNN中最常见的层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Fully Connected Layer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">128&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10 inputs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128 neurons
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数数量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10 × 128 + 128
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1408
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10 × 128
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是Weight。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">128
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是Bias。&lt;/p>
&lt;hr>
&lt;h1 id="八dnn的矩阵表示">八、DNN的矩阵表示&lt;/h1>
&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是输入向量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x ∈ R^n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Weight：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W ∈ R^(m×n)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z = Wx + b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z ∈ R^m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是DNN最核心的计算。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weight:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128 × 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="九为什么需要深度">九、为什么需要“深度”？&lt;/h1>
&lt;p>假设只有一层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本质上还是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y = Wx + b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这是线性模型。&lt;/p>
&lt;p>如果连续堆叠：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果中间没有激活函数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W3(W2(W1x))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终仍然可以合并成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W&amp;#39;x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也就是说：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>单纯增加Linear层并不会产生真正的深度表达能力。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>因此必须加入非线性激活函数。&lt;/p>
&lt;hr>
&lt;h1 id="十activation-function为什么重要">十、Activation Function为什么重要？&lt;/h1>
&lt;p>核心结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z1 = W1x + b1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">a1 = ReLU(z1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z2 = W2a1 + b2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">a2 = ReLU(z2)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是模型变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y = f(W2 f(W1x + b1) + b2)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>由于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">f()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是非线性的，网络才能表达复杂函数。&lt;/p>
&lt;hr>
&lt;h1 id="十一relu最经典的激活函数">十一、ReLU：最经典的激活函数&lt;/h1>
&lt;p>ReLU：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU(x) = max(0, x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">-3 → 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-1 → 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0 → 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 2 → 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 5 → 5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>ReLU的优势：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">计算简单
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">梯度传播相对稳定
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">训练速度快
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此长期成为深度学习中的经典激活函数。&lt;/p>
&lt;hr>
&lt;h1 id="十二sigmoid">十二、Sigmoid&lt;/h1>
&lt;p>Sigmoid：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">σ(x) = 1 / (1 + e^-x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出范围：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">(0, 1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此特别适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Binary Classification
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Spam = 0.95
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">95% probability
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是Sigmoid在深层网络中容易出现：&lt;/p>
&lt;blockquote>
&lt;p>Vanishing Gradient&lt;/p>
&lt;/blockquote>
&lt;p>因此隐藏层通常不再首选Sigmoid。&lt;/p>
&lt;hr>
&lt;h1 id="十三tanh">十三、Tanh&lt;/h1>
&lt;p>Tanh：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">tanh(x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出范围：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">(-1, 1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>相比Sigmoid：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">中心在0附近
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此在一些传统RNN网络中比较常见。&lt;/p>
&lt;p>但在现代深度网络中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GELU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SiLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>更加常见。&lt;/p>
&lt;hr>
&lt;h1 id="十四gelu">十四、GELU&lt;/h1>
&lt;p>Transformer和现代深度学习模型中常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GELU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>GELU可以理解为一种更加平滑的激活函数。&lt;/p>
&lt;p>Transformer类模型中常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GELU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">GELU&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十五dnn的完整前向传播">十五、DNN的完整前向传播&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数学：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z1 = W1x + b1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">a1 = ReLU(z1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z2 = W2a1 + b2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">a2 = ReLU(z2)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z3 = W3a2 + b3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ŷ = z3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Forward Propagation&lt;/p>
&lt;/blockquote>
&lt;p>即：&lt;/p>
&lt;blockquote>
&lt;p>前向传播。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十六loss模型怎么知道自己错了">十六、Loss：模型怎么知道自己错了？&lt;/h1>
&lt;p>模型预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ŷ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>真实值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>我们需要衡量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ŷ 和 y 差多少？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此定义：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss Function
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如回归：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">MSE
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>分类：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cross Entropy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十七mean-squared-error">十七、Mean Squared Error&lt;/h1>
&lt;p>MSE：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">MSE = 1/n Σ(y - ŷ)²
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;p>真实值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>误差：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>平方：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>则：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss = 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>Loss越小，说明模型预测通常越接近目标。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十八cross-entropy">十八、Cross Entropy&lt;/h1>
&lt;p>分类问题中经常使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cross Entropy Loss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>假设真实类别：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat = 0.9
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dog = 0.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Loss较低。&lt;/p>
&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cat = 0.01
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dog = 0.99
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Loss非常高。&lt;/p>
&lt;p>因此模型会通过Loss获得反馈：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weight Update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十九dnn真正的学习过程反向传播">十九、DNN真正的学习过程：反向传播&lt;/h1>
&lt;p>DNN最重要的机制之一：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>完整过程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Update Weight
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十什么是gradient">二十、什么是Gradient？&lt;/h1>
&lt;p>Gradient表示：&lt;/p>
&lt;blockquote>
&lt;p>Loss对于某个参数变化的敏感程度。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss = f(w)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>梯度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">dLoss / dw
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">gradient &amp;gt; 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>说明增加w可能导致Loss增加。&lt;/p>
&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">gradient &amp;lt; 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>说明增加w可能使Loss下降。&lt;/p>
&lt;p>所以模型可以根据梯度调整参数。&lt;/p>
&lt;hr>
&lt;h1 id="二十一gradient-descent">二十一、Gradient Descent&lt;/h1>
&lt;p>最简单的更新公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">w_new = w_old - η * gradient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">η = Learning Rate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">w = 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gradient = 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">learning_rate = 0.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>更新：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">w_new
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">10 - 0.1 × 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">9.8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不断重复：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终寻找一个Loss较低的位置。&lt;/p>
&lt;hr>
&lt;h1 id="二十二learning-rate为什么非常重要">二十二、Learning Rate为什么非常重要？&lt;/h1>
&lt;p>Learning Rate：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">η
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>决定：&lt;/p>
&lt;blockquote>
&lt;p>每次参数走多远。&lt;/p>
&lt;/blockquote>
&lt;p>太大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ /\ /\
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ /\ / \ / \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────────────→
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型可能：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">震荡
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">发散
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>太小：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss下降非常慢
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Learning Rate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是训练DNN最重要的超参数之一。&lt;/p>
&lt;hr>
&lt;h1 id="二十三sgd">二十三、SGD&lt;/h1>
&lt;p>最经典优化器：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Stochastic Gradient Descent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>基本公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">w = w - η∇L
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">optimizer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">optim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SGD&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parameters&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">lr&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">0.01&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十四momentum">二十四、Momentum&lt;/h1>
&lt;p>SGD可能：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">上下震荡
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Momentum引入历史梯度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">velocity
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>大致思想：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">当前方向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">历史运动方向
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>类似：&lt;/p>
&lt;blockquote>
&lt;p>一个带惯性的优化过程。&lt;/p>
&lt;/blockquote>
&lt;p>这样可以帮助模型更快地沿正确方向前进。&lt;/p>
&lt;hr>
&lt;h1 id="二十五adam">二十五、Adam&lt;/h1>
&lt;p>现代深度学习中非常常用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Adam
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Adam结合了：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Momentum
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Adaptive Learning Rate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">optimizer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">optim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Adam&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parameters&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">lr&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">0.001&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>DNN实验中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Adam
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常是非常好的起点。&lt;/p>
&lt;hr>
&lt;h1 id="二十六batch是什么">二十六、Batch是什么？&lt;/h1>
&lt;p>假设有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1,000,000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>训练数据。&lt;/p>
&lt;p>不可能每次把100万个样本全部送入GPU。&lt;/p>
&lt;p>因此划分：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Batch
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Batch Size = 32
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每次训练：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32 samples
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Next Batch
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十七epoch是什么">二十七、Epoch是什么？&lt;/h1>
&lt;p>一个Epoch表示：&lt;/p>
&lt;blockquote>
&lt;p>整个训练数据集完整训练一次。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Dataset = 32000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batch = 32
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32000 / 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">= 1000 steps
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一个Epoch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1000 iterations
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果训练：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">50 epochs
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">50000 iterations
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十八batch-size如何影响训练">二十八、Batch Size如何影响训练？&lt;/h1>
&lt;p>Batch太小：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient Noise
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU利用率可能较低
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Batch太大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">显存消耗
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Generalization可能变化
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此需要根据：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GPU Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Learning Rate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进行调整。&lt;/p>
&lt;hr>
&lt;h1 id="二十九overfittingdnn最常见的问题">二十九、Overfitting：DNN最常见的问题&lt;/h1>
&lt;p>训练集：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Accuracy = 99.9%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>测试集：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Accuracy = 75%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这说明模型：&lt;/p>
&lt;blockquote>
&lt;p>记住了训练数据，却没有很好地学习一般规律。&lt;/p>
&lt;/blockquote>
&lt;p>这就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Overfitting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十如何解决overfitting">三十、如何解决Overfitting？&lt;/h1>
&lt;p>常见方法：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Data Augmentation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dropout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weight Decay
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Early Stopping
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">More Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Simpler Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>核心目标：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>让模型学习规律，而不是记忆训练样本。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="三十一dropout">三十一、Dropout&lt;/h1>
&lt;p>假设隐藏层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">○ ○ ○ ○ ○ ○ ○ ○
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>训练过程中随机关闭：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">○ × ○ ○ × ○ × ○
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样可以减少：&lt;/p>
&lt;blockquote>
&lt;p>神经元之间过度依赖。&lt;/p>
&lt;/blockquote>
&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Dropout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.5&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示训练过程中大约50%的激活被随机丢弃。&lt;/p>
&lt;hr>
&lt;h1 id="三十二weight-decay">三十二、Weight Decay&lt;/h1>
&lt;p>Weight Decay通常对应L2正则化思想。&lt;/p>
&lt;p>目标函数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss_total
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss_data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">λ Σw²
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样可以惩罚过大的权重。&lt;/p>
&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">optimizer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">optim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">AdamW&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parameters&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">lr&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">1e-3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">weight_decay&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">1e-4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>现代深度学习中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">AdamW
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>非常常见。&lt;/p>
&lt;hr>
&lt;h1 id="三十三batch-normalization">三十三、Batch Normalization&lt;/h1>
&lt;p>BatchNorm可以对中间激活进行归一化。&lt;/p>
&lt;p>大致：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalize
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Scale
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Shift
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x̂ = (x - μ) / √(σ² + ε)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y = γx̂ + β
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">γ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">β
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也是可以学习的参数。&lt;/p>
&lt;hr>
&lt;h1 id="三十四为什么batchnorm有帮助">三十四、为什么BatchNorm有帮助？&lt;/h1>
&lt;p>它可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">稳定激活分布
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">改善训练
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">加快收敛
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">一定程度减少对初始化的敏感性
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>CNN中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Conv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>非常经典。&lt;/p>
&lt;hr>
&lt;h1 id="三十五layernorm">三十五、LayerNorm&lt;/h1>
&lt;p>Transformer中更加常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它和BatchNorm的归一化维度不同。&lt;/p>
&lt;p>简单理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 关注Batch维度上的统计
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 关注单个样本内部的特征维度
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ BatchNorm很常见
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ LayerNorm / RMSNorm很常见
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十六dnn参数初始化">三十六、DNN参数初始化&lt;/h1>
&lt;p>如果所有参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W = 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>会出现：&lt;/p>
&lt;blockquote>
&lt;p>Symmetry Problem&lt;/p>
&lt;/blockquote>
&lt;p>不同神经元会学习到相同的东西。&lt;/p>
&lt;p>因此通常需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Random Initialization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Xavier Initialization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">He Initialization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十七xavier-initialization">三十七、Xavier Initialization&lt;/h1>
&lt;p>适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sigmoid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tanh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>核心思想是：&lt;/p>
&lt;blockquote>
&lt;p>控制不同层之间的激活和梯度方差。&lt;/p>
&lt;/blockquote>
&lt;p>避免：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">激活越来越大
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">激活越来越小
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十八he-initialization">三十八、He Initialization&lt;/h1>
&lt;p>对于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">He Initialization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">init&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">kaiming_normal_&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>核心目的是保持深层网络中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Variance
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>相对稳定。&lt;/p>
&lt;hr>
&lt;h1 id="三十九vanishing-gradient">三十九、Vanishing Gradient&lt;/h1>
&lt;p>深层DNN中可能出现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">越来越小
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">前面的Layer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>几乎无法学习。&lt;/p>
&lt;p>这就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vanishing Gradient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常见原因：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sigmoid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tanh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Network太深
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">初始化不合理
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>解决方式包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Better Initialization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual Connection
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十exploding-gradient">四十、Exploding Gradient&lt;/h1>
&lt;p>另一种情况：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">越来越大
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∞
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>导致训练：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">NaN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss突然爆炸
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient Clipping
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Better Initialization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Lower Learning Rate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">utils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">clip_grad_norm_&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parameters&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_norm&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">1.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十一为什么residual-connection可以解决深层网络问题">四十一、为什么Residual Connection可以解决深层网络问题？&lt;/h1>
&lt;p>传统：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Residual：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x ─────┼→ Layers ──────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────→+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数学：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y = F(x) + x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样梯度可以沿着：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Identity Path
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>直接传播。&lt;/p>
&lt;p>这也是：&lt;/p>
&lt;blockquote>
&lt;p>ResNet能够训练很深网络的重要原因。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="四十二dnn与cnn是什么关系">四十二、DNN与CNN是什么关系？&lt;/h1>
&lt;p>CNN可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>针对空间数据优化过的神经网络。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>普通DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>CNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Convolution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Map
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pooling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Convolution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>核心区别：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Fully Connected
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Local Connectivity + Parameter Sharing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十三dnn与rnn是什么关系">四十三、DNN与RNN是什么关系？&lt;/h1>
&lt;p>RNN针对：&lt;/p>
&lt;blockquote>
&lt;p>序列数据。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">我
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">喜欢
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">学习
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → RNN → h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → RNN → h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → RNN → h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → RNN → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而DNN没有这种天然的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Temporal Dependency
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十四dnn与transformer是什么关系">四十四、DNN与Transformer是什么关系？&lt;/h1>
&lt;p>Transformer中的核心组件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feed Forward Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Feed Forward Network
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本质上就是一个特殊的DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GELU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>DNN并没有消失，而是成为Transformer内部的重要组成部分。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="四十五transformer中的ffn到底是什么">四十五、Transformer中的FFN到底是什么？&lt;/h1>
&lt;p>经典Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>FFN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FFN(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W2 · Activation(W1x + b1) + b2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这实际上就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">两层DNN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hidden Size = 4096
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4096
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">16384
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4096
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这也是为什么理解DNN之后，再学习Transformer会容易很多。&lt;/p>
&lt;hr>
&lt;h1 id="四十六llm中的dnn在哪里">四十六、LLM中的DNN在哪里？&lt;/h1>
&lt;p>一个Transformer Block：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Transformer Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────────┴─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Self Attention FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Linear Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─────────────┬─────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Residual
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Norm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中FFN就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此一个LLM并不是完全不同于传统神经网络的神秘系统。&lt;/p>
&lt;p>它仍然建立在：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这些基础机制之上。&lt;/p>
&lt;hr>
&lt;h1 id="四十七用pytorch实现一个完整dnn">四十七、用PyTorch实现一个完整DNN&lt;/h1>
&lt;p>下面实现一个简单的分类网络。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">nn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">DNN&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Module&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">input_dim&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">num_classes&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">super&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">network&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Sequential&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">input_dim&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">256&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BatchNorm1d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Dropout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.2&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">128&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BatchNorm1d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Dropout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.2&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">64&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ReLU&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">num_classes&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">forward&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">network&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear 256
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dropout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dropout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear 64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十八dnn训练代码">四十八、DNN训练代码&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">DNN&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_dim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_classes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">criterion&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CrossEntropyLoss&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">optimizer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">optim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">AdamW&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parameters&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">lr&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">1e-3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">weight_decay&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">1e-4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>训练：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">epoch&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">train&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">dataloader&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">optimizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">zero_grad&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">loss&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">criterion&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">loss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">backward&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">optimizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">step&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;epoch=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">epoch&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, loss=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">loss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">item&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.4f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这几行代码实际上浓缩了整个深度学习训练机制：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">zero_grad()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer Step
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十九为什么要zero_grad">四十九、为什么要zero_grad()？&lt;/h1>
&lt;p>PyTorch默认会：&lt;/p>
&lt;blockquote>
&lt;p>累积Gradient。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">loss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">backward&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">∂Loss/∂W
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>之后Gradient会保存在：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">parameter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">grad&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果下一次不清理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient_previous
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient_current
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以训练循环通常：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">optimizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">zero_grad&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">loss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">backward&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十dnn的计算图">五十、DNN的计算图&lt;/h1>
&lt;p>现代深度学习框架核心思想之一是：&lt;/p>
&lt;blockquote>
&lt;p>Computational Graph&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W1x+b1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W2x+b2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch会记录这些操作。&lt;/p>
&lt;p>当执行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">loss&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">backward&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就可以沿着计算图反向计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">∂Loss/∂W2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂W1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂b2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂Loss/∂b1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Automatic Differentiation&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="五十一dnn训练的完整生命周期">五十一、DNN训练的完整生命周期&lt;/h1>
&lt;p>一个生产级DNN项目通常不是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">写模型
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">训练
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Data Collection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data Cleaning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Engineering
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Train / Validation / Test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Design
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Initialization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Evaluation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hyperparameter Tuning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Export
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Inference
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Monitoring
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十二train--validation--test">五十二、Train / Validation / Test&lt;/h1>
&lt;p>数据通常分成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Training Set
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Validation Set
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Test Set
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">70% Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">15% Validation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">15% Test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Training：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">学习参数
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Validation：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">选择模型和超参数
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Test：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">最终评估
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不能用Test数据不断调整模型，否则会产生：&lt;/p>
&lt;blockquote>
&lt;p>Data Leakage&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="五十三dnn中的超参数">五十三、DNN中的超参数&lt;/h1>
&lt;p>需要人工决定：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Learning Rate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batch Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Epoch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Number of Layers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dropout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weight Decay
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这些叫：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hyperparameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Weight
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Bias
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是模型自己学习的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Parameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这是两个非常重要的概念。&lt;/p>
&lt;hr>
&lt;h1 id="五十四dnn为什么容易过拟合">五十四、DNN为什么容易过拟合？&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">= 10000 samples
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">100 million parameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型拥有非常强的表达能力。&lt;/p>
&lt;p>于是可能：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">训练集
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">99.99%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">测试集
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">70%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此模型容量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Model Capacity
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>必须和数据量匹配。&lt;/p>
&lt;hr>
&lt;h1 id="五十五dnn的模型容量">五十五、DNN的模型容量&lt;/h1>
&lt;p>通常：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Layers ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Units ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parameters ↑
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>意味着模型容量增加。&lt;/p>
&lt;p>但是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Capacity ↑
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不代表：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Generalization ↑
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能出现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Underfitting
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Good Fit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Overfitting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十六underfitting">五十六、Underfitting&lt;/h1>
&lt;p>训练集表现就不好：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Train Accuracy = 60%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Test Accuracy = 58%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>说明：&lt;/p>
&lt;blockquote>
&lt;p>模型甚至没有学好训练数据。&lt;/p>
&lt;/blockquote>
&lt;p>可能原因：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">模型太简单
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">训练不足
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Learning Rate不合理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature不足
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十七overfitting">五十七、Overfitting&lt;/h1>
&lt;p>训练：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">99%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>测试：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">70%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>说明：&lt;/p>
&lt;blockquote>
&lt;p>模型过度拟合训练数据。&lt;/p>
&lt;/blockquote>
&lt;p>可以尝试：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">更多数据
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data Augmentation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dropout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weight Decay
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Early Stopping
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">降低模型复杂度
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十八dnn为什么不是万能的">五十八、DNN为什么不是万能的？&lt;/h1>
&lt;p>传统DNN最大的特点：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Fully Connected
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这也意味着它对输入结构缺乏先验。&lt;/p>
&lt;p>对于图像：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Pixel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果Flatten：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>会丢失大量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Spatial Relationship
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ CNN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>更加合理。&lt;/p>
&lt;p>对于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>则通常使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN / Transformer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十九dnn最适合什么数据">五十九、DNN最适合什么数据？&lt;/h1>
&lt;p>DNN非常适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tabular Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Structured Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Vectors
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Classification
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Regression
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Ranking
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">用户年龄
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">收入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">交易次数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">点击次数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">信用评分
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Feature Vector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="六十dnn在推荐系统中的应用">六十、DNN在推荐系统中的应用&lt;/h1>
&lt;p>例如推荐系统：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User Features
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Item Features
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Context
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Click Probability
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Age
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Gender
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── History
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Location
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Item
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Category
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Price
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Brand
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过Embedding后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User Vector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Item Vector
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Context Vector
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>送入DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CTR Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这类架构在推荐系统中非常常见。&lt;/p>
&lt;hr>
&lt;h1 id="六十一dnn在风控中的应用">六十一、DNN在风控中的应用&lt;/h1>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Transaction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Engineering
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Risk Score
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">交易金额
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">交易时间
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户历史
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">设备
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">IP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">地点
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">账户行为
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Risk = 0.93
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Risk &amp;gt; Threshold
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>触发：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Review
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MFA
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="六十二dnn与传统机器学习的区别">六十二、DNN与传统机器学习的区别&lt;/h1>
&lt;p>传统机器学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Raw Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Engineering
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ML Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Raw / Processed Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neural Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Representation Learning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最大的区别之一：&lt;/p>
&lt;blockquote>
&lt;p>DNN可以同时学习Representation和Prediction。&lt;/p>
&lt;/blockquote>
&lt;p>这也是深度学习的重要优势。&lt;/p>
&lt;hr>
&lt;h1 id="六十三dnncnnrnntransformer的统一理解">六十三、DNN、CNN、RNN、Transformer的统一理解&lt;/h1>
&lt;p>可以把它们理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Neural Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────┼──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> DNN CNN RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Fully Connected Spatial Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼──────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但从底层计算来看，它们仍然共享：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parameter
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="六十四dnn是理解llm的基础">六十四、DNN是理解LLM的基础&lt;/h1>
&lt;p>一个现代LLM虽然拥有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">几十亿
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">甚至数千亿
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数，但底层仍然是大量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Linear Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如Transformer FFN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4096
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">16384
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4096
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就是一个非常典型的DNN结构。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>理解DNN的矩阵计算、参数、梯度和优化机制，是深入理解LLM训练原理的基础。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="六十五从dnn到现代ai的技术演进">六十五、从DNN到现代AI的技术演进&lt;/h1>
&lt;p>整个深度学习技术可以大致理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Perceptron
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MLP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM / GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BERT / GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multimodal Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每一次架构升级，本质上都是在解决前一代网络的某种限制。&lt;/p>
&lt;hr>
&lt;h1 id="六十六dnn最值得掌握的十大概念">六十六、DNN最值得掌握的十大概念&lt;/h1>
&lt;p>如果准备AI Engineer或者算法面试，我建议至少掌握：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1. Neuron
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Linear Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. Activation Function
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. Forward Propagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">5. Loss Function
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">6. Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">7. Gradient Descent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">8. Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">9. Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">10. Regularization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进一步：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">11. Initialization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">12. Vanishing Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">13. Exploding Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">14. Residual Connection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">15. Batch / Epoch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">16. Learning Rate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">17. Overfitting
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">18. Generalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">19. Computational Graph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">20. Automatic Differentiation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="六十七dnn最核心的一条公式">六十七、DNN最核心的一条公式&lt;/h1>
&lt;p>如果把DNN压缩成一个公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">a₀ = x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z₁ = W₁a₀ + b₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">a₁ = σ(z₁)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z₂ = W₂a₁ + b₂
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">a₂ = σ(z₂)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">zL = WLaL-1 + bL
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ŷ = fθ(x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>训练目标：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">minθ L(fθ(x), y)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>使用梯度下降：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">θ ← θ - η∇θL
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这几行数学公式基本就是DNN训练的核心。&lt;/p>
&lt;hr>
&lt;h1 id="六十八从工程师角度理解dnn">六十八、从工程师角度理解DNN&lt;/h1>
&lt;p>如果你有Java/Spring Boot等传统软件开发背景，可以把DNN类比成一个复杂的参数化计算系统：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>传统软件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Developer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">编写规则
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Program
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>深度学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Developer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">设计Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Training Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Learned Parameters
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最本质的区别：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>传统软件的规则主要由程序员编写；DNN的规则主要通过数据和优化算法学习。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="六十九dnn真正改变了什么">六十九、DNN真正改变了什么？&lt;/h1>
&lt;p>传统程序：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Rules + Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>机器学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Data + Labels
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Learning Algorithm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Model
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>深度学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Raw Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Representation Learning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此DNN最大的贡献并不是：&lt;/p>
&lt;blockquote>
&lt;p>“用了很多层神经网络。”&lt;/p>
&lt;/blockquote>
&lt;p>而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>让机器能够通过多层非线性变换自动学习越来越抽象的表示。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="七十总结真正理解dnn">七十、总结：真正理解DNN&lt;/h1>
&lt;p>最终可以用下面这张图理解DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────────┴────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forward Pass Training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Linear Layer Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Activation Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Hidden Layer Backprop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Prediction Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Update Weight
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而DNN与现代AI的关系：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Computer Vision
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── BERT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Multimodal AI
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以学习DNN最重要的不是背诵：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU公式
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Adam公式
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BatchNorm公式
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是建立一个完整的因果链：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">为什么需要Layer？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Activation？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Loss？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Gradient？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Backpropagation？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Optimizer？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么会出现Vanishing Gradient？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Normalization？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要Residual Connection？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么最终出现CNN、RNN、Transformer？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一旦这条链真正理解清楚，后面学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BERT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vision-Language Model
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就不再是孤立的技术点，而会变成一条完整的深度学习技术演进路线。&lt;/p>
&lt;p>&lt;strong>DNN是现代深度学习的“通用计算骨架”，而CNN、RNN、Transformer则是在这个骨架之上针对不同数据结构设计出来的专用架构。&lt;/strong>&lt;/p></description></item><item><title>LangChain</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/langchain/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/langchain/</guid><description>&lt;p>&lt;strong>LangChain&lt;/strong> 是一个用于构建 &lt;strong>大语言模型（LLM）应用&lt;/strong> 的开源开发框架。它最初主要支持 Python，后来也推出了 JavaScript/TypeScript 版本，目的是让开发者能够更方便地将大模型与外部数据、工具和业务流程结合起来，而不仅仅是简单地调用模型 API。&lt;/p>
&lt;p>可以把它理解为：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>如果 OpenAI、Anthropic 等提供的是“大脑”，那么 LangChain 提供的是把大脑连接到工具、数据库和业务系统的“神经系统”。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;h2 id="langchain-能做什么">LangChain 能做什么？&lt;/h2>
&lt;p>它主要解决以下几类问题：&lt;/p>
&lt;h3 id="1-统一调用各种大模型">1. 统一调用各种大模型&lt;/h3>
&lt;p>不管你使用的是：&lt;/p>
&lt;ul>
&lt;li>OpenAI GPT&lt;/li>
&lt;li>Anthropic Claude&lt;/li>
&lt;li>Google Gemini&lt;/li>
&lt;li>DeepSeek&lt;/li>
&lt;li>本地模型（如 Llama）&lt;/li>
&lt;/ul>
&lt;p>LangChain 提供了统一的接口，方便切换模型，而不用大改代码。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain_openai&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">ChatOpenAI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">llm&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ChatOpenAI&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gpt-4.1&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llm&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">invoke&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;介绍一下LangChain&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="2-prompt-管理">2. Prompt 管理&lt;/h3>
&lt;p>把 Prompt 模板化，而不是字符串拼接。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain_core.prompts&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">ChatPromptTemplate&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">prompt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ChatPromptTemplate&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_template&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;请把下面内容翻译成英文：&lt;/span>&lt;span class="si">{text}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">prompt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">invoke&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;你好&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样方便维护复杂 Prompt。&lt;/p>
&lt;hr>
&lt;h3 id="3-连接外部数据rag">3. 连接外部数据（RAG）&lt;/h3>
&lt;p>这是 LangChain 最流行的用途之一。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Word
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">网页
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 文档切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">向量数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM回答问题
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是大家常说的 &lt;strong>RAG（Retrieval-Augmented Generation，检索增强生成）&lt;/strong>。&lt;/p>
&lt;p>常用组件包括：&lt;/p>
&lt;ul>
&lt;li>Document Loader&lt;/li>
&lt;li>Text Splitter&lt;/li>
&lt;li>Embedding&lt;/li>
&lt;li>Vector Store&lt;/li>
&lt;li>Retriever&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="4-调用工具tools">4. 调用工具（Tools）&lt;/h3>
&lt;p>例如：&lt;/p>
&lt;p>模型不会算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">345678 × 2345
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它可以调用：&lt;/p>
&lt;ul>
&lt;li>Python&lt;/li>
&lt;li>搜索引擎&lt;/li>
&lt;li>天气 API&lt;/li>
&lt;li>数据库&lt;/li>
&lt;li>企业接口&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">用户：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">北京天气
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weather API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">返回天气
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM组织语言回复
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="5-agent智能体">5. Agent（智能体）&lt;/h3>
&lt;p>Agent 是 LangChain 的核心能力之一。&lt;/p>
&lt;p>例如用户说：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">帮我查一下苹果公司股价，然后写一份分析。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Agent 可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">① 理解任务
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">② 调用股票API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">③ 获取价格
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">④ 分析数据
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">⑤ 输出报告
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Agent 会决定：&lt;/p>
&lt;ul>
&lt;li>是否调用工具&lt;/li>
&lt;li>调哪个工具&lt;/li>
&lt;li>调几次&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="6-memory对话记忆">6. Memory（对话记忆）&lt;/h3>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">用户：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我叫Tom
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">好的。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我叫什么？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Memory 可以保存上下文。&lt;/p>
&lt;p>不过，现代应用通常更倾向于自己管理对话历史，而不是依赖 LangChain 早期的 Memory 抽象。&lt;/p>
&lt;hr>
&lt;h2 id="langchain-的核心模块">LangChain 的核心模块&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">LangChain
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Models（模型）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Prompts（提示词）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Chains（流程）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Tools（工具）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Agents（智能体）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Retrievers（检索）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Vector Stores（向量库）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Output Parsers（输出解析）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="一个简单流程">一个简单流程&lt;/h2>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">用户提问
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调用搜索工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">返回答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">用户
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">回答
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="langchain-与其他框架的区别">LangChain 与其他框架的区别&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>框架&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>适合场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>LangChain&lt;/td>
&lt;td>功能全面、生态成熟&lt;/td>
&lt;td>RAG、Agent、多模型集成&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>LangGraph&lt;/td>
&lt;td>基于状态机/图的 Agent 编排，更适合复杂、多步骤工作流&lt;/td>
&lt;td>多智能体、长流程应用&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>LlamaIndex&lt;/td>
&lt;td>更专注于数据接入和 RAG&lt;/td>
&lt;td>知识库问答、文档检索&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OpenAI Agents SDK&lt;/td>
&lt;td>与 OpenAI 模型和工具深度集成&lt;/td>
&lt;td>基于 OpenAI 生态开发 Agent&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="langchain-的优点">LangChain 的优点&lt;/h2>
&lt;ul>
&lt;li>支持多种模型，切换成本低。&lt;/li>
&lt;li>提供丰富的组件，覆盖 RAG、Agent、工具调用等常见场景。&lt;/li>
&lt;li>社区活跃，生态完善，与众多向量数据库、模型和第三方服务集成良好。&lt;/li>
&lt;/ul>
&lt;h2 id="需要注意的地方">需要注意的地方&lt;/h2>
&lt;ul>
&lt;li>学习曲线相对较陡，概念和组件较多。&lt;/li>
&lt;li>API 在近几年迭代较快，不同版本之间可能存在较大变化。&lt;/li>
&lt;li>对于简单应用（例如单次调用模型），直接使用模型官方 SDK 往往更轻量，不一定需要引入 LangChain。&lt;/li>
&lt;/ul>
&lt;h3 id="什么时候该用-langchain">什么时候该用 LangChain？&lt;/h3>
&lt;p>如果你的项目只是：&lt;/p>
&lt;ul>
&lt;li>调用一次 LLM 完成聊天、翻译或总结；&lt;/li>
&lt;/ul>
&lt;p>直接使用模型官方 SDK 通常已经足够。&lt;/p>
&lt;p>如果你的项目需要：&lt;/p>
&lt;ul>
&lt;li>接入企业知识库（RAG）；&lt;/li>
&lt;li>调用搜索、数据库、API 等外部工具；&lt;/li>
&lt;li>构建多步骤工作流或 Agent；&lt;/li>
&lt;li>在不同模型之间灵活切换；&lt;/li>
&lt;/ul>
&lt;p>那么 LangChain 能显著减少开发工作量，并提供更好的模块化能力。随着近年来 Agent 应用的发展，很多开发者也会结合 &lt;strong>LangGraph&lt;/strong> 使用 LangChain，以构建更复杂、更可靠的智能体系统。&lt;/p></description></item><item><title>LangGraph</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/langgraph/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/langgraph/</guid><description>&lt;p>&lt;strong>LangGraph&lt;/strong> 可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>专门用来构建“有状态、可循环、可控制”的 AI Agent 工作流框架。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>如果说 &lt;strong>LangChain 是工具箱&lt;/strong>，那么 &lt;strong>LangGraph 更像是流程引擎 / 状态机&lt;/strong>。&lt;/p>
&lt;p>这两个经常一起使用。&lt;/p>
&lt;hr>
&lt;h1 id="1-为什么需要-langgraph">1. 为什么需要 LangGraph？&lt;/h1>
&lt;p>先看一个普通的 LLM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">用户
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">回答
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>很简单。&lt;/p>
&lt;p>但是实际的 AI Agent 往往是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">用户问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">分析问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">需要查询数据库？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── 是 → 查询数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 分析结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 结果是否正确？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── 否 → 再次查询
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── 是
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">生成答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>甚至：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">用户
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调用工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">得到结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent重新思考
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调用另一个工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">得到结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent重新思考
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">最终答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这种&lt;strong>有状态、分支、循环、人工介入、多 Agent 协作&lt;/strong>的流程，就非常适合 LangGraph。&lt;/p>
&lt;hr>
&lt;h1 id="2-langgraph-最核心的思想">2. LangGraph 最核心的思想&lt;/h1>
&lt;p>LangGraph 的名字里面有一个 &lt;strong>Graph（图）&lt;/strong>。&lt;/p>
&lt;p>它把 Agent 应用抽象成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">START → 分析问题 → 查询数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────── 检查结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────┴──────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 正确 错误
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 生成答案 ←──────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> END
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里有三个非常重要的概念：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Edge
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="3-state--状态">3. State —— 状态&lt;/h1>
&lt;p>State 可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>整个 Agent 工作过程中需要保存的数据。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">State&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">TypedDict&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">question&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sql&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">answer&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>执行过程中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">question
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">result
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">answer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>State 会不断被更新。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">question = &amp;#34;查询昨天销售额&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sql = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">result = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">answer = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>SQL Agent 执行之后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">question = &amp;#34;查询昨天销售额&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sql = &amp;#34;SELECT SUM(amount) ...&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">result = &amp;#34;125000&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">answer = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">question = &amp;#34;查询昨天销售额&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sql = &amp;#34;SELECT SUM(amount) ...&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">result = &amp;#34;125000&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">answer = &amp;#34;昨天销售额为125000元&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="4-node--节点">4. Node —— 节点&lt;/h1>
&lt;p>Node 就是一个具体的处理步骤。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Node 1：分析问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node 2：生成 SQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node 3：执行 SQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node 4：检查 SQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node 5：生成答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解成 Java 中的方法：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="n">analyzeQuestion&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">generateSQL&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">executeSQL&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">checkResult&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">generateAnswer&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="5-edge--边">5. Edge —— 边&lt;/h1>
&lt;p>Edge 决定：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>下一步执行哪个 Node。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">generateSQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">executeSQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">checkSQL
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是 &lt;code>checkSQL&lt;/code> 可能有两种结果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> checkSQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> / \
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 正确 错误
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> answer generateSQL
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是 &lt;strong>Conditional Edge（条件边）&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h1 id="6-langgraph-最重要的能力循环">6. LangGraph 最重要的能力：循环&lt;/h1>
&lt;p>这是 LangGraph 和普通 Chain 一个非常重要的区别。&lt;/p>
&lt;p>例如 Agent：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">思考
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调用工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">观察结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">思考
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">调用工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">观察结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">思考
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">最终答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以形成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Think │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Tool │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Observation │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 是否完成？ ── 否 ──┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 是
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Answer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这种循环非常适合 Agent。&lt;/p>
&lt;hr>
&lt;h1 id="7-langchain-vs-langgraph">7. LangChain vs LangGraph&lt;/h1>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>LangChain&lt;/th>
&lt;th>LangGraph&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>核心思想&lt;/td>
&lt;td>LLM 应用组件&lt;/td>
&lt;td>Agent 工作流&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>抽象&lt;/td>
&lt;td>Chain / Tool / Retriever&lt;/td>
&lt;td>Graph / State / Node / Edge&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>简单 LLM&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>RAG&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Agent&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>循环&lt;/td>
&lt;td>一般&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>状态管理&lt;/td>
&lt;td>一般&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>条件分支&lt;/td>
&lt;td>有&lt;/td>
&lt;td>很强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Human-in-the-loop&lt;/td>
&lt;td>有相关能力&lt;/td>
&lt;td>很适合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>多 Agent&lt;/td>
&lt;td>可以&lt;/td>
&lt;td>很适合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>复杂工作流&lt;/td>
&lt;td>一般&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>简单来说：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LangChain
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">提供各种 AI 组件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">把这些组件组织成复杂的 Agent 工作流
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="8-一个实际例子sql-agent">8. 一个实际例子：SQL Agent&lt;/h1>
&lt;p>假设你做一个企业数据分析 AI。&lt;/p>
&lt;p>用户：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">帮我分析一下今年销售额下降的原因。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Agent 可能需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> 用户问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 分析问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 生成 SQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 查询数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 分析数据
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 是否需要更多数据？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↙ ↘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 是 否
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 再次查询 生成报告
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 分析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 最终答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用 LangGraph，就可以把它表示成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── question
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── database_result
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── analysis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── answer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── analyze_question
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── generate_sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── execute_sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── analyze_result
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── generate_answer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Edge
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── analyze → generate_sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── generate_sql → execute_sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── execute_sql → analyze_result
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── analyze_result → generate_sql / answer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就非常像一个&lt;strong>有状态的工作流引擎&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h1 id="9-为什么-java-后端工程师特别容易理解-langgraph">9. 为什么 Java 后端工程师特别容易理解 LangGraph？&lt;/h1>
&lt;p>你本身有 Java、Spring、微服务、Kubernetes 等后端背景的话，可以把 LangGraph 类比成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Spring Application
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">业务流程
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Service A
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Service B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Service C
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而 LangGraph：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Agent Workflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node A
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">根据 State 决定下一步
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node A / Node D / END
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>甚至可以把它理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>State Machine + Workflow Engine + LLM Agent&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>这个理解非常接近它的核心思想。&lt;/p>
&lt;hr>
&lt;h1 id="10-langgraph-和-spring-statemachine-的感觉很像">10. LangGraph 和 Spring StateMachine 的感觉很像&lt;/h1>
&lt;p>如果你以前接触过状态机，可以这样理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">StateMachine
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Event
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transition
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LangGraph：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Node
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Edge
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Node
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如订单：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CREATED
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PAID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SHIPPED
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DELIVERED
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Agent：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QUESTION
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">THINK
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">TOOL_CALL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OBSERVATION
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">THINK
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ANSWER
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以对于后端开发者来说，&lt;strong>LangGraph 的思维其实并不陌生&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h1 id="11-langgraph-在-ai-agent-架构中的位置">11. LangGraph 在 AI Agent 架构中的位置&lt;/h1>
&lt;p>现在你可以把整个 AI 技术栈理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> AI Application
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────┴───────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RAG Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────┴─────┐ ┌──────┴──────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Vector DB Retriever Tools Workflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Database
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而底层：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────┼────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GPT Claude Gemini
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr></description></item><item><title>LSTM：从 RNN 的梯度问题到门控记忆机制</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/lstm/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/lstm/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>LSTM（Long Short-Term Memory）&lt;/strong> 是深度学习历史上最重要的序列模型之一。
它解决了传统 RNN 在长序列训练过程中容易出现的&lt;strong>梯度消失、梯度爆炸以及长期依赖难以学习&lt;/strong>等问题。&lt;/p>
&lt;p>虽然今天 Transformer 已经成为 NLP、LLM 和多模态模型的主流架构，但理解 LSTM 依然非常重要，因为它能够帮助我们真正理解：&lt;/p>
&lt;p>&lt;strong>序列建模 → 状态记忆 → 梯度传播 → Attention → Transformer&lt;/strong>&lt;/p>
&lt;p>这一整条技术演进路线。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="一lstm-是什么">一、LSTM 是什么？&lt;/h1>
&lt;p>LSTM 全称：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Long Short-Term Memory
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>中文：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">长短期记忆网络
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它属于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Recurrent Neural Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LSTM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM 最核心的思想只有一句话：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>通过门控机制决定哪些信息应该保留、哪些信息应该遗忘、哪些信息应该输出。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>传统神经网络：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而 LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">xₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hₜ₊₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型在处理当前输入的同时，还会保留之前的信息。&lt;/p>
&lt;p>因此 LSTM 天然适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">时间序列
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语音
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">股票数据
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传感器数据
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">日志序列
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户行为序列
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二为什么需要-lstm">二、为什么需要 LSTM？&lt;/h1>
&lt;p>理解 LSTM，必须先理解 RNN。&lt;/p>
&lt;p>假设有一个句子：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">我出生在中国，后来去了美国，现在我说一口流利的 ______ 。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型在预测最后一个词的时候，需要记住：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">中国
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>甚至可能需要记住前面很远的信息。&lt;/p>
&lt;p>传统 DNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个输入基本独立。&lt;/p>
&lt;p>而 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₁ → RNN → h₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₂ → RNN → h₂
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₃ → RNN → h₃
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xₙ → RNN → hₙ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就是隐藏状态。&lt;/p>
&lt;p>可以理解为：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>hₜ 是 RNN 对过去信息的压缩记忆。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="三传统-rnn-的核心公式">三、传统 RNN 的核心公式&lt;/h1>
&lt;p>RNN 的基本公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ = tanh(Wₓxₜ + Wₕhₜ₋₁ + b)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">xₜ 当前输入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hₜ₋₁ 上一个隐藏状态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hₜ 当前隐藏状态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Wₓ 输入权重
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Wₕ 隐藏状态权重
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">b bias
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> hₜ₋₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xₜ ───→ RNN ───→ hₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">当前状态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">当前输入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">过去状态
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是 RNN 的核心。&lt;/p>
&lt;hr>
&lt;h1 id="四rnn-最大的问题长期依赖">四、RNN 最大的问题：长期依赖&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₂
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₃
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₁₀₀
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₁
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>的信息对于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₁₀₀
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>非常重要，那么 RNN 必须让这个信息经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">99次状态传递
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>才能到达最终位置。&lt;/p>
&lt;p>训练时则涉及：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Backpropagation Through Time
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>简称：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">BPTT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>梯度需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">∂L/∂h₁₀₀
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂L/∂h₉₉
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂L/∂h₉₈
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂L/∂h₁
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是出现一个严重问题：&lt;/p>
&lt;blockquote>
&lt;p>梯度需要经过大量连续乘法。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="五为什么会出现梯度消失">五、为什么会出现梯度消失？&lt;/h1>
&lt;p>假设每次梯度传播都会乘以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0.5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>连续10次：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0.5¹⁰ ≈ 0.00098
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>连续100次：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0.5¹⁰⁰ ≈ 7.9 × 10⁻³¹
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>梯度几乎变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是前面的网络层几乎无法学习。&lt;/p>
&lt;p>这就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vanishing Gradient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>梯度消失导致：&lt;/p>
&lt;blockquote>
&lt;p>RNN 很难学习非常长距离的依赖关系。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="六lstm-的核心思想">六、LSTM 的核心思想&lt;/h1>
&lt;p>LSTM 不再简单地：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去状态 + 当前输入
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是增加一个非常重要的状态：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>完整结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌─────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Cell State │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Cₜ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forget / Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xₜ ───────→ LSTM ───────→ hₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hₜ₋₁
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM 有两个核心状态：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ = Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ = Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以粗略理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 当前对外表现出来的状态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 内部长期记忆
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="七lstm-为什么叫记忆网络">七、LSTM 为什么叫“记忆网络”？&lt;/h1>
&lt;p>可以把：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>想象成一条贯穿整个序列的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Memory Highway
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数据沿着：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ₋₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ₊₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ₊₂
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>传播。&lt;/p>
&lt;p>LSTM 不会每一步都彻底重写记忆。&lt;/p>
&lt;p>而是通过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>控制：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">忘掉什么
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">记住什么
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出什么
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是 LSTM 最核心的设计。&lt;/p>
&lt;hr>
&lt;h1 id="八lstm-的三个-gate">八、LSTM 的三个 Gate&lt;/h1>
&lt;p>LSTM 有三个主要门：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解成一个“记忆管理系统”。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────┼────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forget Input Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Gate Gate Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 忘记 写入 输出
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="九forget-gate应该忘记什么">九、Forget Gate：应该忘记什么？&lt;/h1>
&lt;p>Forget Gate：&lt;/p>
&lt;blockquote>
&lt;p>决定之前的记忆哪些应该被删除。&lt;/p>
&lt;/blockquote>
&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fₜ = σ(W_f[hₜ₋₁, xₜ] + b_f)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">σ = Sigmoid
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出范围：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0 ~ 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fₜ = 0.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">这个信息基本忘掉
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fₜ = 0.9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">这个信息大部分保留
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以可以理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0 → Forget
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1 → Keep
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十input-gate应该记住什么">十、Input Gate：应该记住什么？&lt;/h1>
&lt;p>Input Gate 决定：&lt;/p>
&lt;blockquote>
&lt;p>当前输入中哪些信息值得写入长期记忆。&lt;/p>
&lt;/blockquote>
&lt;p>首先计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">iₜ = σ(W_i[hₜ₋₁, xₜ] + b_i)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后产生候选记忆：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C̃ₜ = tanh(W_c[hₜ₋₁, xₜ] + b_c)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里有两个概念：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">iₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 写入多少
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">C̃ₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 写入什么
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十一cell-state-如何更新">十一、Cell State 如何更新？&lt;/h1>
&lt;p>这是 LSTM 最核心的公式之一：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ = fₜ ⊙ Cₜ₋₁ + iₜ ⊙ C̃ₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>拆开：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">旧记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">fₜ × Cₜ₋₁
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;blockquote>
&lt;p>保留多少旧信息。&lt;/p>
&lt;/blockquote>
&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">新信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">iₜ × C̃ₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;blockquote>
&lt;p>写入多少新信息。&lt;/p>
&lt;/blockquote>
&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">新记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">旧记忆 × Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">新信息 × Input Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是 LSTM 的核心机制。&lt;/p>
&lt;hr>
&lt;h1 id="十二output-gate应该输出什么">十二、Output Gate：应该输出什么？&lt;/h1>
&lt;p>LSTM 内部可能保存了大量信息。&lt;/p>
&lt;p>但不是所有信息都需要输出。&lt;/p>
&lt;p>因此有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">oₜ = σ(W_o[hₜ₋₁, xₜ] + b_o)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ = oₜ ⊙ tanh(Cₜ)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tanh()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十三lstm-完整数学公式">十三、LSTM 完整数学公式&lt;/h1>
&lt;p>把整个 LSTM 放在一起：&lt;/p>
&lt;h3 id="forget-gate">Forget Gate&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fₜ = σ(W_f[hₜ₋₁, xₜ] + b_f)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="input-gate">Input Gate&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">iₜ = σ(W_i[hₜ₋₁, xₜ] + b_i)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="candidate-cell-state">Candidate Cell State&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C̃ₜ = tanh(W_c[hₜ₋₁, xₜ] + b_c)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="cell-state">Cell State&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ = fₜ ⊙ Cₜ₋₁ + iₜ ⊙ C̃ₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="output-gate">Output Gate&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">oₜ = σ(W_o[hₜ₋₁, xₜ] + b_o)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="hidden-state">Hidden State&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ = oₜ ⊙ tanh(Cₜ)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这六个公式就是标准 LSTM 的数学核心。&lt;/p>
&lt;hr>
&lt;h1 id="十四为什么-lstm-能缓解梯度消失">十四、为什么 LSTM 能缓解梯度消失？&lt;/h1>
&lt;p>重点观察：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ = fₜ ⊙ Cₜ₋₁ + iₜ ⊙ C̃ₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>传统 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ = tanh(...)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每一步都经历：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">非线性变换
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而 LSTM 有一条：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>允许信息进行相对直接的传播。&lt;/p>
&lt;p>梯度可以沿着：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ₋₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ₊₁
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>传播。&lt;/p>
&lt;p>这就是所谓的：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Memory Highway&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>它显著缓解了长期依赖学习中的梯度消失问题。&lt;/p>
&lt;p>注意：&lt;/p>
&lt;blockquote>
&lt;p>LSTM 是“缓解”而不是数学意义上彻底消除梯度消失。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十五一个非常直观的类比">十五、一个非常直观的类比&lt;/h1>
&lt;p>可以把 LSTM 想象成一个项目经理。&lt;/p>
&lt;p>每天都会收到新的信息：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">xₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>项目经理脑子里有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">长期记忆 Cₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>同时还需要决定：&lt;/p>
&lt;h3 id="forget-gate-1">Forget Gate&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">这个信息已经没用了
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 删除
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="input-gate-1">Input Gate&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">这个新信息非常重要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 记录
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="output-gate-1">Output Gate&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">这个信息现在需要告诉团队
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 输出
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">遗忘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">写入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">读取
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十六lstm-与普通-rnn-的结构区别">十六、LSTM 与普通 RNN 的结构区别&lt;/h1>
&lt;p>普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">xₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌───────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ RNN │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ tanh │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└───────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Cₜ₋₁
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────┴───────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forget Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───────┬───────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Cₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM 内部明显更加复杂。&lt;/p>
&lt;p>但是这种复杂性换来了：&lt;/p>
&lt;blockquote>
&lt;p>更强的长期记忆能力。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="十七为什么-lstm-使用-sigmoid">十七、为什么 LSTM 使用 Sigmoid？&lt;/h1>
&lt;p>三个 Gate：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">iₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">oₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>都需要表达：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0 ~ 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sigmoid
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">完全关闭
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">完全打开
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以 Sigmoid 非常适合作为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十八为什么-candidate-使用-tanh">十八、为什么 Candidate 使用 Tanh？&lt;/h1>
&lt;p>候选记忆：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C̃ₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>需要表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">正的信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">负的信息
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">tanh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">-1 ~ 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>比 Sigmoid 更适合表示有正负方向的信息。&lt;/p>
&lt;p>因此经典 LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Sigmoid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Candidate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Tanh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="十九lstm-的参数量">十九、LSTM 的参数量&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">input_size = D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hidden_size = H
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM 有四组主要计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Candidate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每一组都有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Weight
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Weight
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Bias
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以参数量大致：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4 × (D×H + H×H + H)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4H(D + H + 1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">D = 128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">H = 256
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">4 × 256 × (128 + 256 + 1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>约：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">394,240
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这比普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">H(D + H + 1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>大约多四倍。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>LSTM 的表达能力增强，同时计算成本也明显增加。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二十pytorch-实现-lstm">二十、PyTorch 实现 LSTM&lt;/h1>
&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">nn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">lstm&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch_first&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[batch_size, sequence_length, input_size]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[32, 100, 128]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Batch = 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence = 100
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature = 128
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">h_n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">c_n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">lstm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h_n
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c_n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>分别对应不同层面的序列输出和最终状态。&lt;/p>
&lt;hr>
&lt;h1 id="二十一完整-lstm-分类模型">二十一、完整 LSTM 分类模型&lt;/h1>
&lt;p>例如文本分类：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">nn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">LSTMClassifier&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Module&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_classes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">super&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstm&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">input_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">num_layers&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch_first&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_classes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">forward&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">h_n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">c_n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">last_hidden&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">h_n&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">last_hidden&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">output&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding / Features
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Last Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Fully Connected
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Classification
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十二lstm-中的-h-和-c">二十二、LSTM 中的 &lt;code>h&lt;/code> 和 &lt;code>c&lt;/code>&lt;/h1>
&lt;p>这是初学者非常容易混淆的地方。&lt;/p>
&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">h_n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">c_n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">lstm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_n
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c_n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="h_n">h_n&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>当前时刻对外暴露的状态。&lt;/p>
&lt;/blockquote>
&lt;h3 id="c_n">c_n&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>LSTM 内部长期记忆。&lt;/p>
&lt;/blockquote>
&lt;p>简单记：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h = hidden
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c = cell
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十三output-和-h_n-的区别">二十三、output 和 h_n 的区别&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">batch = 32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sequence = 100
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hidden = 256
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[32, 100, 256]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;blockquote>
&lt;p>每一个时间步的 Hidden State。&lt;/p>
&lt;/blockquote>
&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[num_layers, batch, hidden]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;blockquote>
&lt;p>每一层最后一个时间步的 Hidden State。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[2, 32, 256]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">2 layers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">32 batch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">256 hidden
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十四many-to-one">二十四、Many-to-One&lt;/h1>
&lt;p>LSTM 很适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Single Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">一整段文本
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">情感分类
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₁ → LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₂ → LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₃ → LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xₙ → LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hₙ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Classifier
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Positive
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>典型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sentiment Analysis
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十五many-to-many">二十五、Many-to-Many&lt;/h1>
&lt;p>也可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">输入：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我 爱 北京
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">I love Beijing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">NER
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token Label
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">我 O
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">爱 O
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">北京 B-LOC
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十六many-to-one-和-many-to-many">二十六、Many-to-One 和 Many-to-Many&lt;/h1>
&lt;p>总结：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Many-to-One
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>应用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">文本分类
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">情感分析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">异常检测
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Many-to-Many：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → y1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → y2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → y3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>应用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">序列标注
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">NER
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">时间序列预测
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十七bidirectional-lstm">二十七、Bidirectional LSTM&lt;/h1>
&lt;p>普通 LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去 → 现在
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Bidirectional LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去 → 现在
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">现在 ← 未来
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forward LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backward LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Concatenate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → x2 → x3 → x4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x1 ← x2 ← x3 ← x4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ = [h_forward ; h_backward]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此模型同时利用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">未来信息
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="二十八为什么-nlp-中-bilstm-很有价值">二十八、为什么 NLP 中 BiLSTM 很有价值？&lt;/h1>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">我去银行存钱
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>判断：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">银行
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>的含义时，前后文都很重要。&lt;/p>
&lt;p>BiLSTM可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 利用左侧上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 利用右侧上下文
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>双向 LSTM 在传统 NLP 任务中非常有效。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="二十九stacked-lstm">二十九、Stacked LSTM&lt;/h1>
&lt;p>可以堆叠多层 LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM Layer 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM Layer 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM Layer 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样可以学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">低层序列特征
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">中层序列特征
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">高层序列特征
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>类似 DNN 的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Deep Representation Learning
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十lstm-的-dropout">三十、LSTM 的 Dropout&lt;/h1>
&lt;p>当：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">num_layers &amp;gt; 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dropout&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">0.2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Dropout主要作用于：&lt;/p>
&lt;blockquote>
&lt;p>不同 LSTM 层之间的连接。&lt;/p>
&lt;/blockquote>
&lt;p>它可以降低：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Overfitting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十一lstm-与时间序列">三十一、LSTM 与时间序列&lt;/h1>
&lt;p>LSTM 曾经在时间序列预测中非常流行。&lt;/p>
&lt;p>例如股票：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Day1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Day2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Day3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Day30
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction Day31
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Open
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">High
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Low
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Close
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以构建：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[30, 5]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>送入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Price
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十二lstm-与异常检测">三十二、LSTM 与异常检测&lt;/h1>
&lt;p>例如服务器监控：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QPS
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Latency
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Error Rate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每分钟：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">t1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">t2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">t3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">t100
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM学习正常模式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Normal Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>与实际值差异很大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Error &amp;gt; Threshold
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以判断：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Anomaly
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十三lstm-与日志分析">三十三、LSTM 与日志分析&lt;/h1>
&lt;p>如果系统日志：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Login
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Payment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Order
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Logout
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以看成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Event Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM可以学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">正常行为模式
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后发现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">异常行为
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Login
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Login
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Login
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Admin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Delete
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能具有异常模式。&lt;/p>
&lt;hr>
&lt;h1 id="三十四lstm-的主要缺点">三十四、LSTM 的主要缺点&lt;/h1>
&lt;p>虽然 LSTM 很优秀，但它存在明显缺点。&lt;/p>
&lt;h2 id="1-顺序计算">1. 顺序计算&lt;/h2>
&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>必须按照时间顺序处理。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>很难充分利用 GPU 的并行计算能力。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="2-长序列效率低">2. 长序列效率低&lt;/h2>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence Length = 10000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">10000 steps
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>依次计算。&lt;/p>
&lt;p>Transformer则可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Parallel Attention
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>大规模训练更加高效。&lt;/p>
&lt;hr>
&lt;h2 id="3-参数多">3. 参数多&lt;/h2>
&lt;p>相比普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">≈ 4 × 参数量
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>计算成本更高。&lt;/p>
&lt;hr>
&lt;h1 id="三十五gru-为什么出现">三十五、GRU 为什么出现？&lt;/h1>
&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构比较复杂。&lt;/p>
&lt;p>于是出现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GRU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>全称：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gated Recurrent Unit
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>GRU的核心思想：&lt;/p>
&lt;blockquote>
&lt;p>用更少的门实现类似的记忆机制。&lt;/p>
&lt;/blockquote>
&lt;p>主要包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Update Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Reset Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>没有独立的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此结构更加简单。&lt;/p>
&lt;hr>
&lt;h1 id="三十六lstm-vs-gru">三十六、LSTM vs GRU&lt;/h1>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>特性&lt;/th>
&lt;th>LSTM&lt;/th>
&lt;th>GRU&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Forget Gate&lt;/td>
&lt;td>有&lt;/td>
&lt;td>融合到 Update&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Input Gate&lt;/td>
&lt;td>有&lt;/td>
&lt;td>融合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Output Gate&lt;/td>
&lt;td>有&lt;/td>
&lt;td>没有独立&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cell State&lt;/td>
&lt;td>有&lt;/td>
&lt;td>没有&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hidden State&lt;/td>
&lt;td>有&lt;/td>
&lt;td>有&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>参数量&lt;/td>
&lt;td>较多&lt;/td>
&lt;td>较少&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>计算速度&lt;/td>
&lt;td>较慢&lt;/td>
&lt;td>较快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>长期依赖&lt;/td>
&lt;td>强&lt;/td>
&lt;td>强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>模型复杂度&lt;/td>
&lt;td>高&lt;/td>
&lt;td>较低&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>可以简单理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 更完整的记忆机制
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 更简洁的门控机制
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十七lstm-为什么最终被-transformer-超越">三十七、LSTM 为什么最终被 Transformer 超越？&lt;/h1>
&lt;p>这是理解现代 AI 架构演进非常重要的问题。&lt;/p>
&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → x2 → x3 → x4 → ... → xn
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>信息必须一步一步传播。&lt;/p>
&lt;p>Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 ─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 ─┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 ─┼→ Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 ─┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x5 ─┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一个 Token 可以直接关注：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">任何其他 Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₁ ───────────────→ x₁₀₀
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x₂
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₃
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₄
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x₉₉
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一个一个传递。&lt;/p>
&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Self-Attention 对长距离依赖的巨大优势。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="三十八lstm-与-transformer-的根本区别">三十八、LSTM 与 Transformer 的根本区别&lt;/h1>
&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Memory-Based
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>依赖：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention-Based
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>依赖：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention Matrix
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">状态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">现在
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">所有Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Context
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此 Transformer 更容易进行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Large Scale Parallel Training
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="三十九lstm-与-attention-的结合">三十九、LSTM 与 Attention 的结合&lt;/h1>
&lt;p>在 Transformer 之前，还有一个非常重要的阶段：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM + Attention
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如 Encoder：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → LSTM → h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → LSTM → h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → LSTM → h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → LSTM → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>传统 Decoder可能只使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>问题是：&lt;/p>
&lt;blockquote>
&lt;p>h4需要压缩整个输入序列。&lt;/p>
&lt;/blockquote>
&lt;p>Attention则允许：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Decoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>动态选择重要信息。&lt;/p>
&lt;p>这成为 Transformer 出现前的重要技术过渡。&lt;/p>
&lt;hr>
&lt;h1 id="四十lstm--attention--transformer">四十、LSTM → Attention → Transformer&lt;/h1>
&lt;p>可以把技术演进理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">解决长期记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM + Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">减少信息压缩问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">大规模并行计算
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BERT / GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这条技术路线非常重要。&lt;/p>
&lt;hr>
&lt;h1 id="四十一lstm-对理解-llm-有什么价值">四十一、LSTM 对理解 LLM 有什么价值？&lt;/h1>
&lt;p>现在学习 LSTM 仍然有很大意义。&lt;/p>
&lt;p>因为它能帮助理解：&lt;/p>
&lt;h3 id="1-state">1. State&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为什么序列模型需要状态。&lt;/p>
&lt;h3 id="2-memory">2. Memory&lt;/h3>
&lt;p>为什么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去的信息
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>会影响：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">当前预测
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-gradient">3. Gradient&lt;/h3>
&lt;p>理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vanishing Gradient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-attention">4. Attention&lt;/h3>
&lt;p>理解：&lt;/p>
&lt;blockquote>
&lt;p>为什么 Transformer 不再依赖传统 RNN 的顺序记忆。&lt;/p>
&lt;/blockquote>
&lt;h3 id="5-sequence-modeling">5. Sequence Modeling&lt;/h3>
&lt;p>理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Context
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dependency
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这些概念对 LLM 都非常重要。&lt;/p>
&lt;hr>
&lt;h1 id="四十二从-ai-工程师角度理解-lstm">四十二、从 AI 工程师角度理解 LSTM&lt;/h1>
&lt;p>如果从工程角度看，LSTM 可以理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Event
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory Update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Event
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这和传统后端系统中的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Request
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Session State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">State Update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Response
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>有一定的类比。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User Event
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">User State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Action Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这类思路可以用于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">推荐系统
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户行为预测
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">异常检测
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">时间序列
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">事件预测
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十三lstm-训练过程">四十三、LSTM 训练过程&lt;/h1>
&lt;p>完整训练过程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Training Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding / Feature
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BPTT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optimizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Update Parameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注意：&lt;/p>
&lt;p>LSTM仍然使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>只是由于存在时间维度，所以称为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Backpropagation Through Time
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">BPTT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十四bptt-是怎么回事">四十四、BPTT 是怎么回事？&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → LSTM → h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → LSTM → h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → LSTM → h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → LSTM → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>反向传播：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Loss
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以叫：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Backpropagation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Through
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Time
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这也是为什么序列越长，训练越困难。&lt;/p>
&lt;hr>
&lt;h1 id="四十五lstm-的工程优化">四十五、LSTM 的工程优化&lt;/h1>
&lt;p>生产环境中使用 LSTM，需要考虑：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence Length
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batch Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Number of Layers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Bidirectional
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Padding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Packing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>特别是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Variable Length Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence A = 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence B = 50
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence C = 100
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Padding
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PackedSequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>减少无效计算。&lt;/p>
&lt;hr>
&lt;h1 id="四十六lstm-中-padding-的问题">四十六、LSTM 中 Padding 的问题&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">A = [x1,x2,x3]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">B = [x1,x2,x3,x4,x5]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>统一长度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">A = [x1,x2,x3,PAD,PAD]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">B = [x1,x2,x3,x4,x5]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PAD
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>实际上没有意义。&lt;/p>
&lt;p>因此需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Masking
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者 PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">pack_padded_sequence&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>让 LSTM 尽可能避免处理无效 Padding。&lt;/p>
&lt;hr>
&lt;h1 id="四十七lstm-的典型应用场景">四十七、LSTM 的典型应用场景&lt;/h1>
&lt;p>今天 LSTM 虽然不再是 NLP 主流，但仍然适合很多场景。&lt;/p>
&lt;h3 id="时间序列">时间序列&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">CPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Temperature
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stock
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Demand
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Traffic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="工业">工业&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sensor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Machine State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Failure Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="推荐">推荐&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User Behavior Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="异常检测">异常检测&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Log Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transaction Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="语音">语音&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Audio Feature Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="nlp">NLP&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence Classification
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">NER
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Text Classification
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>尤其在：&lt;/p>
&lt;blockquote>
&lt;p>数据量有限、模型规模不大、实时性要求高的场景中，LSTM 依然可能具有工程价值。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="四十八lstm-最重要的知识结构">四十八、LSTM 最重要的知识结构&lt;/h1>
&lt;p>如果准备 AI Engineer / Machine Learning Engineer 面试，可以建立下面的知识树：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Recurrence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── BPTT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Problem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Vanishing Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Long-Term Dependency
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Gates
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Input Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Output Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Sigmoid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── Tanh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Architecture
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── Stacked LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├── BiLSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └── LSTM + Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Modern Evolution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── Transformer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="四十九面试中最容易问的-lstm-问题">四十九、面试中最容易问的 LSTM 问题&lt;/h1>
&lt;h3 id="q1lstm-为什么能够解决-rnn-的长期依赖问题">Q1：LSTM 为什么能够解决 RNN 的长期依赖问题？&lt;/h3>
&lt;p>核心：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gated Mechanism
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>控制信息流。&lt;/p>
&lt;hr>
&lt;h3 id="q2lstm-为什么有两个-state">Q2：LSTM 为什么有两个 State？&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>负责更加长期的信息传递。&lt;/p>
&lt;hr>
&lt;h3 id="q3为什么-gate-使用-sigmoid">Q3：为什么 Gate 使用 Sigmoid？&lt;/h3>
&lt;p>因为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sigmoid ∈ (0,1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以自然表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">关闭程度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">保留程度
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="q4candidate-为什么使用-tanh">Q4：Candidate 为什么使用 Tanh？&lt;/h3>
&lt;p>因为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tanh ∈ (-1,1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>能够表达：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">正向信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">负向信息
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="q5lstm-为什么比-rnn-参数更多">Q5：LSTM 为什么比 RNN 参数更多？&lt;/h3>
&lt;p>因为 LSTM 有四组核心计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Candidate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此参数量约为普通 RNN 的四倍。&lt;/p>
&lt;hr>
&lt;h3 id="q6lstm-为什么最终被-transformer-替代">Q6：LSTM 为什么最终被 Transformer 替代？&lt;/h3>
&lt;p>主要原因：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Sequential Computation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Parallel Attention
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer 更适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">TPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Large Dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Long Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Large Model
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="五十最终总结">五十、最终总结&lt;/h1>
&lt;p>LSTM 可以浓缩成下面这一张图：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────┴──────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Hidden State Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────┬──────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forget Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Gate Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────┬──────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hₜ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最重要的公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">fₜ = σ(W_f[hₜ₋₁,xₜ] + b_f)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">iₜ = σ(W_i[hₜ₋₁,xₜ] + b_i)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">C̃ₜ = tanh(W_c[hₜ₋₁,xₜ] + b_c)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cₜ = fₜ ⊙ Cₜ₋₁ + iₜ ⊙ C̃ₜ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">oₜ = σ(W_o[hₜ₋₁,xₜ] + b_o)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hₜ = oₜ ⊙ tanh(Cₜ)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>真正理解 LSTM，需要抓住三个关键词：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而从整个 AI 技术演进来看：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">DNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM + Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BERT / GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中 LSTM 最重要的历史贡献是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>它第一次非常成功地把“记忆”和“信息流控制”结合起来，让神经网络能够更加有效地学习长期依赖。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>而 Transformer 的革命性突破，则是进一步把：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">“依靠递归状态记忆过去”
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>转变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">“通过 Attention 直接访问上下文”
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这也是从传统序列模型走向今天 LLM 的关键一步。&lt;/p>
&lt;hr>
&lt;h2 id="建议下一篇">建议下一篇&lt;/h2>
&lt;p>如果按照你现在的 &lt;strong>DNN → CNN → LSTM&lt;/strong> 学习脉络继续，下一篇最值得深入的是：&lt;/p>
&lt;p>&lt;strong>《Transformer 深度技术博客：从 Self-Attention、Multi-Head Attention 到 GPT/LLM》&lt;/strong>&lt;/p>
&lt;p>重点可以直接进入源码级和数学级分析：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么需要 Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Self-Attention 数学原理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q / K / V
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Scaled Dot-Product Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multi-Head Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Positional Encoding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer Encoder / Decoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>RNN（循环神经网络）：从序列建模到 LSTM/GRU</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/rnn/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/rnn/</guid><description>&lt;blockquote>
&lt;p>本文从 AI 工程师和系统架构师的视角，系统分析 RNN（Recurrent Neural Network，循环神经网络）的核心思想、数学原理、反向传播、梯度消失、LSTM、GRU、训练方法以及工程实践。&lt;/p>
&lt;p>RNN 虽然已经不是现代大模型的主流架构，但理解 RNN 是理解 &lt;strong>Transformer、Attention、LLM、Agent Memory 和序列建模&lt;/strong>的重要基础。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="1-为什么需要-rnn">1. 为什么需要 RNN？&lt;/h2>
&lt;p>传统神经网络通常假设输入之间相互独立。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → Neural Network → y1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → Neural Network → y2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → Neural Network → y3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是现实世界大量数据具有明显的&lt;strong>序列特征&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>自然语言&lt;/li>
&lt;li>语音&lt;/li>
&lt;li>时间序列&lt;/li>
&lt;li>股票价格&lt;/li>
&lt;li>用户行为&lt;/li>
&lt;li>传感器数据&lt;/li>
&lt;li>日志&lt;/li>
&lt;li>网络流量&lt;/li>
&lt;li>视频帧&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">我 → 喜欢 → 学习 → 人工智能
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当模型看到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">“我喜欢学习……”
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它应该能够利用前面的上下文预测后面的内容。&lt;/p>
&lt;p>这意味着模型需要具备一种能力：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>当前计算不仅依赖当前输入，还应该依赖之前看到的信息。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>RNN 的核心思想就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>把过去的信息通过 hidden state 传递到当前时刻。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="2-rnn-的核心思想">2. RNN 的核心思想&lt;/h1>
&lt;p>RNN 与普通神经网络最大的区别，是存在一个循环结构。&lt;/p>
&lt;p>基本结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x_t → [ RNN Cell ] → h_t → [ RNN Cell ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> h_(t-1)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在时间维度展开以后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 ──→ [RNN] ──→ h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 ──→ [RNN] ──→ h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 ──→ [RNN] ──→ h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 ──→ [RNN] ──→ h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;ul>
&lt;li>&lt;code>x_t&lt;/code>：当前时间步输入&lt;/li>
&lt;li>&lt;code>h_t&lt;/code>：当前隐藏状态&lt;/li>
&lt;li>&lt;code>h_(t-1)&lt;/code>：前一个时间步隐藏状态&lt;/li>
&lt;li>&lt;code>y_t&lt;/code>：当前输出&lt;/li>
&lt;/ul>
&lt;p>核心公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = f(W_xh x_t + W_hh h_(t-1) + b_h)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y_t = g(W_hy h_t + b_y)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W_xh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>负责：&lt;/p>
&lt;blockquote>
&lt;p>当前输入 → Hidden State&lt;/p>
&lt;/blockquote>
&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W_hh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>负责：&lt;/p>
&lt;blockquote>
&lt;p>Previous Hidden State → Current Hidden State&lt;/p>
&lt;/blockquote>
&lt;p>这就是 RNN 能够“记住过去”的关键。&lt;/p>
&lt;hr>
&lt;h1 id="3-rnn-本质上是什么">3. RNN 本质上是什么？&lt;/h1>
&lt;p>从工程角度看，RNN 可以理解成一个：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>带状态的神经网络。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>普通神经网络：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input + Previous State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Current State + Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State_t = F(Input_t, State_(t-1))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这实际上和很多传统系统设计思想非常类似。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="n">state&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">update&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">state&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">event&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RNN 做的事情就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = update(h_(t-1), x_t)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以可以把 RNN 看成一种：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>可学习的状态机（Learnable State Machine）。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>这是理解 RNN 非常重要的一个视角。&lt;/p>
&lt;hr>
&lt;h1 id="4-rnn-的数学结构">4. RNN 的数学结构&lt;/h1>
&lt;p>假设输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x_t ∈ R^D
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>隐藏状态：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t ∈ R^H
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W_xh ∈ R^(H×D)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W_hh ∈ R^(H×H)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>偏置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">b_h ∈ R^H
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z_t = W_xh x_t + W_hh h_(t-1) + b_h
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后经过激活函数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = tanh(z_t)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">y_t = W_hy h_t + b_y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以完整模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W_xh x_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (+) ← W_hh h_(t-1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tanh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> h_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="5-为什么-rnn-能处理变长输入">5. 为什么 RNN 能处理变长输入？&lt;/h1>
&lt;p>这是 RNN 非常重要的特点。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hello
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>长度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I love artificial intelligence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>长度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RNN 并不要求固定长度输入。&lt;/p>
&lt;p>它可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xn → hn
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence Length = n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以动态变化。&lt;/p>
&lt;p>这使 RNN 非常适合：&lt;/p>
&lt;ul>
&lt;li>NLP&lt;/li>
&lt;li>Speech Recognition&lt;/li>
&lt;li>Time Series&lt;/li>
&lt;li>Event Stream&lt;/li>
&lt;li>Sensor Data&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h1 id="6-rnn-的关键问题长期记忆">6. RNN 的关键问题：长期记忆&lt;/h1>
&lt;p>RNN 虽然能够传递状态，但存在一个非常严重的问题：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>长期依赖（Long-Term Dependency）问题。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">The cat that was sitting on the table near the window
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">was hungry.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型需要知道：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">cat → was
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是中间存在很多词。&lt;/p>
&lt;p>信息需要经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1 → h2 → h3 → h4 → ... → h50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>随着序列越来越长，早期的信息可能逐渐丢失。&lt;/p>
&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Long-Term Dependency Problem&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="7-rnn-的梯度消失问题">7. RNN 的梯度消失问题&lt;/h1>
&lt;p>这是理解 RNN 最重要的理论知识之一。&lt;/p>
&lt;p>RNN 通过时间反向传播：&lt;/p>
&lt;blockquote>
&lt;p>Backpropagation Through Time（BPTT）&lt;/p>
&lt;/blockquote>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = tanh(W_hh h_(t-1) + ...)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在反向传播过程中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">∂L/∂h_(t-k)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>需要连续乘很多 Jacobian：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">∂L/∂h_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂h_t/∂h_(t-1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∂h_(t-1)/∂h_(t-2)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>简化理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">gradient ≈ W^k
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">|W| &amp;lt; 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W^k → 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0.5^10 ≈ 0.00098
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0.5^50 ≈ 8.88 × 10^-16
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>随着时间步增加，梯度迅速趋近于：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Vanishing Gradient（梯度消失）&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="8-梯度爆炸">8. 梯度爆炸&lt;/h1>
&lt;p>另外一种情况是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">|W| &amp;gt; 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1.5^10 ≈ 57.7
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1.5^50 ≈ 6.37 × 10^8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>梯度会越来越大。&lt;/p>
&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Exploding Gradient（梯度爆炸）&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>表现为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">loss → NaN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">gradient → extremely large
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="9-gradient-clipping">9. Gradient Clipping&lt;/h1>
&lt;p>解决梯度爆炸的常见方法：&lt;/p>
&lt;blockquote>
&lt;p>Gradient Clipping&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">if ||gradient|| &amp;gt; threshold:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> gradient = gradient * threshold / ||gradient||
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PyTorch：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">utils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">clip_grad_norm_&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parameters&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_norm&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">1.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其思想非常简单：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">正常梯度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">直接更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">超大梯度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">限制最大范数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">再更新
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>需要注意：&lt;/p>
&lt;blockquote>
&lt;p>Gradient Clipping 可以缓解梯度爆炸，但不能从根本上解决 RNN 的长期依赖问题。&lt;/p>
&lt;/blockquote>
&lt;p>真正重要的解决方案是：&lt;/p>
&lt;blockquote>
&lt;p>LSTM / GRU&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="10-lstmrnn-的重要升级">10. LSTM：RNN 的重要升级&lt;/h1>
&lt;p>LSTM：&lt;/p>
&lt;blockquote>
&lt;p>Long Short-Term Memory&lt;/p>
&lt;/blockquote>
&lt;p>中文：&lt;/p>
&lt;blockquote>
&lt;p>长短期记忆网络。&lt;/p>
&lt;/blockquote>
&lt;p>LSTM 的核心思想是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>增加一个独立的 Cell State，并通过 Gate 控制信息流。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_(t-1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h_(t-1) → [ Gates + Memory ] → h_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> x_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LSTM 主要包含三个 Gate：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Input Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="11-forget-gate">11. Forget Gate&lt;/h1>
&lt;p>Forget Gate 决定：&lt;/p>
&lt;blockquote>
&lt;p>过去的信息哪些应该忘掉？&lt;/p>
&lt;/blockquote>
&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">f_t = σ(W_f [h_(t-1), x_t] + b_f)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">σ = sigmoid
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出范围：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0 ~ 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">f_t = 0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;blockquote>
&lt;p>完全忘记。&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">f_t = 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示：&lt;/p>
&lt;blockquote>
&lt;p>完全保留。&lt;/p>
&lt;/blockquote>
&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Old Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Forget Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Filtered Memory
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="12-input-gate">12. Input Gate&lt;/h1>
&lt;p>Input Gate 决定：&lt;/p>
&lt;blockquote>
&lt;p>当前输入哪些信息应该写入 Memory？&lt;/p>
&lt;/blockquote>
&lt;p>首先：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">i_t = σ(W_i[h_(t-1), x_t] + b_i)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后产生候选记忆：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C̃_t = tanh(W_C[h_(t-1), x_t] + b_C)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C_t =
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">f_t ⊙ C_(t-1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">i_t ⊙ C̃_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">⊙
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示逐元素乘法。&lt;/p>
&lt;p>这一步是 LSTM 最核心的地方。&lt;/p>
&lt;hr>
&lt;h1 id="13-output-gate">13. Output Gate&lt;/h1>
&lt;p>Output Gate 决定：&lt;/p>
&lt;blockquote>
&lt;p>当前 Memory 中哪些信息应该输出？&lt;/p>
&lt;/blockquote>
&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">o_t = σ(W_o[h_(t-1), x_t] + b_o)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = o_t ⊙ tanh(C_t)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此完整 LSTM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Cell State │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ C_t │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forget/Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x_t ─────────→ [ LSTM Cell ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> h_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="14-为什么-lstm-能解决长期依赖">14. 为什么 LSTM 能解决长期依赖？&lt;/h1>
&lt;p>这是理解 LSTM 的核心。&lt;/p>
&lt;p>普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1 → h2 → h3 → h4 → h5 → ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每一步都需要经过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">tanh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>信息很容易衰减。&lt;/p>
&lt;p>LSTM 引入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它提供了一条相对稳定的信息传递路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C1 ───────────────→ C2 ───────────────→ C3 ─────────────→ Cn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑ ↑ ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Gate Gate Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Gate 可以决定：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">保留
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">删除
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">写入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以 LSTM 本质上是在学习：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>什么信息应该记住，什么信息应该忘记。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="15-gru更简单的-lstm">15. GRU：更简单的 LSTM&lt;/h1>
&lt;p>GRU：&lt;/p>
&lt;blockquote>
&lt;p>Gated Recurrent Unit&lt;/p>
&lt;/blockquote>
&lt;p>它可以理解为：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>简化版 LSTM。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>GRU 没有独立的 Cell State。&lt;/p>
&lt;p>主要有两个 Gate：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Update Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Reset Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Update Gate：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">z_t = σ(W_z[x_t, h_(t-1)] + b_z)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Reset Gate：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">r_t = σ(W_r[x_t, h_(t-1)] + b_r)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>候选状态：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h̃_t =
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tanh(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W_h[x_t, r_t ⊙ h_(t-1)]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t =
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(1-z_t) ⊙ h_(t-1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">z_t ⊙ h̃_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="16-lstm-vs-gru">16. LSTM vs GRU&lt;/h1>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>特性&lt;/th>
&lt;th>RNN&lt;/th>
&lt;th>LSTM&lt;/th>
&lt;th>GRU&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Hidden State&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cell State&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gate&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>3&lt;/td>
&lt;td>2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>参数量&lt;/td>
&lt;td>少&lt;/td>
&lt;td>多&lt;/td>
&lt;td>中&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>长期依赖&lt;/td>
&lt;td>弱&lt;/td>
&lt;td>强&lt;/td>
&lt;td>强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>计算成本&lt;/td>
&lt;td>低&lt;/td>
&lt;td>高&lt;/td>
&lt;td>中&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>训练速度&lt;/td>
&lt;td>快&lt;/td>
&lt;td>较慢&lt;/td>
&lt;td>较快&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>工程实践中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">简单序列 → RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">复杂长期依赖 → LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">希望降低复杂度 → GRU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="17-rnn-的四种典型结构">17. RNN 的四种典型结构&lt;/h1>
&lt;p>RNN 不只是“一进一出”。&lt;/p>
&lt;p>常见结构包括：&lt;/p>
&lt;h2 id="171-one-to-one">17.1 One-to-One&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input → Model → Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>实际上普通神经网络即可。&lt;/p>
&lt;hr>
&lt;h2 id="172-one-to-many">17.2 One-to-Many&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌→ y1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x → RNN ├→ y2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └→ y3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;blockquote>
&lt;p>Image Caption&lt;/p>
&lt;/blockquote>
&lt;p>输入一张图片：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Image
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A cat is sitting...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="173-many-to-one">17.3 Many-to-One&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → RNN → y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;blockquote>
&lt;p>Sentiment Analysis&lt;/p>
&lt;/blockquote>
&lt;p>输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I really love this movie
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Positive
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="174-many-to-many">17.4 Many-to-Many&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → RNN → y1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → RNN → y2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → RNN → y3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;blockquote>
&lt;p>POS Tagging&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I → PRON
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">love → VERB
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI → NOUN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="18-bidirectional-rnn">18. Bidirectional RNN&lt;/h1>
&lt;p>普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → x2 → x3 → x4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>信息只能：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去 → 现在
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>BiRNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Forward:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x1 → x2 → x3 → x4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Backward:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → x3 → x2 → x1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = [h_forward ; h_backward]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样模型同时利用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Past Context
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Future Context
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I went to the bank to deposit money.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>“bank”的语义需要上下文判断。&lt;/p>
&lt;p>双向模型可以利用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">前文 + 后文
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此在 NLP 中非常有效。&lt;/p>
&lt;hr>
&lt;h1 id="19-rnn-的训练bptt">19. RNN 的训练：BPTT&lt;/h1>
&lt;p>RNN 训练使用：&lt;/p>
&lt;blockquote>
&lt;p>Backpropagation Through Time&lt;/p>
&lt;/blockquote>
&lt;p>首先把 RNN 在时间维度展开：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x1 → [RNN] → h1 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → [RNN] → h2 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → [RNN] → h3 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → [RNN] → h4 │
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>虽然看起来像多个网络：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>实际上它们共享参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W_xh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W_hh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W_hy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这也是 RNN 参数量不会随着序列长度线性增加的原因。&lt;/p>
&lt;hr>
&lt;h1 id="20-truncated-bptt">20. Truncated BPTT&lt;/h1>
&lt;p>如果序列特别长：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → x2 → ... → x100000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>完整 BPTT 的成本非常高。&lt;/p>
&lt;p>因此实际训练经常使用：&lt;/p>
&lt;blockquote>
&lt;p>Truncated Backpropagation Through Time&lt;/p>
&lt;/blockquote>
&lt;p>例如每：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">20 steps
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>截断一次：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → ... → x20
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Backprop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x21 → ... → x40
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Backprop
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样能够：&lt;/p>
&lt;ul>
&lt;li>降低内存消耗&lt;/li>
&lt;li>降低计算成本&lt;/li>
&lt;li>提高训练效率&lt;/li>
&lt;/ul>
&lt;p>但代价是：&lt;/p>
&lt;blockquote>
&lt;p>模型无法通过反向传播学习非常长的依赖关系。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="21-rnn-在-nlp-中的应用">21. RNN 在 NLP 中的应用&lt;/h1>
&lt;p>早期 NLP 系统大量使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN / LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Classifier
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如文本分类：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;#34;I love this product&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tokenization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Fully Connected
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Positive
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="22-word-embedding--rnn">22. Word Embedding + RNN&lt;/h1>
&lt;p>RNN 本身不能直接理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">cat
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">dog
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">machine
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通常需要 Embedding。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;#34;cat&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[0.21, -0.33, 0.72, ...]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → RNN
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此经典 NLP 架构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tokenizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN/LSTM/GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dense
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prediction
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="23-rnn-为什么最终被-transformer-大量替代">23. RNN 为什么最终被 Transformer 大量替代？&lt;/h1>
&lt;p>这是理解现代 AI 技术栈非常重要的问题。&lt;/p>
&lt;p>RNN 最大的问题不是“表达能力不足”，而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>序列计算天然具有强依赖关系。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>必须等待：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1 → h2 → h3 → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此难以完全并行。&lt;/p>
&lt;p>而 Transformer 可以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 ─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 ─┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 ─┼→ Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 ─┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x5 ─┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>大量计算可以并行执行。&lt;/p>
&lt;p>这对 GPU/TPU 非常重要。&lt;/p>
&lt;hr>
&lt;h1 id="24-rnn-与-transformer-的本质区别">24. RNN 与 Transformer 的本质区别&lt;/h1>
&lt;p>可以从“信息访问方式”理解。&lt;/p>
&lt;p>RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Current Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Previous Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Previous Context
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>信息必须逐步传递。&lt;/p>
&lt;p>Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x1 ─────────→│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 ─────────→│ Self │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 ─────────→│ Attention │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 ─────────→│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x5 ─────────→│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个 Token 可以直接关注其他 Token。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">The cat sat on the mat because it was tired.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型可以通过 Attention 直接建立：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">it → cat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而不需要像 RNN 一样依赖：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">cat → ... → it
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>逐步传递。&lt;/p>
&lt;hr>
&lt;h1 id="25-rnn--lstm--attention--transformer">25. RNN → LSTM → Attention → Transformer&lt;/h1>
&lt;p>从 AI 技术演进来看：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这条技术路线非常重要。&lt;/p>
&lt;p>可以把它理解成：&lt;/p>
&lt;h3 id="第一阶段rnn">第一阶段：RNN&lt;/h3>
&lt;p>解决：&lt;/p>
&lt;blockquote>
&lt;p>如何处理序列？&lt;/p>
&lt;/blockquote>
&lt;h3 id="第二阶段lstm--gru">第二阶段：LSTM / GRU&lt;/h3>
&lt;p>解决：&lt;/p>
&lt;blockquote>
&lt;p>如何记住长期信息？&lt;/p>
&lt;/blockquote>
&lt;h3 id="第三阶段attention">第三阶段：Attention&lt;/h3>
&lt;p>解决：&lt;/p>
&lt;blockquote>
&lt;p>当前信息应该重点关注过去的哪些信息？&lt;/p>
&lt;/blockquote>
&lt;h3 id="第四阶段transformer">第四阶段：Transformer&lt;/h3>
&lt;p>解决：&lt;/p>
&lt;blockquote>
&lt;p>如何高效、并行地进行大规模序列建模？&lt;/p>
&lt;/blockquote>
&lt;h3 id="第五阶段llm">第五阶段：LLM&lt;/h3>
&lt;p>进一步解决：&lt;/p>
&lt;blockquote>
&lt;p>如何利用 Transformer 学习语言、知识、推理和复杂任务能力？&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="26-从系统架构角度理解-rnn">26. 从系统架构角度理解 RNN&lt;/h1>
&lt;p>作为软件工程师，可以把 RNN 看成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Stream
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ State Machine│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ state = h_t │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每次输入一个 Event：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">event_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">state transition
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">new state
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t = F(h_(t-1), x_t)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这和：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Event Sourcing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stream Processing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stateful Processing
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>存在非常直观的概念联系。&lt;/p>
&lt;p>例如 Kafka Stream：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Event1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Event2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Event3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Event4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stateful Processor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Current State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>区别在于：&lt;/p>
&lt;blockquote>
&lt;p>Kafka Processor 的状态更新规则由程序员定义，而 RNN 的状态更新函数由神经网络通过训练学习出来。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="27-一个简单的-pytorch-rnn">27. 一个简单的 PyTorch RNN&lt;/h1>
&lt;p>下面是一个最基本的 RNN 模型：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">nn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">SimpleRNN&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Module&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">input_size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">output_size&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">super&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rnn&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RNN&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">input_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch_first&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output_size&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">forward&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">hidden&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rnn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">last_hidden&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">hidden&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">last_hidden&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数据：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[batch_size, sequence_length, input_size]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">x&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">shape&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[32, 50, 128]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>含义：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">32 = batch size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">50 = sequence length
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128 = feature dimension
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="28-lstm-pytorch-实现">28. LSTM PyTorch 实现&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">LSTMModel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Module&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output_size&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">super&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="fm">__init__&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstm&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">input_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch_first&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Linear&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output_size&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">forward&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">hidden&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cell&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">last_hidden&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">hidden&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">last_hidden&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hidden
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代表：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">cell
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代表：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">C_t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这正对应 LSTM 的两个状态。&lt;/p>
&lt;hr>
&lt;h1 id="29-实际工程中-rnn-的重要超参数">29. 实际工程中 RNN 的重要超参数&lt;/h1>
&lt;p>使用 RNN/LSTM/GRU 时，需要重点关注：&lt;/p>
&lt;h3 id="hidden_size">hidden_size&lt;/h3>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">64
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">128
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">256
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>越大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">模型容量 ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">计算成本 ↑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">内存 ↑
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="num_layers">num_layers&lt;/h3>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代表：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LSTM Layer 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM Layer 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM Layer 3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="dropout">dropout&lt;/h3>
&lt;p>用于降低过拟合。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_layers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dropout&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mf">0.2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="bidirectional">bidirectional&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">nn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LSTM&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">128&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hidden_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">bidirectional&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>此时输出维度通常变为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">256 × 2 = 512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="30-rnn-的主要优点">30. RNN 的主要优点&lt;/h1>
&lt;p>虽然 Transformer 已经成为主流，但 RNN 仍然有一些优势。&lt;/p>
&lt;h2 id="301-参数共享">30.1 参数共享&lt;/h2>
&lt;p>同一个 RNN Cell 可以处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xn
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>参数不随序列长度增长。&lt;/p>
&lt;hr>
&lt;h2 id="302-适合流式处理">30.2 适合流式处理&lt;/h2>
&lt;p>RNN 可以逐个处理输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Event1 → State1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Event2 → State2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Event3 → State3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此非常适合：&lt;/p>
&lt;ul>
&lt;li>Streaming&lt;/li>
&lt;li>Online Prediction&lt;/li>
&lt;li>Real-time Sensor&lt;/li>
&lt;li>Edge Computing&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="303-内存需求可以较低">30.3 内存需求可以较低&lt;/h2>
&lt;p>不需要像某些 Transformer 训练场景那样显式处理整个序列的 Attention Matrix。&lt;/p>
&lt;p>对于某些特殊的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Streaming / Online
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>场景，RNN 仍然具有价值。&lt;/p>
&lt;hr>
&lt;h1 id="31-rnn-的主要缺点">31. RNN 的主要缺点&lt;/h1>
&lt;h2 id="311-长期依赖">31.1 长期依赖&lt;/h2>
&lt;p>普通 RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Long Sequence
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Information Loss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="312-梯度消失">31.2 梯度消失&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Repeated Multiplication
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Very Small
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Learning Stops
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="313-梯度爆炸">31.3 梯度爆炸&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Gradient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Repeated Multiplication
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Very Large
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Training Instability
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="314-难以并行">31.4 难以并行&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1 → h2 → h3 → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>后一个时间步依赖前一个时间步。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GPU Parallelism
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">受限
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="32-rnn-的现代价值">32. RNN 的现代价值&lt;/h1>
&lt;p>学习 RNN 不是为了在今天所有 AI 项目中直接使用 RNN。&lt;/p>
&lt;p>真正重要的是理解它解决问题的方式。&lt;/p>
&lt;p>RNN 教会我们三个非常重要的概念：&lt;/p>
&lt;h3 id="1-state">1. State&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Past → State → Future
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-sequence-modeling">2. Sequence Modeling&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1, x2, ..., xn
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不是独立数据，而是一个整体。&lt;/p>
&lt;h3 id="3-attention-的动机">3. Attention 的动机&lt;/h3>
&lt;p>RNN：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">过去的信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">逐步压缩
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个设计天然存在信息瓶颈。&lt;/p>
&lt;p>Attention 的出现，本质上就是在解决：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>为什么一定要把整个历史压缩到一个固定大小的 Hidden State？&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Attention 让模型可以直接访问历史信息。&lt;/p>
&lt;p>这是从 RNN 理解 Transformer 最重要的桥梁之一。&lt;/p>
&lt;hr>
&lt;h1 id="33-rnnlstmtransformer-的认知模型">33. RNN、LSTM、Transformer 的认知模型&lt;/h1>
&lt;p>可以用一句话概括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我把过去压缩成一个状态。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我会决定哪些过去的信息应该保留。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我可以直接查看过去的信息，并决定关注什么。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我可以并行地让大量 Token 相互建立关系。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">我在 Transformer 的基础上学习语言、知识、推理和复杂任务。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="34-rnn-学习中的核心知识地图">34. RNN 学习中的核心知识地图&lt;/h1>
&lt;p>建议把 RNN 的知识体系理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────────┼────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Forward State Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> h_t h_(t-1) y_t
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BPTT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────┴──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Gradient Vanishing Gradient Explosion
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LSTM Gradient Clipping
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这张知识地图实际上连接了：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Deep Learning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence Modeling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM / GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Generative AI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="35-作为-ai-工程师rnn-最应该掌握什么">35. 作为 AI 工程师，RNN 最应该掌握什么？&lt;/h1>
&lt;p>如果目标是进入现代 AI / LLM 工程，而不是专门做传统序列模型，那么 RNN 不需要停留在大量公式推导上。&lt;/p>
&lt;p>建议重点掌握以下 8 个概念：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>优先级&lt;/th>
&lt;th>知识&lt;/th>
&lt;th>重要性&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>Hidden State&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>Sequence Modeling&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>BPTT&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>Vanishing Gradient&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5&lt;/td>
&lt;td>LSTM&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6&lt;/td>
&lt;td>GRU&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7&lt;/td>
&lt;td>Bidirectional RNN&lt;/td>
&lt;td>⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8&lt;/td>
&lt;td>RNN → Attention → Transformer&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>其中最重要的是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN 为什么需要 State？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么长期依赖困难？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么出现 LSTM？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么又出现 Attention？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么最终发展到 Transformer？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一旦理解了这条逻辑链，现代大模型架构会容易理解很多。&lt;/p>
&lt;hr>
&lt;h1 id="36-总结">36. 总结&lt;/h1>
&lt;p>RNN 是深度学习历史上非常重要的一类序列模型。&lt;/p>
&lt;p>它通过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Current Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Previous Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RNN Cell
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Current Hidden State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>建立了对序列数据的建模能力。&lt;/p>
&lt;p>但普通 RNN 存在：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Long-Term Dependency
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient Vanishing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient Explosion
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequential Computation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>等问题。&lt;/p>
&lt;p>于是产生：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM / GRU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>从今天 AI 技术发展的角度看，RNN 最大的价值已经不仅仅是“一个可以使用的神经网络”。&lt;/p>
&lt;p>更重要的是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>RNN 是理解现代序列建模思想的一块基石。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>如果真正理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cell State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BPTT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gradient Vanishing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM Gate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GRU Gate
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>再进一步理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就能够形成一条非常完整的 AI 技术演进链。&lt;/p></description></item><item><title>Transformer：从 Self-Attention 到现代大语言模型</title><link>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/transformer/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://wzhai-hub.github.io/Tony/ai/agent-frameworks/transformer/</guid><description>&lt;blockquote>
&lt;p>Transformer 是过去十年人工智能领域最重要的神经网络架构之一。从机器翻译、BERT、GPT，到今天的 ChatGPT、代码模型、多模态模型和 Agent，现代生成式 AI 的核心技术栈几乎都建立在 Transformer 及其衍生架构之上。&lt;/p>
&lt;p>本文不把 Transformer 简单理解为一个“神经网络模型”，而是从 &lt;strong>序列建模 → Attention → Self-Attention → Multi-Head Attention → Transformer Block → Encoder/Decoder → GPT → LLM → KV Cache → MoE&lt;/strong> 的完整技术链路进行分析。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="1-transformer-到底解决了什么问题">1. Transformer 到底解决了什么问题？&lt;/h1>
&lt;p>在 Transformer 出现之前，NLP 的主流模型之一是 RNN/LSTM。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I → love → artificial → intelligence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RNN 按顺序处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → RNN → h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → RNN → h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → RNN → h3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → RNN → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>存在两个核心问题。&lt;/p>
&lt;h2 id="问题一无法充分并行">问题一：无法充分并行&lt;/h2>
&lt;p>因为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h2 依赖 h1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h3 依赖 h2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h4 依赖 h3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1 → h2 → h3 → h4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>必须按照顺序执行。&lt;/p>
&lt;p>GPU 最擅长：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Parallel Computation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而 RNN 的时间依赖限制了并行能力。&lt;/p>
&lt;hr>
&lt;h2 id="问题二长期依赖困难">问题二：长期依赖困难&lt;/h2>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">The book that I bought yesterday from the bookstore
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">was expensive.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型在预测：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">was
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>时，需要理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">book → was
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但是两个词之间可能相隔几十甚至几百个 Token。&lt;/p>
&lt;p>RNN 需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">h1 → h2 → h3 → ... → h100
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>逐步传播信息。&lt;/p>
&lt;p>Transformer 的思路完全不同：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>不要强迫信息逐步传播，而是让 Token 直接访问其他 Token。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>这就是：&lt;/p>
&lt;h1 id="attention">Attention&lt;/h1>
&lt;hr>
&lt;h1 id="2-attention-的核心思想">2. Attention 的核心思想&lt;/h1>
&lt;p>Attention 可以理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>当前 Token 应该关注哪些其他 Token？&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">The animal didn&amp;#39;t cross the street because it was too tired.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">it
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>究竟指：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">animal
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>还是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">street
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型需要根据上下文建立关联。&lt;/p>
&lt;p>Attention 可以计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">it → animal
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>的高相关性。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↙ ↓ ↘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token Token Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="3-self-attention">3. Self-Attention&lt;/h1>
&lt;p>Transformer 最核心的技术：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Self-Attention&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>所谓 Self，是因为：&lt;/p>
&lt;blockquote>
&lt;p>Query、Key、Value 都来自同一个输入序列。&lt;/p>
&lt;/blockquote>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">X = [x1, x2, x3, x4]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Self-Attention 会产生：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x1 → 看 x1 x2 x3 x4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x2 → 看 x1 x2 x3 x4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x3 → 看 x1 x2 x3 x4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x4 → 看 x1 x2 x3 x4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也就是说：&lt;/p>
&lt;blockquote>
&lt;p>每个 Token 都可以和其他 Token 建立关系。&lt;/p>
&lt;/blockquote>
&lt;p>这就是 Transformer 强大的核心原因。&lt;/p>
&lt;hr>
&lt;h1 id="4-querykeyvalue">4. Query、Key、Value&lt;/h1>
&lt;p>Self-Attention 最重要的三个概念：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q = Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K = Key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">V = Value
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以用数据库查询来类比。&lt;/p>
&lt;p>假设你搜索：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;#34;Java concurrency&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Query = Java concurrency
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>数据库中的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Key
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用于匹配。&lt;/p>
&lt;p>匹配之后取出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Value
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Transformer 中也是类似思想。&lt;/p>
&lt;hr>
&lt;h1 id="5-qkv-如何产生">5. Q、K、V 如何产生？&lt;/h1>
&lt;p>输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">X
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过三个不同的线性变换：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q = XW_Q
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K = XW_K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">V = XW_V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">W_Q
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W_K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">W_V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>都是模型需要训练的参数。&lt;/p>
&lt;p>所以：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├──→ W_Q → Q
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├──→ W_K → K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──→ W_V → V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这是 Transformer 最重要的基础计算之一。&lt;/p>
&lt;hr>
&lt;h1 id="6-attention-score">6. Attention Score&lt;/h1>
&lt;p>有了 Q 和 K 后，需要计算：&lt;/p>
&lt;blockquote>
&lt;p>Query 与 Key 到底有多相关？&lt;/p>
&lt;/blockquote>
&lt;p>使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QKᵀ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q = [q1, q2, q3]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K = [k1, k2, k3]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QKᵀ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> k1 k2 k3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q1 8 2 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q2 1 7 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q3 2 2 9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个矩阵表示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1 对 Token1/2/3 的关注程度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token2 对 Token1/2/3 的关注程度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token3 对 Token1/2/3 的关注程度
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="7-为什么要除以-sqrtd_k">7. 为什么要除以 sqrt(d_k)？&lt;/h1>
&lt;p>Transformer 的经典 Attention 公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">softmax(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QKᵀ / √d_k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">d_k
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是 Key 的维度。&lt;/p>
&lt;p>为什么需要：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">√d_k
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>？&lt;/p>
&lt;p>因为当维度变大时：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QKᵀ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>的数值可能越来越大。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">d_k = 64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果不进行缩放：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QKᵀ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能产生非常大的数值。&lt;/p>
&lt;p>经过 Softmax 后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[0.000001, 0.999998, 0.000001]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>容易导致：&lt;/p>
&lt;blockquote>
&lt;p>Softmax 饱和。&lt;/p>
&lt;/blockquote>
&lt;p>梯度也可能变得非常小。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QKᵀ / √d_k
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以让数值保持在更加稳定的范围。&lt;/p>
&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Scaled Dot-Product Attention&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="8-softmax">8. Softmax&lt;/h1>
&lt;p>得到 Attention Score 后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">S = QKᵀ / √d_k
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>需要转换成概率分布：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">A = softmax(S)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[2.0, 1.0, 0.1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过 Softmax：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[0.66, 0.24, 0.10]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是模型可以理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token A
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">66% attention → Token1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">24% attention → Token2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">10% attention → Token3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Attention Weight&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="9-最终-attention-输出">9. 最终 Attention 输出&lt;/h1>
&lt;p>最后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">softmax(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QKᵀ / √d_k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>实际上就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention Weight
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Value
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Weighted Sum
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention Weight:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[0.7, 0.2, 0.1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Value：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">V1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">V2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">V3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.7V1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.2V2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.1V3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此 Attention 本质上是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>根据相关性，对 Value 做加权聚合。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="10-self-attention-的完整流程">10. Self-Attention 的完整流程&lt;/h1>
&lt;p>完整过程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input X
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> W_Q W_K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Q K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> \ /
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> \ /
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> QKᵀ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Scale
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Softmax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Attention Weights
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> V
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">softmax(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QKᵀ / √d_k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果只记住 Transformer 一个公式：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>记住这个。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="11-multi-head-attention">11. Multi-Head Attention&lt;/h1>
&lt;p>单个 Attention Head 只能学习一种关系。&lt;/p>
&lt;p>但是自然语言中存在很多不同类型的关系：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">语法关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语义关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">指代关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">位置关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">实体关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">上下文关系
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此 Transformer 不使用一个 Attention，而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Multi-Head Attention&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Head 1 → 语法关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Head 2 → 语义关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Head 3 → 指代关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Head 4 → 长距离关系
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="12-multi-head-attention-的结构">12. Multi-Head Attention 的结构&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">d_model = 512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">8 heads
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么每个 Head：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">d_head = 512 / 8 = 64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────┼──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Head1 Head2 Head8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Attn Attn Attn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────┼───────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Concat
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>公式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">MultiHead(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Concat(head1,...,headh)W_O
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">head_i
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QW_Q^i,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KW_K^i,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">VW_V^i
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="13-为什么-multi-head-有意义">13. 为什么 Multi-Head 有意义？&lt;/h1>
&lt;p>假设一句话：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">The developer fixed the bug because he understood the system.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不同 Head 可以学习不同关系：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Head 1:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">developer → he
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Head 2:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">fixed → bug
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Head 3:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">understood → system
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>Multi-Head Attention 让模型能够在不同表示子空间中同时学习不同类型的关系。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="14-positional-encoding">14. Positional Encoding&lt;/h1>
&lt;p>Transformer 有一个非常重要的问题：&lt;/p>
&lt;blockquote>
&lt;p>Attention 本身不知道 Token 的顺序。&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I love AI
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>和：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">AI love I
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果只看 Token 集合，Self-Attention 本身无法天然区分顺序。&lt;/p>
&lt;p>因此必须加入：&lt;/p>
&lt;blockquote>
&lt;p>Position Information&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="15-原始-transformer-的-positional-encoding">15. 原始 Transformer 的 Positional Encoding&lt;/h1>
&lt;p>论文中的经典方法：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PE(pos, 2i)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sin(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pos / 10000^(2i/d_model)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">PE(pos, 2i+1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cos(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pos / 10000^(2i/d_model)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position Encoding
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Transformer Input
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="16-为什么使用-sincos">16. 为什么使用 Sin/Cos？&lt;/h1>
&lt;p>因为正弦和余弦具有连续周期结构。&lt;/p>
&lt;p>模型可以利用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">sin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cos
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表示不同位置。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Position 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position 3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>产生不同的向量。&lt;/p>
&lt;p>而且不同维度具有不同频率。&lt;/p>
&lt;p>因此可以编码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">绝对位置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">相对位置信息
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="17-现代-transformer-的位置编码">17. 现代 Transformer 的位置编码&lt;/h1>
&lt;p>需要特别注意：&lt;/p>
&lt;blockquote>
&lt;p>现代 LLM 并不一定使用原始 Transformer 的 Sin/Cos Positional Encoding。&lt;/p>
&lt;/blockquote>
&lt;p>例如很多现代模型采用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RoPE
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;blockquote>
&lt;p>Rotary Positional Embedding&lt;/p>
&lt;/blockquote>
&lt;p>另外还有：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ALiBi
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Relative Position Encoding
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>等方法。&lt;/p>
&lt;p>尤其在现代 GPT 类模型中：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>RoPE 是理解现代 LLM 架构非常重要的知识点。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="18-transformer-encoder">18. Transformer Encoder&lt;/h1>
&lt;p>经典 Transformer 论文：&lt;/p>
&lt;blockquote>
&lt;p>Attention Is All You Need&lt;/p>
&lt;/blockquote>
&lt;p>提出了 Encoder-Decoder 架构。&lt;/p>
&lt;p>Encoder：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Positional Encoding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Encoder Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Encoder Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个 Encoder Block 主要包含：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Multi-Head Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feed Forward Network
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="19-transformer-encoder-block">19. Transformer Encoder Block&lt;/h1>
&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Multi-Head Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Add + Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Feed Forward
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Add + Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>两个非常重要的组件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Residual Connection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Layer Normalization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="20-residual-connection">20. Residual Connection&lt;/h1>
&lt;p>Residual Connection：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Output = F(x) + x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而不是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Output = F(x)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x ─────→ F(x) ───────→ (+)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为什么这样做？&lt;/p>
&lt;p>因为深层网络容易：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">梯度消失
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">训练困难
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Residual Connection 提供了一条：&lt;/p>
&lt;blockquote>
&lt;p>Gradient Highway&lt;/p>
&lt;/blockquote>
&lt;p>使梯度可以更稳定地传播。&lt;/p>
&lt;p>ResNet、Transformer 都大量使用这种思想。&lt;/p>
&lt;hr>
&lt;h1 id="21-layer-normalization">21. Layer Normalization&lt;/h1>
&lt;p>Transformer 大量使用：&lt;/p>
&lt;blockquote>
&lt;p>LayerNorm&lt;/p>
&lt;/blockquote>
&lt;p>它与 BatchNorm 有重要区别。&lt;/p>
&lt;p>BatchNorm：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Batch Dimension
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>LayerNorm：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Feature Dimension
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于 NLP/Transformer 来说：&lt;/p>
&lt;blockquote>
&lt;p>LayerNorm 更适合序列数据。&lt;/p>
&lt;/blockquote>
&lt;p>基本形式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LN(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">γ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x - μ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">√(σ² + ε)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">β
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">μ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">σ²
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是当前样本特征维度上的统计量。&lt;/p>
&lt;hr>
&lt;h1 id="22-feed-forward-network">22. Feed Forward Network&lt;/h1>
&lt;p>Transformer Block 中另一个重要组件：&lt;/p>
&lt;blockquote>
&lt;p>Feed Forward Network&lt;/p>
&lt;/blockquote>
&lt;p>通常：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FFN(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation(xW1 + b1)W2 + b2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">512
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2048
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Linear
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经典 Transformer 使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>现代 LLM 常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GELU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SwiGLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GeGLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="23-ffn-到底在干什么">23. FFN 到底在干什么？&lt;/h1>
&lt;p>Attention 主要负责：&lt;/p>
&lt;blockquote>
&lt;p>Token 与 Token 之间的信息交互。&lt;/p>
&lt;/blockquote>
&lt;p>FFN 更像：&lt;/p>
&lt;blockquote>
&lt;p>对每一个 Token 独立进行非线性特征变换。&lt;/p>
&lt;/blockquote>
&lt;p>因此可以简单理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token之间通信
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token内部计算
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这是理解 Transformer Block 非常好的抽象。&lt;/p>
&lt;hr>
&lt;h1 id="24-attention--ffn">24. Attention + FFN&lt;/h1>
&lt;p>因此一个 Transformer Block 可以抽象成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token Communication
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Transformation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>从这个角度看：&lt;/p>
&lt;blockquote>
&lt;p>Transformer 本质上是一个不断进行“信息通信 + 特征计算”的深层网络。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="25-transformer-decoder">25. Transformer Decoder&lt;/h1>
&lt;p>Decoder 与 Encoder 不完全相同。&lt;/p>
&lt;p>Decoder 主要包含：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Masked Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cross Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feed Forward
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Masked Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cross Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add &amp;amp; Norm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="26-为什么-decoder-需要-mask">26. 为什么 Decoder 需要 Mask？&lt;/h1>
&lt;p>考虑生成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">I love artificial intelligence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当模型生成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">artificial
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>时，它不能偷看：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">intelligence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>否则训练任务就作弊了。&lt;/p>
&lt;p>因此 Decoder 使用：&lt;/p>
&lt;blockquote>
&lt;p>Causal Mask / Look-Ahead Mask&lt;/p>
&lt;/blockquote>
&lt;p>形成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1 → Token1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token2 → Token1 Token2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token3 → Token1 Token2 Token3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token4 → Token1 Token2 Token3 Token4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Attention Matrix：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1 0 0 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1 1 0 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1 1 1 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1 1 1 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Causal Attention&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="27-gpt-为什么只需要-decoder">27. GPT 为什么只需要 Decoder？&lt;/h1>
&lt;p>现代 GPT 类模型通常采用：&lt;/p>
&lt;blockquote>
&lt;p>Decoder-only Transformer&lt;/p>
&lt;/blockquote>
&lt;p>结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tokens
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LM Head
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它不需要传统 Transformer 中的 Encoder。&lt;/p>
&lt;p>原因是 GPT 的核心任务是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Autoregressive Language Modeling&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P(x_t | x_1, x_2, ..., x_(t-1))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>预测下一个 Token。&lt;/p>
&lt;hr>
&lt;h1 id="28-gpt-的本质">28. GPT 的本质&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The weather today is
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型计算：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> next_token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> The weather today is
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">good 0.32
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">beautiful 0.18
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sunny 0.12
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后选择：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">good
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>得到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">The weather today is good
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>继续：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> next_token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> The weather today is good
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是不断生成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是 LLM 最基础的生成机制。&lt;/p>
&lt;hr>
&lt;h1 id="29-transformer-与-llm-的关系">29. Transformer 与 LLM 的关系&lt;/h1>
&lt;p>需要明确：&lt;/p>
&lt;blockquote>
&lt;p>Transformer ≠ LLM&lt;/p>
&lt;/blockquote>
&lt;p>Transformer 是：&lt;/p>
&lt;blockquote>
&lt;p>Neural Network Architecture&lt;/p>
&lt;/blockquote>
&lt;p>LLM 是：&lt;/p>
&lt;blockquote>
&lt;p>Large Language Model&lt;/p>
&lt;/blockquote>
&lt;p>关系可以理解为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">模型架构
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPT / LLaMA / Qwen 等
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">大规模参数 + 大规模数据 + 大规模训练
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是建筑结构。&lt;/p>
&lt;p>而：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>是利用这种建筑结构建出来的大型系统。&lt;/p>
&lt;hr>
&lt;h1 id="30-tokenization">30. Tokenization&lt;/h1>
&lt;p>LLM 并不是直接处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;#34;Hello world&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tokenizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token IDs
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Hello world
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能变成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">[15496, 995]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>具体 Token ID 取决于 Tokenizer。&lt;/p>
&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token ID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终 Transformer 接收的是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vector Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="31-embedding">31. Embedding&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vocabulary = 100000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding Dimension = 4096
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Embedding Matrix：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">E ∈ R^(100000 × 4096)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每一个 Token 都对应一个向量：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token ID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding Lookup
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[0.12, -0.37, ..., 0.82]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所以：&lt;/p>
&lt;blockquote>
&lt;p>Embedding 是把离散 Token 映射到连续向量空间。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="32-transformer-的完整数据流">32. Transformer 的完整数据流&lt;/h1>
&lt;p>现代 Decoder-only LLM 可以抽象为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Tokenizer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Token IDs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Position Encoding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Transformer Block │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LayerNorm │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Self-Attention │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Residual │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LayerNorm │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ FFN │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Residual │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Final LayerNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LM Head
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Logits
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Softmax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Next Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这基本就是现代 GPT 类 LLM 的核心计算链路。&lt;/p>
&lt;hr>
&lt;h1 id="33-logits">33. Logits&lt;/h1>
&lt;p>Transformer 最终不会直接输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;#34;hello&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而是输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">logits
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如词表：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hello
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">world
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Java
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>模型可能输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hello → 2.3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">world → 1.8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI → 4.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Java → 0.7
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>经过 Softmax：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">hello → 0.08
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">world → 0.05
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AI → 0.72
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Java → 0.01
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后根据：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Greedy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Temperature
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Top-K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Top-P
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>等策略选择下一个 Token。&lt;/p>
&lt;hr>
&lt;h1 id="34-temperature">34. Temperature&lt;/h1>
&lt;p>Temperature 用于控制随机性。&lt;/p>
&lt;p>Softmax：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P_i =
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">exp(z_i / T)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Σ exp(z_j / T)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">T &amp;lt; 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>分布更加尖锐：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">更确定
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">T &amp;gt; 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>分布更加平滑：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">更随机
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">T ↓ → deterministic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">T ↑ → creative
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="35-top-k">35. Top-K&lt;/h1>
&lt;p>假设：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Vocabulary = 100000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Top-K：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">K = 50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>只保留概率最高的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">50 tokens
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其他：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">99950 tokens
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>直接忽略。&lt;/p>
&lt;p>这样可以减少：&lt;/p>
&lt;blockquote>
&lt;p>极低概率 Token 导致的异常生成。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="36-top-p">36. Top-P&lt;/h1>
&lt;p>Top-P 又叫：&lt;/p>
&lt;blockquote>
&lt;p>Nucleus Sampling&lt;/p>
&lt;/blockquote>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P = 0.9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>按照概率从高到低累加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">0.40
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.25
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.15
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.07
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0.03
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>直到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">累计概率 ≥ 0.9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>只从这些 Token 中采样。&lt;/p>
&lt;p>相比固定：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Top-K
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Top-P 更动态。&lt;/p>
&lt;hr>
&lt;h1 id="37-transformer-的计算复杂度">37. Transformer 的计算复杂度&lt;/h1>
&lt;p>Self-Attention 最大的问题：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">QKᵀ
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Sequence Length = n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Attention Matrix：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">n × n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此时间/空间复杂度大致与：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">O(n²)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>相关。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">n = 1,000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Attention Matrix：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">1,000 × 1,000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1,000,000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">n = 100,000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">100,000 × 100,000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">10,000,000,000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这就是：&lt;/p>
&lt;blockquote>
&lt;p>Long Context Transformer 的核心挑战之一。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="38-为什么-llm-需要-kv-cache">38. 为什么 LLM 需要 KV Cache？&lt;/h1>
&lt;p>生成式 LLM 是逐 Token 生成的。&lt;/p>
&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Token4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果每生成一个 Token 都重新计算之前所有 Token 的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>会产生大量重复计算。&lt;/p>
&lt;p>因此缓存：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Value
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即：&lt;/p>
&lt;blockquote>
&lt;p>KV Cache&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="39-kv-cache-的工作原理">39. KV Cache 的工作原理&lt;/h1>
&lt;p>第一次：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K1 V1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第二次：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1 Token2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K1 V1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K2 V2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第三次：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token1 Token2 Token3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K1 V1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K2 V2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K3 V3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>之前计算过的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">K1 V1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K2 V2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以直接复用。&lt;/p>
&lt;p>因此：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">KV Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">避免重复计算
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="40-kv-cache-的工程代价">40. KV Cache 的工程代价&lt;/h1>
&lt;p>KV Cache 虽然提升了推理速度，但需要大量 GPU Memory。&lt;/p>
&lt;p>大致可以理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">KV Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∝
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batch Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sequence Length
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Number of Layers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KV Heads
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">×
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Head Dimension
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此 LLM Serving 系统中非常重要的问题包括：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GPU Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KV Cache Management
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Paged Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Continuous Batching
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这已经从：&lt;/p>
&lt;blockquote>
&lt;p>AI Model&lt;/p>
&lt;/blockquote>
&lt;p>进入：&lt;/p>
&lt;blockquote>
&lt;p>AI Systems Engineering&lt;/p>
&lt;/blockquote>
&lt;p>领域。&lt;/p>
&lt;hr>
&lt;h1 id="41-mqa-和-gqa">41. MQA 和 GQA&lt;/h1>
&lt;p>为了降低 KV Cache 的内存成本，现代模型引入：&lt;/p>
&lt;h3 id="mqa">MQA&lt;/h3>
&lt;blockquote>
&lt;p>Multi-Query Attention&lt;/p>
&lt;/blockquote>
&lt;p>多个 Query Head：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q1 Q2 Q3 Q4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>共享：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">K V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="gqa">GQA&lt;/h3>
&lt;blockquote>
&lt;p>Grouped-Query Attention&lt;/p>
&lt;/blockquote>
&lt;p>多个 Query Head 分组共享：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">K/V Heads
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q1 Q2 → KV1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q3 Q4 → KV2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q5 Q6 → KV3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q7 Q8 → KV4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>相比传统 MHA：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q1 → K1 V1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q2 → K2 V2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q3 → K3 V3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>GQA 可以明显降低：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">KV Cache
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>同时保持较好的模型能力。&lt;/p>
&lt;hr>
&lt;h1 id="42-flashattention">42. FlashAttention&lt;/h1>
&lt;p>Transformer 的另一个重要优化：&lt;/p>
&lt;blockquote>
&lt;p>FlashAttention&lt;/p>
&lt;/blockquote>
&lt;p>它并不是简单地修改 Attention 数学公式，而是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>通过 IO-aware 的 GPU Kernel 优化 Attention 计算。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>传统 Attention：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QKᵀ
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Softmax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">× V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>中间可能产生巨大的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">N × N
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>矩阵。&lt;/p>
&lt;p>FlashAttention 通过更加高效的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Tiling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory Hierarchy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Kernel Fusion
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>减少 GPU HBM 与 SRAM 之间的数据搬运。&lt;/p>
&lt;p>核心思想可以简单理解成：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>不要只是优化 FLOPs，更要优化 GPU Memory Access。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>这是现代 LLM 系统优化的重要思想。&lt;/p>
&lt;hr>
&lt;h1 id="43-pre-norm-vs-post-norm">43. Pre-Norm vs Post-Norm&lt;/h1>
&lt;p>原始 Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>属于：&lt;/p>
&lt;blockquote>
&lt;p>Post-Norm&lt;/p>
&lt;/blockquote>
&lt;p>现代 LLM 更常见：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Add
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>属于：&lt;/p>
&lt;blockquote>
&lt;p>Pre-Norm&lt;/p>
&lt;/blockquote>
&lt;p>即：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">x + Attention(LN(x))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>相比：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LN(x + Attention(x))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Pre-Norm 通常具有更好的深层训练稳定性。&lt;/p>
&lt;hr>
&lt;h1 id="44-rmsnorm">44. RMSNorm&lt;/h1>
&lt;p>现代 LLM 中还经常看到：&lt;/p>
&lt;blockquote>
&lt;p>RMSNorm&lt;/p>
&lt;/blockquote>
&lt;p>它比 LayerNorm 更简单。&lt;/p>
&lt;p>LayerNorm：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">减均值
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">除标准差
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>RMSNorm：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">只考虑 RMS
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>形式大致：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RMS(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sqrt(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mean(x²) + ε
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RMSNorm(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">x / RMS(x) × weight
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>优点：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">计算简单
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数少
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">效率高
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="45-激活函数从-relu-到-swiglu">45. 激活函数：从 ReLU 到 SwiGLU&lt;/h1>
&lt;p>经典 Transformer：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ReLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>现代 LLM 经常使用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">SwiGLU
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">SwiGLU(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(SiLU(xW_g))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">⊙
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(xW_u)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SwiGLU(x)W_d
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>SwiGLU 的目标是：&lt;/p>
&lt;blockquote>
&lt;p>在控制计算成本的同时增强模型表达能力。&lt;/p>
&lt;/blockquote>
&lt;p>因此现代 LLM 的 Transformer Block 与 2017 年原始论文中的 Transformer 已经存在不少差异。&lt;/p>
&lt;hr>
&lt;h1 id="46-moetransformer-的进一步演化">46. MoE：Transformer 的进一步演化&lt;/h1>
&lt;p>当模型越来越大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">7B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">13B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">70B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">400B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一个问题出现：&lt;/p>
&lt;blockquote>
&lt;p>如果所有参数每次都参与计算，成本非常高。&lt;/p>
&lt;/blockquote>
&lt;p>于是出现：&lt;/p>
&lt;blockquote>
&lt;p>Mixture of Experts（MoE）&lt;/p>
&lt;/blockquote>
&lt;p>基本思想：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Input
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Router
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌────┬────┬────┬────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Expert1 Expert2 Expert3 Expert4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└────┴────┴────┴────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Selected Experts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Output
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">总参数：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">100B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每个 Token 实际激活：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">20B
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>于是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Total Parameters ≠ Active Parameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这成为现代大模型架构的重要方向。&lt;/p>
&lt;hr>
&lt;h1 id="47-transformer-的工程视角">47. Transformer 的工程视角&lt;/h1>
&lt;p>对于传统软件工程师来说，可以把 Transformer 看成一个大型分布式计算系统的“计算核心”。&lt;/p>
&lt;p>一个 Token 进入系统后：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Communication
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Logits
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>从软件架构角度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Data Representation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Information Routing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Feature Processing
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stable Data Flow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Numerical Stabilization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KV Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">State / Cache Management
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Throughput Optimization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU Kernel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Execution Optimization
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>现代 LLM 不只是机器学习问题，也是一个极其复杂的分布式系统和高性能计算问题。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="48-transformer-与-agent-的关系">48. Transformer 与 Agent 的关系&lt;/h1>
&lt;p>如果进一步进入 Agent 领域，可以看到：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Reasoning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool Selection
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Observation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Action
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里 Transformer 负责：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Context Understanding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Reasoning
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Generation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool Calling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Planning
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>而 Agent 系统负责：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tools
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Workflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Execution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Observation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此可以理解：&lt;/p>
&lt;blockquote>
&lt;p>Transformer 是 Agent 的“大脑计算核心”，而 Agent 系统则是在 Transformer 外部构建了状态、工具、环境和执行能力。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="49-transformer-的完整知识地图">49. Transformer 的完整知识地图&lt;/h1>
&lt;p>把整个 Transformer 技术体系串起来：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────────────────┼────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Embedding Attention FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ┌──────┴──────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Self Multi-Head │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Attention Attention │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └──────┬──────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────────────┼────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Residual + Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transformer Block
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┴─────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Encoder Decoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> BERT GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────────────┼───────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RoPE KV Cache MoE
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Position Info Serving Scaling
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="50-transformer-最重要的几个公式">50. Transformer 最重要的几个公式&lt;/h1>
&lt;p>如果准备 AI Engineer / LLM Engineer 面试，建议至少熟悉下面几个公式。&lt;/p>
&lt;h2 id="attention-1">Attention&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">softmax(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">QKᵀ / √d_k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">)V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="multi-head-attention">Multi-Head Attention&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">MultiHead(Q,K,V)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Concat(head1,...,headh)W_O
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="ffn">FFN&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">FFN(x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Activation(xW1+b1)W2+b2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="autoregressive-language-modeling">Autoregressive Language Modeling&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">P(x1,...,xn)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">∏ P(x_t | x_&amp;lt;t)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="cross-entropy">Cross Entropy&lt;/h2>
&lt;p>语言模型训练通常最小化：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">L
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">=
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-Σ y_t log(p_t)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本质上：&lt;/p>
&lt;blockquote>
&lt;p>让正确的下一个 Token 获得更高概率。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="51-transformer-为什么如此成功">51. Transformer 为什么如此成功？&lt;/h1>
&lt;p>可以归纳成五个原因。&lt;/p>
&lt;h2 id="第一attention">第一：Attention&lt;/h2>
&lt;p>解决长距离依赖。&lt;/p>
&lt;hr>
&lt;h2 id="第二高度并行">第二：高度并行&lt;/h2>
&lt;p>适合：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">GPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">TPU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Distributed Training
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="第三可扩展">第三：可扩展&lt;/h2>
&lt;p>可以通过增加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Layers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hidden Size
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention Heads
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Training Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>持续扩大模型。&lt;/p>
&lt;hr>
&lt;h2 id="第四统一架构">第四：统一架构&lt;/h2>
&lt;p>文本：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>图片：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Patch
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>音频：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Audio Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>代码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Code Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本质上都可以转化成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Embedding Sequence
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后交给 Transformer。&lt;/p>
&lt;hr>
&lt;h2 id="第五scaling-law">第五：Scaling Law&lt;/h2>
&lt;p>Transformer 与大规模：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Compute
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parameters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>结合后表现出非常强的 Scaling 能力。&lt;/p>
&lt;p>这为今天的：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Foundation Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multimodal Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>奠定了基础。&lt;/p>
&lt;hr>
&lt;h1 id="52-从-rnn-到-transformer-的真正技术演进">52. 从 RNN 到 Transformer 的真正技术演进&lt;/h1>
&lt;p>可以把整个过程理解成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 解决序列建模
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LSTM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 解决长期记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 解决信息瓶颈
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 解决并行计算与大规模训练
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPT / BERT / T5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 模型规模扩大
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Tool / Memory / Multimodal
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>因此学习 Transformer 时，不应该只记：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Q
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>真正应该理解的是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Transformer 为什么出现？&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>答案是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">RNN 的顺序计算
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">长期依赖问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> +
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">信息压缩瓶颈
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="53-ai-工程师学习-transformer-的正确层次">53. AI 工程师学习 Transformer 的正确层次&lt;/h1>
&lt;p>如果目标是从传统后端工程进入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">AI Engineer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM Engineer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent Engineer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>建议分四层掌握。&lt;/p>
&lt;h2 id="level-1原理">Level 1：原理&lt;/h2>
&lt;p>必须理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q/K/V
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Softmax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multi-Head Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LayerNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position Encoding
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="level-2模型">Level 2：模型&lt;/h2>
&lt;p>理解：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Encoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Decoder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BERT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">T5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RoPE
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RMSNorm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SwiGLU
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GQA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MoE
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="level-3推理">Level 3：推理&lt;/h2>
&lt;p>重点学习：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">KV Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Batching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Continuous Batching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FlashAttention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Quantization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tensor Parallel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pipeline Parallel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Speculative Decoding
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="level-4ai-systems">Level 4：AI Systems&lt;/h2>
&lt;p>进一步进入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">LLM Serving
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Model Gateway
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Prompt Management
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Vector Database
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Tool Calling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Observability
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Evaluation
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>最终形成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> AI Application
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌────┴────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓ ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RAG Agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Transformer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> GPU / Distributed System
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h1 id="54-最终总结">54. 最终总结&lt;/h1>
&lt;p>Transformer 最核心的思想可以浓缩成一句话：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>让序列中的每一个 Token 能够动态地选择自己应该关注的信息。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>它通过：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q/K/V
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Self-Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multi-Head Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual + Norm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Transformer Blocks
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Logits
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Next Token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>构成现代 LLM 的基本计算框架。&lt;/p>
&lt;p>如果 RNN 的核心是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">State
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>那么 Transformer 的核心就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果进一步看现代 LLM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Attention
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FFN
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Residual
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Normalization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Position Encoding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Scaling
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KV Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GPU Optimization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Distributed Training
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>共同构成了今天的大模型技术栈。&lt;/p>
&lt;p>而对于 AI Engineer 来说，最重要的认知不是：&lt;/p>
&lt;blockquote>
&lt;p>“Transformer 是一个很复杂的神经网络。”&lt;/p>
&lt;/blockquote>
&lt;p>而应该是：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Transformer 是一种高度可并行、可扩展的序列信息处理架构；Attention 负责信息路由，FFN 负责特征变换，Residual/Normalization 保证深层训练稳定，而 KV Cache、FlashAttention、GQA、MoE 等技术则把它从一个论文模型逐渐演化成了今天能够支撑大规模 LLM 的工业级计算系统。&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>从 RNN 到 Transformer，再到 LLM 和 Agent，这实际上是一条非常完整的 AI 技术演进主线。&lt;/p>
&lt;p>你下一步更适合深入 &lt;strong>① Attention/Transformer 手写源码&lt;/strong>、&lt;strong>② GPT/LLM 内部架构&lt;/strong>，还是 &lt;strong>③ KV Cache + FlashAttention + LLM 推理系统&lt;/strong>？&lt;/p></description></item></channel></rss>