<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; Math</title>
	<atom:link href="https://blog.gmem.cc/category/work/math/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Tue, 12 May 2026 13:32:40 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>人工智能知识 - 数学基础</title>
		<link>https://blog.gmem.cc/ai-knowledge-quick-ref-1</link>
		<comments>https://blog.gmem.cc/ai-knowledge-quick-ref-1#comments</comments>
		<pubDate>Wed, 15 Apr 2026 12:39:04 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://blog.gmem.cc/?p=40317</guid>
		<description><![CDATA[<p>这一篇整理 AI 所需的数学基础，包括基础数学、线性代数、微积分与概率论统计。它回答的核心问题是：模型里的向量、矩阵、导数、积分、概率分布、期望与信息量分别是什么意思，以及它们为什么会成为后续机器学习与深度学习的共同语言；后续篇章将在这些数学工具之上进入算法、学习理论与模型结构。 基础数学 代数基础 运算律与代数式 代数式（Algebraic Expression）由常数、变量与运算构成；给定变量取值后即可求值。化简（Simplification）的目标是把表达式写成更可读、更便于推导/比较的等价形式：合并同类项（Like Terms）、提取公因子（Common Factor）、展开（Expansion）与因式分解（Factorization）是最常见的操作。 运算律（Algebraic Laws）本质上是在某个数系/代数结构（例如实数域）中成立的恒等式（Identity）；它们允许在不改变值的前提下重排/重写表达式。需要区分：加法/乘法满足交换律与结合律，但减法/除法一般不满足。 性质 公式 备注 交换律（Commutativity） 不适用于 、 结合律（Associativity） 允许不改变括号结构地分组 分配律（Distributivity） 展开与提因式的核心 <a class="read-more" href="https://blog.gmem.cc/ai-knowledge-quick-ref-1">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/ai-knowledge-quick-ref-1">人工智能知识 - 数学基础</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><p>这一篇整理 AI 所需的数学基础，包括基础数学、线性代数、微积分与概率论统计。它回答的核心问题是：模型里的向量、矩阵、导数、积分、概率分布、期望与信息量分别是什么意思，以及它们为什么会成为后续机器学习与深度学习的共同语言；后续篇章将在这些数学工具之上进入算法、学习理论与模型结构。</p>
<div class="blog_h1"><span class="graybg">基础数学</span></div>
<div class="blog_h2"><span class="graybg">代数基础</span></div>
<div class="blog_h3"><span class="graybg">运算律与代数式</span></div>
<p>代数式（Algebraic Expression）由常数、变量与运算构成；给定变量取值后即可求值。化简（Simplification）的目标是把表达式写成更可读、更便于推导/比较的等价形式：合并同类项（Like Terms）、提取公因子（Common Factor）、展开（Expansion）与因式分解（Factorization）是最常见的操作。</p>
<p>运算律（Algebraic Laws）本质上是在某个数系/代数结构（例如实数域）中成立的恒等式（Identity）；它们允许在不改变值的前提下重排/重写表达式。需要区分：加法/乘法满足交换律与结合律，但减法/除法一般不满足。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">性质</td>
<td style="text-align: center;">公式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>交换律（Commutativity）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a+b=b+a\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(ab=ba\)</span></td>
<td>不适用于 <span displaypfx="inline-" class="mathjax-container">\(a-b\)</span>、<span displaypfx="inline-" class="mathjax-container">\(a/b\)</span></td>
</tr>
<tr>
<td>结合律（Associativity）</td>
<td><span displaypfx="inline-" class="mathjax-container">\((a+b)+c=a+(b+c)\)</span><br /><span displaypfx="inline-" class="mathjax-container">\((ab)c=a(bc)\)</span></td>
<td>允许不改变括号结构地分组</td>
</tr>
<tr>
<td>分配律（Distributivity）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a(b+c)=ab+ac\)</span></td>
<td>展开与提因式的核心</td>
</tr>
<tr>
<td>恒等元（Identity Element）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a+0=a\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(a\cdot 1=a\)</span></td>
<td>0 与 1 在代数推导中常被隐式使用</td>
</tr>
<tr>
<td>逆元（Inverse）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a+(-a)=0\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(a\cdot a^{-1}=1\)</span></td>
<td>第二式要求 <span displaypfx="inline-" class="mathjax-container">\(a\ne 0\)</span></td>
</tr>
<tr>
<td>零乘积原则（Zero Product）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ab=0\Rightarrow a=0\ \text{或}\ b=0\)</span></td>
<td>把方程从“乘积=0”转为“因子=0”</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">因式分解（Factorization）</span></div>
<p>因式分解（Factorization）把一个表达式改写成若干因子（Factor）的乘积。它的直接价值是：把“值为 0 / 符号变化 / 约束条件”转成对各因子的分析。与之对偶的是展开（Expansion）：把乘积写成和式。</p>
<p>对多项式（Polynomial）<span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span>，根（Root/Zero）与线性因子之间存在精确对应：若 <span displaypfx="inline-" class="mathjax-container">\(p(r)=0\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\((x-r)\)</span> 是 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 的因子（因子定理（Factor Theorem））。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">套路/恒等式</td>
<td style="text-align: center;">形式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>提公因子（Common Factor）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ax+ay=a(x+y)\)</span></td>
<td>先把最大公因子提出来</td>
</tr>
<tr>
<td>平方差（Difference of Squares）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^2-b^2=(a-b)(a+b)\)</span></td>
<td>常用于构造可约因子</td>
</tr>
<tr>
<td>完全平方（Perfect Square）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^2\pm 2ab+b^2=(a\pm b)^2\)</span></td>
<td>与配方（Completing the Square）等价</td>
</tr>
<tr>
<td>立方和/差（Sum/Difference of Cubes）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^3-b^3=(a-b)(a^2+ab+b^2)\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(a^3+b^3=(a+b)(a^2-ab+b^2)\)</span></td>
<td>二次因子在实数域可能不可再分</td>
</tr>
<tr>
<td>二次式按根分解</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ax^2+bx+c=a(x-r_1)(x-r_2)\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(r_1,r_2\)</span> 可为复数</td>
</tr>
<tr>
<td>分组分解（Grouping）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ax+ay+bx+by=(a+b)(x+y)\)</span></td>
<td>目标是制造共同因子</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">多项式（Polynomial）</span></div>
<p>一元多项式（Univariate Polynomial）是形如 <span displaypfx="inline-" class="mathjax-container">\(p(x)=\sum_{k=0}^{n} a_k x^k\)</span> 的函数，其中 <span displaypfx="inline-" class="mathjax-container">\(a_k\)</span> 是系数（Coefficient），<span displaypfx="inline-" class="mathjax-container">\(n\)</span> 是次数（Degree）。多项式在实数域上处处可导、可积；在局部逼近（例如 Taylor）与特征构造中非常常用。</p>
<p>多元多项式（Multivariate Polynomial）可写成对多重指数（Multi-index）求和：若 <span displaypfx="inline-" class="mathjax-container">\(x\in\mathbb{R}^d\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[p(x)=\sum_{\alpha\in\mathbb{N}^d} c_\alpha\,x^\alpha,\quad x^\alpha=\prod_{i=1}^{d} x_i^{\alpha_i}\]</span>
<p>补充：多元二次多项式（Quadratic Polynomial）的纯二次部分在线性代数里通常称为二次型（Quadratic Form），可写成矩阵形式 <span displaypfx="inline-" class="mathjax-container">\(q(\mathbf{x})=\mathbf{x}^\top A\mathbf{x}\)</span>；其中 <span displaypfx="inline-" class="mathjax-container">\(x_ix_j\)</span>（例如 <span displaypfx="inline-" class="mathjax-container">\(xy\)</span>）是交叉项（Cross Term）。</p>
<p>在机器学习里，<span style="background-color: #c0c0c0;">多项式特征（Polynomial Features）</span>把输入映射到包含高阶项的特征空间，等价于显式构造某些核函数（Kernel）的有限维版本。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">概念</td>
<td style="text-align: center;">表述</td>
<td style="text-align: center;">用途</td>
</tr>
</thead>
<tbody>
<tr>
<td>首项/首项系数（Leading Term/Coefficient）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a_n x^n\)</span> / <span displaypfx="inline-" class="mathjax-container">\(a_n\)</span></td>
<td>决定远端增长阶与符号</td>
</tr>
<tr>
<td>余数定理（Remainder Theorem）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(p(x)=q(x)(x-a)+p(a)\)</span></td>
<td>快速计算 <span displaypfx="inline-" class="mathjax-container">\(p(a)\)</span></td>
</tr>
<tr>
<td>因子定理（Factor Theorem）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(p(a)=0\Leftrightarrow (x-a)\mid p(x)\)</span></td>
<td>把“根”与“线性因子”连接起来</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">一元二次方程（Quadratic Equation）</span></div>
<p>一元二次方程（Quadratic Equation）标准形式为 <span displaypfx="inline-" class="mathjax-container">\(ax^2+bx+c=0\)</span>（<span displaypfx="inline-" class="mathjax-container">\(a\ne 0\)</span>）。核心量是判别式（Discriminant）<span displaypfx="inline-" class="mathjax-container">\(\Delta=b^2-4ac\)</span>：它决定解的个数与类型。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">结论</td>
<td style="text-align: center;">公式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>求根公式（Quadratic Formula）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x=\frac{-b\pm\sqrt{\Delta}}{2a}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\Delta&lt;0\)</span> 时根为共轭复数</td>
</tr>
<tr>
<td>配方（Completing the Square）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ax^2+bx+c=a\left(x+\frac{b}{2a}\right)^2-\frac{\Delta}{4a}\)</span></td>
<td>同时给出顶点与最值</td>
</tr>
<tr>
<td>顶点（Vertex）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x_v=-\frac{b}{2a},\quad f(x_v)=-\frac{\Delta}{4a}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a&gt;0\)</span> 时为全局最小；<span displaypfx="inline-" class="mathjax-container">\(a&lt;0\)</span> 时为全局最大</td>
</tr>
<tr>
<td>韦达定理（Vieta）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(r_1+r_2=-\frac{b}{a},\quad r_1r_2=\frac{c}{a}\)</span></td>
<td>无需显式求根即可得到对称量</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">分式与有理式（Rational Expressions）</span></div>
<p>分式/有理式（Rational Expression）是两个多项式之比：<span displaypfx="inline-" class="mathjax-container">\(\frac{p(x)}{q(x)}\)</span>，并要求 <span displaypfx="inline-" class="mathjax-container">\(q(x)\ne 0\)</span>。任何化简都必须保留定义域（Domain）约束：约分（Cancellation）只是在允许的点上重写表达式，不会“把不可取值点变得可取”。</p>
<p>典型例子： <span displaypfx="inline-" class="mathjax-container">\(\frac{x^2-1}{x-1}=\frac{(x-1)(x+1)}{x-1}=x+1\)</span>，但仍需强调 <span displaypfx="inline-" class="mathjax-container">\(x\ne 1\)</span>。这里 <span displaypfx="inline-" class="mathjax-container">\(x=1\)</span> 是可去间断点（Removable Discontinuity）：原式无定义，而约分后的表达式在该点有值。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">操作</td>
<td style="text-align: center;">规则</td>
<td style="text-align: center;">要点</td>
</tr>
</thead>
<tbody>
<tr>
<td>加减</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{a}{b}\pm\frac{c}{d}=\frac{ad\pm bc}{bd}\)</span></td>
<td>先通分（Common Denominator）</td>
</tr>
<tr>
<td>乘除</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{a}{b}\cdot\frac{c}{d}=\frac{ac}{bd}\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\frac{a}{b}\div\frac{c}{d}=\frac{a}{b}\cdot\frac{d}{c}\)</span></td>
<td>除法要求 <span displaypfx="inline-" class="mathjax-container">\(c\ne 0\)</span></td>
</tr>
<tr>
<td>约分</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{(x-r)u(x)}{(x-r)v(x)}=\frac{u(x)}{v(x)}\)</span></td>
<td>仍需保留 <span displaypfx="inline-" class="mathjax-container">\(x\ne r\)</span></td>
</tr>
<tr>
<td>符号分析</td>
<td>把数轴按零点/极点分段</td>
<td>有理不等式常用“区间符号表”</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">绝对值与分段（Absolute Value &amp; Piecewise）</span></div>
<p>绝对值（Absolute Value）<span displaypfx="inline-" class="mathjax-container">\(|x|\)</span> 表示到 0 的距离（Distance to Zero）。它把“正负”信息丢掉，只保留大小；因此绝对值相关方程/不等式通常要通过分段（Piecewise）把符号情况拆开讨论。</p>
<span displaypfx="" class="mathjax-container">\[|x|=\begin{cases}x,&amp; x\ge 0\\ -x,&amp; x&lt;0\end{cases}\]</span>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">形式</td>
<td style="text-align: center;">等价条件</td>
<td style="text-align: center;">前提</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(|x|=a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x=a\ \text{或}\ x=-a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a\ge 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(|x|&lt;a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(-a&lt;x&lt;a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a&gt;0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(|x|\le a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(-a\le x\le a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a\ge 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(|x|\ge a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\le -a\ \text{或}\ x\ge a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a\ge 0\)</span></td>
</tr>
</tbody>
</table>
<p>三角不等式（Triangle Inequality）<span displaypfx="inline-" class="mathjax-container">\(|x+y|\le |x|+|y|\)</span> 是绝对值最重要的性质之一；它把“求和后的误差”上界化为“各自误差的和”，在误差分析与泛化界推导中高频出现。</p>
<p>深度学习里常见的 ReLU、hinge loss 等都是分段函数：<span style="background-color: #c0c0c0;">分段点处通常不可导，但仍可用次梯度（Subgradient）做优化</span>。</p>
<div class="blog_h3"><span class="graybg">常用代数技巧：配方 / 换元 / 估计</span></div>
<div class="blog_h4"><span class="graybg">配方（Completing the Square）</span></div>
<p>配方（Completing the Square）把二次式改写成“平方 + 常数”，从而直接读出最值、解的结构与可行区间：</p>
<span displaypfx="" class="mathjax-container">\[ax^2+bx+c=a\left(x+\frac{b}{2a}\right)^2-\frac{b^2-4ac}{4a}\]</span>
<p>例如 <span displaypfx="inline-" class="mathjax-container">\(x^2+6x+5=(x+3)^2-4\)</span>，因此方程 <span displaypfx="inline-" class="mathjax-container">\(x^2+6x+5=0\)</span> 等价于 <span displaypfx="inline-" class="mathjax-container">\((x+3)^2=4\)</span>，解为 <span displaypfx="inline-" class="mathjax-container">\(x=-1,-5\)</span>。</p>
<div class="blog_h4"><span class="graybg">换元（Substitution）</span></div>
<p>换元（Substitution）通过引入新变量，把原问题变成更低复杂度的标准形式，尤其适用于“重复结构”。例如：</p>
<span displaypfx="" class="mathjax-container">\[x^4-5x^2+4=0,\ \text{令 }u=x^2\Rightarrow u^2-5u+4=0\]</span>
<p>解得 <span displaypfx="inline-" class="mathjax-container">\(u=1,4\)</span>，再回代得到 <span displaypfx="inline-" class="mathjax-container">\(x=\pm 1,\pm 2\)</span>。</p>
<div class="blog_h4"><span class="graybg">估计（Bounding / Estimation）</span></div>
<p>估计（Bounding/Estimation）常把表达式改写为“非负项 + 常数”，或利用单调性把复杂项夹逼到可控区间。最常见的来源是“平方非负”（<span displaypfx="inline-" class="mathjax-container">\((\cdot)^2\ge 0\)</span>）：</p>
<span displaypfx="" class="mathjax-container">\[(x-1)^2\ge 0\Rightarrow x^2+1\ge 2x,\quad (|x|-1)^2\ge 0\Rightarrow x^2+1\ge 2|x|\]</span>
<p>这类估计在证明最值、构造上界/下界、以及把损失函数改写成“凸的主项 + 可控余项”时很有效。</p>
<div class="blog_h3"><span class="graybg">数系（Number Systems）</span></div>
<p>数系（Number Systems）描述“允许使用哪些数，以及这些数上哪些运算是封闭的”。常见链条是</p>
<span displaypfx="" class="mathjax-container">\[\mathbb{N}\subset \mathbb{Z}\subset \mathbb{Q}\subset \mathbb{R}\subset \mathbb{C}\]</span>
<p>其中实数（Real Numbers）是有序（Ordered）且完备（Complete）的；复数（Complex Numbers）扩展了方程可解性（例如 <span displaypfx="inline-" class="mathjax-container">\(x^2+1=0\)</span> 在实数无解，但在复数有解）。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">数系</td>
<td style="text-align: center;">记号</td>
<td style="text-align: center;">典型元素</td>
<td style="text-align: center;">结构要点</td>
</tr>
</thead>
<tbody>
<tr>
<td>自然数（Natural Numbers）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{N}\)</span></td>
<td>0,1,2,…（是否含 0 取决于约定）</td>
<td>对加法/乘法封闭；一般不可做减法/除法</td>
</tr>
<tr>
<td>整数（Integers）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{Z}\)</span></td>
<td>…,-2,-1,0,1,2,…</td>
<td>对加减乘封闭；除法不封闭</td>
</tr>
<tr>
<td>有理数（Rational Numbers）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{Q}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(p/q\)</span>（<span displaypfx="inline-" class="mathjax-container">\(p,q\in\mathbb{Z},q\ne 0\)</span>）</td>
<td>域（Field）：非零元素存在乘法逆元</td>
</tr>
<tr>
<td>实数（Real Numbers）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span></td>
<td>包含无理数（Irrational），如 <span displaypfx="inline-" class="mathjax-container">\(\sqrt{2},\pi\)</span></td>
<td>有序完备域；极限/连续的基础</td>
</tr>
<tr>
<td>复数（Complex Numbers）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{C}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a+bi\)</span></td>
<td>代数闭包（Algebraic Closure）；不可定义全序</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">函数基础</span></div>
<div class="blog_h3"><span class="graybg">定义域与值域</span></div>
<p>函数（Function）是映射：把输入集合中的每个元素映到一个输出。定义域（Domain）是允许的输入集合；值域（Range/Image）是实际能取到的输出集合（通常是陪域（Codomain）的子集）。常用记法：</p>
<span displaypfx="" class="mathjax-container">\[f:D\to Y,\quad x\mapsto f(x)\]</span>
<p>从表达式读定义域的常见约束：</p>
<ul>
<li>分母不为 0： <span displaypfx="inline-" class="mathjax-container">\(\frac{p(x)}{q(x)}\)</span> 要求 <span displaypfx="inline-" class="mathjax-container">\(q(x)\ne 0\)</span>。</li>
<li>偶次根非负： <span displaypfx="inline-" class="mathjax-container">\(\sqrt{g(x)}\)</span> 要求 <span displaypfx="inline-" class="mathjax-container">\(g(x)\ge 0\)</span>（实数域）。</li>
<li>对数正数： <span displaypfx="inline-" class="mathjax-container">\(\ln g(x)\)</span> 要求 <span displaypfx="inline-" class="mathjax-container">\(g(x)&gt;0\)</span>。</li>
</ul>
<p>值域分析常用“解方程 + 约束”思路：令 <span displaypfx="inline-" class="mathjax-container">\(y=f(x)\)</span>，把 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 表示成 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 并推导可行条件；若 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 在某区间单调，则可用反函数直接得到值域。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">函数</td>
<td style="text-align: center;">定义域</td>
<td style="text-align: center;">值域</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sqrt{x}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\ge 0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(y\ge 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span></td>
</tr>
<tr>
<td>sigmoid（<span displaypfx="inline-" class="mathjax-container">\(\sigma(z)=\frac{1}{1+e^{-z}}\)</span>）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\((0,1)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\tanh z\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\((-1,1)\)</span></td>
</tr>
<tr>
<td>ReLU（<span displaypfx="inline-" class="mathjax-container">\(\max(0,z)\)</span>）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\([0,+\infty)\)</span></td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">复合函数</span></div>
<p>复合函数（Function Composition）把一个函数的输出作为另一个函数的输入：若 <span displaypfx="inline-" class="mathjax-container">\(g:D\to E\)</span>、<span displaypfx="inline-" class="mathjax-container">\(f:E\to Y\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[(f\circ g)(x)=f(g(x))\]</span>
<p>定义域必须同时满足两层约束： <span displaypfx="inline-" class="mathjax-container">\(x\in\mathrm{dom}(g)\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(g(x)\in\mathrm{dom}(f)\)</span>。例如 <span displaypfx="inline-" class="mathjax-container">\(f(x)=\sqrt{x}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(g(x)=x^2-1\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\((f\circ g)(x)=\sqrt{x^2-1}\)</span> 的定义域是 <span displaypfx="inline-" class="mathjax-container">\(|x|\ge 1\)</span>。</p>
<p>复合满足结合律（Associativity）：<span displaypfx="inline-" class="mathjax-container">\((f\circ g)\circ h=f\circ(g\circ h)\)</span>，但一般不满足交换律： <span displaypfx="inline-" class="mathjax-container">\(f\circ g\ne g\circ f\)</span>。</p>
<div class="blog_h3"><span class="graybg">反函数</span></div>
<p>反函数（Inverse Function）把映射“倒过来”。若 <span displaypfx="inline-" class="mathjax-container">\(f:D\to Y\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(D\)</span> 上是双射（Bijection），则存在 <span displaypfx="inline-" class="mathjax-container">\(f^{-1}:\mathrm{range}(f)\to D\)</span> 满足</p>
<span displaypfx="" class="mathjax-container">\[f^{-1}(f(x))=x,\quad f(f^{-1}(y))=y\]</span>
<p>注意 <span displaypfx="inline-" class="mathjax-container">\(f^{-1}\)</span> 表示反函数，并非倒数 <span displaypfx="inline-" class="mathjax-container">\(1/f\)</span>。求反函数的常用步骤是：设 <span displaypfx="inline-" class="mathjax-container">\(y=f(x)\)</span>，交换 <span displaypfx="inline-" class="mathjax-container">\(x,y\)</span> 并解出 <span displaypfx="inline-" class="mathjax-container">\(y\)</span>。</p>
<p>例：线性函数 <span displaypfx="inline-" class="mathjax-container">\(y=ax+b\)</span>（<span displaypfx="inline-" class="mathjax-container">\(a\ne 0\)</span>）的反函数是 <span displaypfx="inline-" class="mathjax-container">\(f^{-1}(y)=\frac{y-b}{a}\)</span>。sigmoid 的反函数是 logit：若 <span displaypfx="inline-" class="mathjax-container">\(p=\sigma(z)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(z=\log\frac{p}{1-p}\)</span>（要求 <span displaypfx="inline-" class="mathjax-container">\(p\in(0,1)\)</span>）。</p>
<p>若函数不单调或不可一一对应（如 <span displaypfx="inline-" class="mathjax-container">\(f(x)=x^2\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span> 上），则必须限制定义域（例如限制为 <span displaypfx="inline-" class="mathjax-container">\(x\ge 0\)</span>）才能得到真正的反函数。</p>
<div class="blog_h3"><span class="graybg">奇偶性与单调性</span></div>
<p>奇偶性（Parity）描述对称性：偶函数（Even Function）满足 <span displaypfx="inline-" class="mathjax-container">\(f(-x)=f(x)\)</span>（关于 y 轴对称），奇函数（Odd Function）满足 <span displaypfx="inline-" class="mathjax-container">\(f(-x)=-f(x)\)</span>（关于原点对称）。</p>
<p>单调性（Monotonicity）描述“随输入增加，输出是否不减/不增”。在区间 <span displaypfx="inline-" class="mathjax-container">\(I\)</span> 上：</p>
<ul>
<li>单调递增（Monotone Increasing）：<span displaypfx="inline-" class="mathjax-container">\(x_1&lt;x_2\Rightarrow f(x_1)\le f(x_2)\)</span>。</li>
<li>严格递增（Strictly Increasing）：<span displaypfx="inline-" class="mathjax-container">\(x_1&lt;x_2\Rightarrow f(x_1)&lt;f(x_2)\)</span>。</li>
<li>单调递减/严格递减同理。</li>
</ul>
<p>单调函数在区间上必为单射（Injective），因此在该区间上可定义反函数。很多“不可逆”的函数（如 <span displaypfx="inline-" class="mathjax-container">\(x^2\)</span>）在限制到某个单调区间后就会变得可逆。</p>
<div class="blog_h3"><span class="graybg">凸性与凹性</span></div>
<p>凸性（Convexity）是优化与泛化分析的核心几何性质。函数 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 在区间/凸集上是凸函数（Convex Function），当且仅当对任意 <span displaypfx="inline-" class="mathjax-container">\(x_1,x_2\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\lambda\in[0,1]\)</span> 都有</p>
<span displaypfx="" class="mathjax-container">\[f(\lambda x_1+(1-\lambda)x_2)\le \lambda f(x_1)+(1-\lambda)f(x_2)\]</span>
<p>凹函数（Concave Function）则把不等号方向反过来。几何上：凸函数“弦在图像上方”，凹函数“弦在图像下方”。</p>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 二阶可导，则一维判别很简单： <span displaypfx="inline-" class="mathjax-container">\(f''(x)\ge 0\)</span> 则凸， <span displaypfx="inline-" class="mathjax-container">\(f''(x)\le 0\)</span> 则凹；多变量情形把 <span displaypfx="inline-" class="mathjax-container">\(f''\)</span> 替换为 Hessian，要求其半正定/半负定。</p>
<p>典型例子： <span displaypfx="inline-" class="mathjax-container">\(x^2\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(e^x\)</span> 是凸函数；<span displaypfx="inline-" class="mathjax-container">\(\log x\)</span>（<span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span>）是凹函数。很多经典损失（如 MSE、logistic loss）对模型输出是凸的，但对深度网络参数整体通常非凸。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/convex.jpg"><img class="alignnone size-full wp-image-40553" src="https://blog.gmem.cc/wp-content/uploads/2026/03/convex.jpg" alt="convex" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">方程与超平面</span></div>
<div class="blog_h3"><span class="graybg">线性方程（Ax + By + C = 0）</span></div>
<p>二维平面中，线性方程（Linear Equation）<span displaypfx="inline-" class="mathjax-container">\(Ax+By+C=0\)</span>（<span displaypfx="inline-" class="mathjax-container">\((A,B)\ne(0,0)\)</span>）表示一条直线（Line）。向量 <span displaypfx="inline-" class="mathjax-container">\((A,B)\)</span> 是法向量（Normal Vector）：它与直线方向垂直；常数项 <span displaypfx="inline-" class="mathjax-container">\(C\)</span> 控制沿法向量方向的平移。</p>
<p>该形式与超平面形式 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\cdot\mathbf{x}+b=0\)</span> 完全一致：只需取 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x,y)^\top\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}=(A,B)^\top\)</span>、<span displaypfx="inline-" class="mathjax-container">\(b=C\)</span>。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">等价形式</td>
<td style="text-align: center;">表达式</td>
<td style="text-align: center;">条件/说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>斜截式（Slope-Intercept）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y=mx+b\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(B\ne 0\)</span> 时 <span displaypfx="inline-" class="mathjax-container">\(m=-A/B,\ b=-C/B\)</span></td>
</tr>
<tr>
<td>截距（Intercepts）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\text{-截距}=-C/A\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(y\text{-截距}=-C/B\)</span></td>
<td>分别要求 <span displaypfx="inline-" class="mathjax-container">\(A\ne 0\)</span>、<span displaypfx="inline-" class="mathjax-container">\(B\ne 0\)</span></td>
</tr>
<tr>
<td>点法式（Point-Normal）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\cdot(\mathbf{x}-\mathbf{x}_0)=0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_0\)</span> 是直线上一点</td>
</tr>
<tr>
<td>点到直线距离</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{dist}=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}}\)</span></td>
<td>来自把点沿法向量投影到直线</td>
</tr>
</tbody>
</table>
<p>两条直线相交/平行可由法向量判断：若 <span displaypfx="inline-" class="mathjax-container">\((A_1,B_1)\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\((A_2,B_2)\)</span> 共线，则两直线平行（或重合）；否则相交，交点可由 2×2 线性方程组求解。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/linear-equation-geometry.jpg"><img class="alignnone size-full wp-image-40541" src="https://blog.gmem.cc/wp-content/uploads/2026/03/linear-equation-geometry.jpg" alt="linear-equation-geometry" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">超平面（w·x + b = 0）</span></div>
<p>超平面（Hyperplane）是高维空间中的“线性边界”。在 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^d\)</span> 中，方程</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{w}\cdot \mathbf{x}+b=0\]</span>
<p>定义一个 <span displaypfx="inline-" class="mathjax-container">\((d-1)\)</span> 维的仿射子空间（Affine Subspace）。其中 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 是法向量（Normal Vector），决定边界的朝向；<span displaypfx="inline-" class="mathjax-container">\(b\)</span> 是偏置（Bias），决定边界沿法向量方向的平移。</p>
<p>工程与论文里常写成 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}^\top \mathbf{x}+b\)</span>：这里的转置（Transpose）符号 <span displaypfx="inline-" class="mathjax-container">\(^\top\)</span> 只是为了把列向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 变成行向量，从而与列向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 做矩阵乘法；数值上它等价于点积：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{w}^\top \mathbf{x}=\sum_{i=1}^{d} w_i x_i\]</span>
<p>例：令 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}=(2,3)^\top\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(4,5)^\top\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}^\top \mathbf{x}=2\cdot4+3\cdot5=23\)</span>。</p>
<p>在机器学习里，线性分类器（Linear Classifier）可写成 <span displaypfx="inline-" class="mathjax-container">\(\hat y=\mathrm{sign}(\mathbf{w}^\top\mathbf{x}+b)\)</span>；逻辑回归（Logistic Regression）把它送入 sigmoid： <span displaypfx="inline-" class="mathjax-container">\(p(y=1|\mathbf{x})=\sigma(\mathbf{w}^\top\mathbf{x}+b)\)</span>。</p>
<div class="blog_h3"><span class="graybg">法向量与半空间</span></div>
<p>超平面把空间划分成两个半空间（Half-space）：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{w}\cdot\mathbf{x}+b\ge 0,\quad \mathbf{w}\cdot\mathbf{x}+b\le 0\]</span>
<p>法向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 指向“值更大”的一侧：沿 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 方向移动会增大 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\cdot\mathbf{x}+b\)</span>。因此，在线性分类里，得分的正负号自然对应类别划分。</p>
<div class="blog_h3"><span class="graybg">点到超平面的距离</span></div>
<p>点 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_0\)</span> 到超平面 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\cdot\mathbf{x}+b=0\)</span> 的欧氏距离（Euclidean Distance）为：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{dist}(\mathbf{x}_0,\ \mathbf{w}\cdot\mathbf{x}+b=0)=\frac{|\mathbf{w}\cdot\mathbf{x}_0+b|}{\|\mathbf{w}\|_2}\]</span>
<p>推导直觉：把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_0\)</span> 沿法向量方向投影到超平面上；分子是“沿法向量方向的带符号位移”，除以 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{w}\|\)</span> 把它变成真实距离。</p>
<div class="blog_h3"><span class="graybg">约束函数、梯度与法向量</span></div>
<p>约束优化中的边界通常由一个定义在整个空间上的标量函数（Scalar Function）<span displaypfx="inline-" class="mathjax-container">\(g(x)\)</span> 给出，并通过等值方程 <span displaypfx="inline-" class="mathjax-container">\(g(x)=0\)</span> 表示边界本身。函数 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 是求导对象；边界则是满足该方程的点集。梯度（Gradient）算子 <span displaypfx="inline-" class="mathjax-container">\(\nabla\)</span> 作用在约束函数 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 上，由此把边界的法向几何信息编码为一个向量场。</p>
<p>线性超平面的情形最直接。边界写成</p>
<span displaypfx="" class="mathjax-container">\[g(\mathbf{x})=\mathbf{w}^\top\mathbf{x}+b=0\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 是定义在整个 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^d\)</span> 上的线性函数，而边界只是它的零等值面（Zero Level Set）。由于线性函数的一阶导数处处相同，立刻得到</p>
<span displaypfx="" class="mathjax-container">\[\nabla g(\mathbf{x})=\mathbf{w}\]</span>
<p>因此，线性超平面的法向量是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span>，本质上等价于“定义该超平面的约束函数 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 的梯度等于 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span>”。</p>
<p>这一结论对一般光滑边界同样成立。设 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 是边界 <span displaypfx="inline-" class="mathjax-container">\(g(x)=0\)</span> 上一点，且 <span displaypfx="inline-" class="mathjax-container">\(\nabla g(x^*)\ne 0\)</span>。若 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 是该点处的切向量（Tangent Vector），则沿着 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 做无穷小移动仍停留在同一条边界上，因而 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 的一阶变化为 0：</p>
<span displaypfx="" class="mathjax-container">\[\frac{d}{d\epsilon}g(x^*+\epsilon t)\Big|_{\epsilon=0}=0\]</span>
<p>应用链式法则（Chain Rule）得到</p>
<span displaypfx="" class="mathjax-container">\[\nabla g(x^*)^\top t=0\]</span>
<p>这表示边界上的任意切向量都与 <span displaypfx="inline-" class="mathjax-container">\(\nabla g(x^*)\)</span> 正交。因此 <span displaypfx="inline-" class="mathjax-container">\(\nabla g(x^*)\)</span> 沿法向方向指向边界外侧或内侧，而不沿边界本身滑动；梯度正是边界法向量的解析表达。</p>
<p>KKT 条件中的 <span displaypfx="inline-" class="mathjax-container">\(\nabla g(x^*)\)</span> 正是以这种方式出现的。约束优化核心是借助约束函数 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 的梯度，把边界的法向几何结构写入一阶最优性条件。驻点条件</p>
<span displaypfx="" class="mathjax-container">\[\nabla f(x^*)+\lambda^*\nabla g(x^*)=0\]</span>
<p>表达的是：在活跃边界上，目标函数剩余的下降趋势完全落在约束边界的法向空间里，并与乘子加权后的法向量达到平衡。</p>
<div class="blog_h2"><span class="graybg">基础几何（Basic Geometry）</span></div>
<p>解析几何（Analytic Geometry）、向量（Vector）、三角函数（Trigonometric Functions）以及很多 AI 中的空间直觉，都建立在更基础的几何概念上。这里先把最常用的几块地基补齐：距离、角度、弧度、比例与面积。</p>
<div class="blog_h3"><span class="graybg">点、线、角与角度单位</span></div>
<p>平面几何最基本的对象是点（Point）、线段（Segment）、直线（Line）与角（Angle）。角度描述两条射线的张开程度；常见有两种单位：</p>
<span displaypfx="" class="mathjax-container">\[360^\circ=2\pi\ \text{rad},\quad 180^\circ=\pi\ \text{rad},\quad 90^\circ=\frac{\pi}{2}\ \text{rad}\]</span>
<p>度数（Degree）更适合日常表达，弧度（Radian）更适合数学推导，因为它和圆弧长度、三角函数、导数公式天然兼容。后面遇到旋转矩阵（Rotation Matrix）、复数极坐标（Polar Form）、傅里叶分析（Fourier Analysis）时，默认几乎都使用弧度。</p>
<div class="blog_h3"><span class="graybg">勾股定理与欧氏距离</span></div>
<p>勾股定理（Pythagorean Theorem）是平面距离公式的根源。对直角三角形，若两条直角边长为 <span displaypfx="inline-" class="mathjax-container">\(a,b\)</span>，斜边长为 <span displaypfx="inline-" class="mathjax-container">\(c\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[a^2+b^2=c^2\]</span>
<p>把它应用到坐标平面，就得到两点之间的欧氏距离（Euclidean Distance）：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{dist}(P_1,P_2)=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\]</span>
<p>在高维空间里，这个公式直接推广为 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}-\mathbf{y}\|_2\)</span>。因此从二维几何到机器学习里的向量距离，本质上是一条连续的概念链。KNN、K-means、embedding 检索、对比学习（Contrastive Learning）都在反复使用这套“距离越小越相似”的几何直觉。</p>
<div class="blog_h3"><span class="graybg">弧度、弧长与扇形</span></div>
<p>弧度由圆弧长度直接定义：若半径为 <span displaypfx="inline-" class="mathjax-container">\(r\)</span> 的圆上有一段弧长 <span displaypfx="inline-" class="mathjax-container">\(s\)</span>，对应圆心角为 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>（弧度），则</p>
<span displaypfx="" class="mathjax-container">\[\theta=\frac{s}{r},\quad s=r\theta\]</span>
<p>对应扇形面积（Sector Area）是：</p>
<span displaypfx="" class="mathjax-container">\[A=\frac{1}{2}r^2\theta\]</span>
<p>这正是弧度“自然”的原因：一旦用弧度记角，弧长与面积公式会变得非常干净。AI 里很多周期性表示都默认使用弧度输入，例如 <span displaypfx="inline-" class="mathjax-container">\(\sin\theta\)</span> / <span displaypfx="inline-" class="mathjax-container">\(\cos\theta\)</span> 的位置编码（Positional Encoding）、旋转位置编码（RoPE）以及频域特征（Fourier Features）。</p>
<div class="blog_h3"><span class="graybg">相似、缩放与比例</span></div>
<p>相似（Similarity）指图形形状相同、大小可以不同；等价地说，对应角相等、对应边成比例。若把一个图形按比例 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 缩放，则长度变为原来的 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 倍，面积变为原来的 <span displaypfx="inline-" class="mathjax-container">\(k^2\)</span> 倍。</p>
<p>这个看似初等的事实，在 AI 图像处理中极其常见：图片 resize、本征尺度（Scale）、特征金字塔（Feature Pyramid）、多尺度检测（Multi-scale Detection）都在处理“同一对象在不同尺度下如何保持可识别性”的问题。若缩放时不保持纵横比（Aspect Ratio），就会引入几何畸变，进而影响分类、检测与分割结果。</p>
<div class="blog_h3"><span class="graybg">面积、重叠与 IoU</span></div>
<p>基础几何里，面积（Area）衡量二维区域所占的大小。矩形面积是长乘宽，圆面积是</p>
<span displaypfx="" class="mathjax-container">\[A=\pi r^2\]</span>
<p>在 AI 的目标检测（Object Detection）与实例分割（Instance Segmentation）中，一个高频几何量是交并比（Intersection over Union, IoU）：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{IoU}=\frac{\text{Intersection Area}}{\text{Union Area}}\]</span>
<p>它衡量预测框/预测区域与真实标注的重叠程度。这里用到的核心是最朴素的面积与重叠概念。</p>
<div class="blog_h3"><span class="graybg">基础几何和AI</span></div>
<p>若把这些内容压缩成一句话，它们在 AI 中分别承担不同角色：</p>
<ul>
<li>距离（Distance）：支撑近邻搜索、聚类、向量检索与损失函数中的相似度刻画。</li>
<li>角度（Angle）：支撑方向、夹角、余弦相似度（Cosine Similarity）与旋转直觉。</li>
<li>弧度（Radian）：支撑三角函数、周期建模、位置编码与频域表示。</li>
<li>比例与缩放（Scale）：支撑图像 resize、数据增强、特征金字塔与多尺度建模。</li>
<li>面积与重叠（Area &amp; Overlap）：支撑 IoU、检测框评估与分割质量度量。</li>
</ul>
<div class="blog_h2"><span class="graybg">解析几何（Analytic Geometry）</span></div>
<p>解析几何（Analytic Geometry）的核心做法是：选定坐标系（Coordinate System），用代数方程描述几何对象。一个几何对象可以被理解为“满足某个方程（或方程组）的所有点”的集合。</p>
<p>高中阶段最常见的两类：</p>
<ul>
<li>一次方程：直线（Line）/平面（Plane）/超平面（Hyperplane）。</li>
<li>二次方程：圆（Circle）与圆锥曲线（Conic Sections）；在三维中推广为二次曲面（Quadric Surfaces）。</li>
</ul>
<div class="blog_h3"><span class="graybg">坐标、距离与圆</span></div>
<p>在直角坐标系（Cartesian Coordinate System）中，点 <span displaypfx="inline-" class="mathjax-container">\(P\)</span> 用坐标 <span displaypfx="inline-" class="mathjax-container">\((x,y)\)</span> 表示。两点 <span displaypfx="inline-" class="mathjax-container">\(P_1(x_1,y_1)\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(P_2(x_2,y_2)\)</span> 的欧氏距离（Euclidean Distance）是：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{dist}(P_1,P_2)=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\]</span>
<p>圆（Circle）是到某个固定点距离恒定的点集；这个固定点叫圆心（Center）。若圆心为 <span displaypfx="inline-" class="mathjax-container">\((h,k)\)</span>、半径（Radius）为 <span displaypfx="inline-" class="mathjax-container">\(r\)</span>，则圆的方程是：</p>
<span displaypfx="" class="mathjax-container">\[(x-h)^2+(y-k)^2=r^2\]</span>
<p>例：方程 <span displaypfx="inline-" class="mathjax-container">\(x^2+y^2-4x+6y-12=0\)</span> 通过配方（Completing the Square）可化为 <span displaypfx="inline-" class="mathjax-container">\((x-2)^2+(y+3)^2=25\)</span>，因此它表示圆心 <span displaypfx="inline-" class="mathjax-container">\((2,-3)\)</span>、半径 <span displaypfx="inline-" class="mathjax-container">\(5\)</span> 的圆。</p>
<div class="blog_h3"><span class="graybg">圆锥曲线（Conic Sections）：二次方程的几何形状</span></div>
<p>圆锥曲线（Conic Sections）最初来自“平面截圆锥”的几何构造，但在解析几何里，它们等价于二维的二次方程曲线（Second-degree Plane Curves，方程里变量的最高次数为 2）：</p>
<span displaypfx="" class="mathjax-container">\[Ax^2+Bxy+Cy^2+Dx+Ey+F=0\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(Bxy\)</span> 是交叉项（Cross Term）。交叉项的存在通常意味着曲线的主轴（Principal Axes）与坐标轴不对齐；通过旋转坐标轴（Rotation of Axes）可以把交叉项消掉，从而得到更“标准”的形状表达。</p>
<p>而一次项 <span displaypfx="inline-" class="mathjax-container">\(Dx+Ey\)</span> 与常数项 <span displaypfx="inline-" class="mathjax-container">\(F\)</span> 扮演的是另一类角色：它们通常不改变主轴方向，而主要影响图形在平面中的<span style="background-color: #c0c0c0;">位置与尺度</span>。更具体地说，一次项往往意味着曲线的中心/顶点不在原点；在消去交叉项之后，再通过平移坐标（Translation of Axes）与配方（Completing the Square）可以把一次项吸收到平方项里。常数项则相当于改变“等号右边的阈值”，会影响曲线是否有实点、整体大小以及离原点的偏置。简言之：<span style="background-color: #c0c0c0;">交叉项主要对应旋转，一次项主要对应平移，常数项主要对应整体偏移/尺度调整</span>。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/ellipse-term-effects.png"><img class="alignnone size-full wp-image-40767" src="https://blog.gmem.cc/wp-content/uploads/2026/03/ellipse-term-effects.png" alt="ellipse-term-effects" width="100%" /></a></p>
<p>下面给出最常用的四类圆锥曲线的标准方程（Standard Form）与直观定义：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">名称</td>
<td style="text-align: center;">标准方程</td>
<td style="text-align: center;">几何定义（直观）</td>
<td style="text-align: center;">形状关键词</td>
</tr>
</thead>
<tbody>
<tr>
<td>圆（Circle）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x^2+y^2=r^2\)</span></td>
<td>到圆心距离恒为 <span displaypfx="inline-" class="mathjax-container">\(r\)</span></td>
<td>闭合；各向同性</td>
</tr>
<tr>
<td>椭圆（Ellipse）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{x^2}{a^2}+\frac{y^2}{b^2}=1\ (a\ge b&gt;0)\)</span></td>
<td>到两个焦点（Focus）距离和为常数</td>
<td>闭合；主轴/次轴</td>
</tr>
<tr>
<td>抛物线（Parabola）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y^2=4px\ (p&gt;0)\)</span></td>
<td>到焦点（Focus）与准线（Directrix）距离相等</td>
<td>开口；无中心</td>
</tr>
<tr>
<td>双曲线（Hyperbola）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{x^2}{a^2}-\frac{y^2}{b^2}=1\)</span></td>
<td>到两个焦点（Focus）距离差的绝对值为常数</td>
<td>两支；有渐近线（Asymptotes）</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">椭圆（Ellipse）：两焦点“距离和恒定”</span></div>
<p>椭圆（Ellipse）可以用一句话定义：平面内到两个固定点 <span displaypfx="inline-" class="mathjax-container">\(F_1,F_2\)</span> 的距离之和为常数的点的集合。若该常数为 <span displaypfx="inline-" class="mathjax-container">\(2a\)</span>，则对椭圆上任意点 <span displaypfx="inline-" class="mathjax-container">\(P\)</span> 有：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{dist}(P,F_1)+\mathrm{dist}(P,F_2)=2a\]</span>
<p>在以原点为中心、长轴沿 x 轴的标准位置下，椭圆方程是：</p>
<span displaypfx="" class="mathjax-container">\[\frac{x^2}{a^2}+\frac{y^2}{b^2}=1,\quad a\ge b&gt;0\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(a\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 分别是半长轴（Semi-major Axis）与半短轴（Semi-minor Axis）。焦距参数 <span displaypfx="inline-" class="mathjax-container">\(c\)</span> 定义为焦点到中心的距离，满足</p>
<span displaypfx="" class="mathjax-container">\[c^2=a^2-b^2\]</span>
<p>因此焦点坐标是 <span displaypfx="inline-" class="mathjax-container">\((\pm c,0)\)</span>。偏心率（Eccentricity）定义为 <span displaypfx="inline-" class="mathjax-container">\(e=c/a\)</span>，它量化“椭圆有多扁”： <span displaypfx="inline-" class="mathjax-container">\(e\in[0,1)\)</span>；当 <span displaypfx="inline-" class="mathjax-container">\(a=b\)</span> 时 <span displaypfx="inline-" class="mathjax-container">\(e=0\)</span>，椭圆退化为圆。</p>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(a=5,b=3\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(c=4\)</span>、<span displaypfx="inline-" class="mathjax-container">\(e=0.8\)</span>，椭圆为 <span displaypfx="inline-" class="mathjax-container">\(\frac{x^2}{25}+\frac{y^2}{9}=1\)</span>，焦点为 <span displaypfx="inline-" class="mathjax-container">\((\pm 4,0)\)</span>。</p>
<div class="blog_h3"><span class="graybg">三维推广：二次曲面（Quadric Surfaces）</span></div>
<p>在三维中，圆锥曲线推广为二次曲面（Quadric Surfaces）：满足三元二次方程的点集。最一般的形式是：</p>
<span displaypfx="" class="mathjax-container">\[Ax^2+By^2+Cz^2+Dxy+Exz+Fyz+Gx+Hy+Iz+J=0\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(Dxy,Exz,Fyz\)</span> 是交叉项（Cross Term），对应“坐标轴没有对齐到曲面的主轴方向”。通过平移（Translation）与旋转（Rotation）可以把它化为标准型（Standard Form）：平移等价于把原点挪到合适的位置（通常是“中心”附近），旋转等价于把坐标轴转到主轴方向，从而一眼看出是“球/椭球/抛物面/双曲面”等哪一类。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">名称</td>
<td style="text-align: center;">典型方程（标准型）</td>
<td style="text-align: center;">直观描述</td>
</tr>
</thead>
<tbody>
<tr>
<td>球（Sphere）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x^2+y^2+z^2=r^2\)</span></td>
<td>到中心距离恒定的点集（3D 的圆）</td>
</tr>
<tr>
<td>椭球（Ellipsoid）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1\)</span></td>
<td>三个方向缩放不同的“球”；仍然闭合</td>
</tr>
<tr>
<td>椭圆抛物面（Elliptic Paraboloid）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(z=\frac{x^2}{a^2}+\frac{y^2}{b^2}\)</span></td>
<td>“碗状”；水平截面是椭圆</td>
</tr>
<tr>
<td>双曲抛物面（Hyperbolic Paraboloid）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(z=\frac{x^2}{a^2}-\frac{y^2}{b^2}\)</span></td>
<td>“马鞍形”；沿一个方向上凸、另一个方向下凹</td>
</tr>
<tr>
<td>单叶双曲面（Hyperboloid of One Sheet）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1\)</span></td>
<td>连通的一张曲面；截面随方向变化</td>
</tr>
<tr>
<td>双叶双曲面（Hyperboloid of Two Sheets）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(-\frac{x^2}{a^2}-\frac{y^2}{b^2}+\frac{z^2}{c^2}=1\)</span></td>
<td>上下分离的两张曲面</td>
</tr>
</tbody>
</table>
<p>二次曲面与优化中的“二次型/曲率”是同一套数学语言：把坐标轴旋到主轴方向后，表达式会变成各轴平方项的加权和/差，从而直接暴露“碗状（局部最小）”与“鞍形（Saddle）”的结构。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-quadric.png"><img class="alignnone size-full wp-image-40777" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-quadric.png" alt="plot-quadric" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">指数函数</span></div>
<p>指数函数（Exponential Function）最常用的是自然指数 <span displaypfx="inline-" class="mathjax-container">\(e^x\)</span>。指数运算把“加法结构”映射为“乘法结构”，对数（Logarithm）作为反函数则把乘法结构拉平成加法结构。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">性质/公式</td>
<td style="text-align: center;">表达式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>指数基本性质（Exponential Laws）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{a+b}=e^a e^b\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(e^{a-b}=\frac{e^a}{e^b}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a,b\in\mathbb{R}\)</span></td>
</tr>
<tr>
<td>指数运算律（Exponent Rules）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^0=1\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(a^m a^n=a^{m+n}\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\frac{a^m}{a^n}=a^{m-n}\)</span><br /><span displaypfx="inline-" class="mathjax-container">\((a^m)^n=a^{mn}\)</span><br /><span displaypfx="inline-" class="mathjax-container">\((ab)^n=a^n b^n\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a&gt;0,a\ne 1\)</span>；对整数指数最直接</td>
</tr>
<tr>
<td>自然常数（Euler's Number）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(e=\lim_{n\to\infty}\left(1+\frac{1}{n}\right)^n\)</span></td>
<td>极限刻画连续复利（Continuous Compounding）</td>
</tr>
<tr>
<td>微积分性质</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{d}{dx}e^x=e^x\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\frac{d}{dx}\ln x=\frac{1}{x}\)</span></td>
<td>以 <span displaypfx="inline-" class="mathjax-container">\(e\)</span> 为底时形式最简</td>
</tr>
<tr>
<td>连续增长微分方程</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y'(t)=y(t),\ y(0)=1\Rightarrow y(t)=e^t\)</span></td>
<td>“增长率与当前值成正比”</td>
</tr>
<tr>
<td>与对数互逆</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln(e^x)=x\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(e^{\ln x}=x\)</span></td>
<td>第二式要求 <span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span></td>
</tr>
</tbody>
</table>
<p>常用取值：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">输入</td>
<td style="text-align: center;"><span displaypfx="inline-" class="mathjax-container">\(e^x\)</span></td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x=0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^0=1\)</span></td>
<td>基准点</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x=1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^1=e\approx 2.71828\)</span></td>
<td>自然对数底</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x=-1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{-1}=\frac{1}{e}\approx 0.36788\)</span></td>
<td>常见衰减尺度</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x=\ln 2\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{\ln 2}=2\)</span></td>
<td>对数域与线性域互换时常用</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x=\ln 10\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{\ln 10}=10\)</span></td>
<td>与 <span displaypfx="inline-" class="mathjax-container">\(\log_{10}\)</span> 换底相关</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">对数函数</span></div>
<p>对数函数（Logarithm）<span displaypfx="inline-" class="mathjax-container">\(\log x\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span> 上严格单调递增（Strictly Increasing），因此 <span displaypfx="inline-" class="mathjax-container">\(-\log x\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span> 上严格单调递减（Strictly Decreasing）。</p>
<p>复合后的单调性由内层决定：若 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span> 在某区间上单调递增且 <span displaypfx="inline-" class="mathjax-container">\(f(x)&gt;0\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(-\log(f(x))\)</span> 在该区间上单调递减；若 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span> 不单调，则外层单调并不能推出整体单调。</p>
<p>在损失函数里常见的形式是 <span displaypfx="inline-" class="mathjax-container">\(-\log\sigma(z)\)</span>（<span displaypfx="inline-" class="mathjax-container">\(\sigma\)</span> 为 sigmoid）。因为 sigmoid 单调递增，所以该损失对 <span displaypfx="inline-" class="mathjax-container">\(z\)</span> 单调递减：增大 <span displaypfx="inline-" class="mathjax-container">\(z\)</span> 会降低损失。这只说明“对中间量 z 的单调性”；对模型参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的单调性一般不成立，因为 <span displaypfx="inline-" class="mathjax-container">\(z=z(\theta)\)</span> 是高维非线性函数。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">性质/公式</td>
<td style="text-align: center;">表达式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>对数运算律（Logarithm Rules）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\log(ab)=\log a+\log b\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\log\!\left(\frac{a}{b}\right)=\log a-\log b\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\log(a^k)=k\log a\)</span></td>
<td>同一底数；典型要求 <span displaypfx="inline-" class="mathjax-container">\(a&gt;0,b&gt;0\)</span></td>
</tr>
<tr>
<td>换底公式（Change of Base）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\log_a x=\frac{\ln x}{\ln a}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a&gt;0,a\ne 1,x&gt;0\)</span></td>
</tr>
<tr>
<td>与指数互逆</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^{\log_a x}=x\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\log_a(a^x)=x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span></td>
</tr>
</tbody>
</table>
<p>常用取值：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">表达式</td>
<td style="text-align: center;">值</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln 1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x=1\)</span> 为基准点</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln e\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(1\)</span></td>
<td>自然对数的定义性质</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln 2\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\approx 0.6931\)</span></td>
<td>二进制相关常数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln 10\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\approx 2.3026\)</span></td>
<td>十进制相关常数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\log_{10}2\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(=\frac{\ln 2}{\ln 10}\approx 0.3010\)</span></td>
<td>工程里常用于数量级估算</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\log_2 10\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(=\frac{\ln 10}{\ln 2}\approx 3.3219\)</span></td>
<td>bit 与十进制数量级换算</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\log_2 e\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(=\frac{1}{\ln 2}\approx 1.4427\)</span></td>
<td>nats 与 bits 换算常数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\log_{10}e\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(=\frac{1}{\ln 10}\approx 0.4343\)</span></td>
<td>自然对数与常用对数换算</td>
</tr>
</tbody>
</table>
<p>在语言模型 softmax 中，logit 经过指数再归一化：<span displaypfx="inline-" class="mathjax-container">\(\exp(\text{logit})\)</span> 把分数映射为正数权重；取 log 则把乘法结构拉平成加法结构，便于用和式写出似然与损失。</p>
<div class="blog_h2"><span class="graybg">幂函数</span></div>
<p>幂函数（Power Function）里常见的两个扩展是负指数（Negative Exponent）与分数指数（Rational Exponent）。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">类型</td>
<td style="text-align: center;">公式</td>
<td style="text-align: center;">条件/备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>负指数（Negative Exponent）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^{-n}=\frac{1}{a^n}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a\ne 0\)</span>；<span displaypfx="inline-" class="mathjax-container">\(n\)</span> 为正整数</td>
</tr>
<tr>
<td>分数指数（Rational Exponent）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^{p/q}=\sqrt[q]{a^p}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(q&gt;0,\gcd(p,q)=1\)</span>；实数域通常要求 <span displaypfx="inline-" class="mathjax-container">\(a&gt;0\)</span></td>
</tr>
<tr>
<td>例</td>
<td><span displaypfx="inline-" class="mathjax-container">\(2^{-3}=\frac{1}{8}\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(9^{1/2}=3\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(8^{2/3}=4\)</span></td>
<td>偶次根要求被开方数非负</td>
</tr>
</tbody>
</table>
<p>常用取值：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">表达式</td>
<td style="text-align: center;">值</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(2^{-3}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(=\frac{1}{8}=0.125\)</span></td>
<td>负指数转倒数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(10^{-3}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(=0.001\)</span></td>
<td>毫（<span displaypfx="inline-" class="mathjax-container">\(10^{-3}\)</span>）尺度</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(2^{1/2}=\sqrt{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\approx 1.4142\)</span></td>
<td>最常见的无理数根</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(2^{-1/2}=\frac{1}{\sqrt{2}}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\approx 0.7071\)</span></td>
<td>正交归一化、幅度缩放常用</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(10^{1/2}=\sqrt{10}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\approx 3.1623\)</span></td>
<td>对数刻度下的“半个数量级”</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(10^{-1/2}=\frac{1}{\sqrt{10}}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\approx 0.3162\)</span></td>
<td>与上式互为倒数</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">三角函数</span></div>
<div class="blog_h3"><span class="graybg">基本三角恒等式</span></div>
<p>三角函数（Trigonometric Functions）可以用单位圆（Unit Circle）定义：在圆上角度为 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的点坐标是 <span displaypfx="inline-" class="mathjax-container">\((\cos\theta,\sin\theta)\)</span>。由此得到最基本恒等式：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">类别</td>
<td style="text-align: center; width: 50%;">公式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>基本恒等式</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin^2\theta+\cos^2\theta=1\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\tan\theta=\frac{\sin\theta}{\cos\theta}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\cos\theta\ne 0\)</span> 时定义 <span displaypfx="inline-" class="mathjax-container">\(\tan\theta\)</span></td>
</tr>
<tr>
<td>与 <span displaypfx="inline-" class="mathjax-container">\(\tan,\cot\)</span> 相关</td>
<td><span displaypfx="inline-" class="mathjax-container">\(1+\tan^2\theta=\sec^2\theta\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(1+\cot^2\theta=\csc^2\theta\)</span></td>
<td>定义域同 <span displaypfx="inline-" class="mathjax-container">\(\tan,\cot\)</span></td>
</tr>
<tr>
<td>和差公式（Angle Addition）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin(\alpha\pm\beta)=\sin\alpha\cos\beta\pm\cos\alpha\sin\beta\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\cos(\alpha\pm\beta)=\cos\alpha\cos\beta\mp\sin\alpha\sin\beta\)</span></td>
<td>傅里叶分析、RoPE 等直觉常用</td>
</tr>
<tr>
<td>二倍角（Double-Angle）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin 2\theta=2\sin\theta\cos\theta\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\cos 2\theta=\cos^2\theta-\sin^2\theta=1-2\sin^2\theta=2\cos^2\theta-1\)</span></td>
<td>同一恒等式的不同等价写法</td>
</tr>
<tr>
<td>周期性（Periodicity）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin(\theta+2\pi)=\sin\theta\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\cos(\theta+2\pi)=\cos\theta\)</span></td>
<td>一个周期（Period）为 <span displaypfx="inline-" class="mathjax-container">\(2\pi\)</span></td>
</tr>
<tr>
<td>常用极限（<span displaypfx="inline-" class="mathjax-container">\(x\to 0\)</span>）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\lim_{x\to 0}\frac{\sin x}{x}=1\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\lim_{x\to 0}\frac{\tan x}{x}=1\)</span><br /><span displaypfx="inline-" class="mathjax-container">\(\lim_{x\to 0}\frac{1-\cos x}{x^2}=\frac{1}{2}\)</span></td>
<td>推导导数与近似时高频出现</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">常用特殊角（Special Angles）</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;"><span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>（弧度）</td>
<td style="text-align: center;">角度制</td>
<td style="text-align: center;"><span displaypfx="inline-" class="mathjax-container">\(\sin\theta\)</span></td>
<td style="text-align: center;"><span displaypfx="inline-" class="mathjax-container">\(\cos\theta\)</span></td>
<td style="text-align: center;"><span displaypfx="inline-" class="mathjax-container">\(\tan\theta\)</span></td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td>0°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\pi/6\)</span></td>
<td>30°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{\sqrt{3}}{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{\sqrt{3}}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\pi/4\)</span></td>
<td>45°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{\sqrt{2}}{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{\sqrt{2}}{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\pi/3\)</span></td>
<td>60°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{\sqrt{3}}{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sqrt{3}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\pi/2\)</span></td>
<td>90°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td>未定义（undefined）</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\pi\)</span></td>
<td>180°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(-1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(3\pi/2\)</span></td>
<td>270°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(-1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td>未定义（undefined）</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(2\pi\)</span></td>
<td>360°</td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(1\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">欧拉公式</span></div>
<p>欧拉公式（Euler's Formula）把指数与三角函数在复数域（Complex Domain）里统一起来：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">结论</td>
<td style="text-align: center;">公式</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td>欧拉公式（Euler's Formula）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{i\theta}=\cos\theta+i\sin\theta\)</span></td>
<td>把“旋转”写成复指数</td>
</tr>
<tr>
<td>辐角相加对应指数相乘</td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{i\theta_1}e^{i\theta_2}=e^{i(\theta_1+\theta_2)}\)</span></td>
<td>复数乘法：模相乘、辐角相加</td>
</tr>
<tr>
<td>欧拉恒等式（Euler's Identity）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^{i\pi}+1=0\)</span></td>
<td>连接 <span displaypfx="inline-" class="mathjax-container">\(e,i,\pi,1,0\)</span></td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">基础函数图像</span></div>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/image-of-common-fns.jpg"><img class="alignnone size-full wp-image-40557" src="https://blog.gmem.cc/wp-content/uploads/2026/03/image-of-common-fns.jpg" alt="image-of-common-fns" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">复数</span></div>
<p>复数（Complex Number）是对实数系（Real Number System）的扩展，写作 <span displaypfx="inline-" class="mathjax-container">\(a+bi\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(a,b\in\mathbb{R}\)</span>，虚数单位（Imaginary Unit）满足 <span displaypfx="inline-" class="mathjax-container">\(i^2=-1\)</span>。几何上，复数可以表示为复平面（Complex Plane）上的点 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span>；但更重要的是，它在二维平面上提供了一套封闭、可逆且与乘法兼容的代数结构。</p>
<p>因此，复数不能简单等同于 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^2\)</span> 里的二维向量。表面上看，二维向量 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 与复数 <span displaypfx="inline-" class="mathjax-container">\(a+bi\)</span> 确实对应同一个平面点；但它们的<span style="background-color: #c0c0c0;">代数结构</span>完全不同，关键差别在于“乘法”是否自然、闭合且可逆。</p>
<p>对二维向量而言，加法非常自然，但乘法并不形成一个像实数那样稳定的数系：点乘（Inner Product）会把两个向量变成标量，叉乘（Cross Product）又会把结果带到垂直方向；因此二维向量空间本身并没有一个同时兼顾<span style="background-color: #c0c0c0;">封闭性（Closure）</span>与<span style="background-color: #c0c0c0;">可除性</span>的内建乘法。复数则不同：两个复数相乘后仍是复数，非零复数还总能做除法。这使得复平面不仅“几何上的二维平面”，还一个可自由做加减乘除的完整数系。</p>
<p>这带来两个二维向量本身不具备的优势。第一，复数把二维旋转直接写进了乘法：若 <span displaypfx="inline-" class="mathjax-container">\(z=re^{i\theta}\)</span>，则乘以另一个复数时会自动实现“模相乘、角相加”。<span style="background-color: #c0c0c0;">复数乘法天然就是缩放 + 旋转</span>；而若只用二维向量，通常还需要额外引入旋转矩阵。第二，复数让多项式方程的可解性闭合：例如 <span displaypfx="inline-" class="mathjax-container">\(x^2+1=0\)</span> 在实数域无解，但在复数域有解 <span displaypfx="inline-" class="mathjax-container">\(\pm i\)</span>。更深一层地，代数基本定理（Fundamental Theorem of Algebra）说明任意非常数多项式在复数域里都有根，因此复数成为代数方程的自然终点。</p>
<p>因此，二维向量更像是在描述“箭头、位移、速度、受力”的线性对象；复数则是在同一个平面上额外安装了一套兼容乘法、旋转与方程求解的代数机制。对于信号处理（Signal Processing）、交流电分析、傅里叶变换（Fourier Transform）、量子力学以及很多 AI 中的频域方法，复数都核心是一个更强的二维代数系统。</p>
<div class="blog_h3"><span class="graybg">复数的表示：直角坐标（Rectangular Form）</span></div>
<p>复数（Complex Number）写作 <span displaypfx="inline-" class="mathjax-container">\(z=a+bi\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(a,b\in\mathbb{R}\)</span>，虚数单位（Imaginary Unit）满足 <span displaypfx="inline-" class="mathjax-container">\(i^2=-1\)</span>。把 <span displaypfx="inline-" class="mathjax-container">\(z\)</span> 视为二维平面上的点 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span>，就得到直角坐标（Rectangular Form）。</p>
<div class="blog_h3"><span class="graybg">复数的表示：极坐标（Polar Form）</span></div>
<p>同一个点也可用极坐标（Polar Form）表示：令 <span displaypfx="inline-" class="mathjax-container">\(r=|z|\)</span> 为模（Modulus），<span displaypfx="inline-" class="mathjax-container">\(\theta=\arg(z)\)</span> 为辐角（Argument），则</p>
<span displaypfx="" class="mathjax-container">\[z=r(\cos\theta+i\sin\theta)=re^{i\theta}\]</span>
<p>两种坐标之间的转换：</p>
<span displaypfx="" class="mathjax-container">\[r=\sqrt{a^2+b^2},\quad a=r\cos\theta,\quad b=r\sin\theta\]</span>
<p><span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 通常用 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{atan2}(b,a)\)</span> 计算，并且 <span displaypfx="inline-" class="mathjax-container">\(\arg(z)\)</span> 并非唯一的：加上任意 <span displaypfx="inline-" class="mathjax-container">\(2\pi k\)</span>（<span displaypfx="inline-" class="mathjax-container">\(k\in\mathbb{Z}\)</span>）表示同一个方向。</p>
<p>例：<span displaypfx="inline-" class="mathjax-container">\(z=1+i\)</span> 的模是 <span displaypfx="inline-" class="mathjax-container">\(\sqrt{2}\)</span>，辐角是 <span displaypfx="inline-" class="mathjax-container">\(\pi/4\)</span>，因此 <span displaypfx="inline-" class="mathjax-container">\(z=\sqrt{2}\,e^{i\pi/4}\)</span>。</p>
<p>棣莫弗公式（De Moivre's Formula）给出幂运算的快捷形式：</p>
<span displaypfx="" class="mathjax-container">\[(\cos\theta+i\sin\theta)^n=\cos(n\theta)+i\sin(n\theta)\]</span>
<div class="blog_h3"><span class="graybg">共轭与模</span></div>
<p>复数 <span displaypfx="inline-" class="mathjax-container">\(z = a + bi\)</span> 的模（Modulus）定义为 <span displaypfx="inline-" class="mathjax-container">\(|z|=\sqrt{a^2+b^2}\)</span>，表示复平面（Complex Plane）中点 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 到原点的欧氏距离（Euclidean Distance）。</p>
<p>共轭（Conjugate）记作 <span displaypfx="inline-" class="mathjax-container">\(\bar z = a-bi\)</span>。几何上，它把点 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 关于实轴（Real Axis）镜像到 <span displaypfx="inline-" class="mathjax-container">\((a,-b)\)</span>；数值上，它把“相位（Phase）”取反而保持“幅值（Magnitude）”不变。</p>
<p>共轭与模的核心关系是 <span displaypfx="inline-" class="mathjax-container">\(z\bar z = |z|^2\)</span>，展开即可验证：</p>
<span displaypfx="" class="mathjax-container">\[(a+bi)(a-bi)=a^2+b^2=|z|^2\]</span>
<p>这个恒等式的一个直接用途是复数除法：为了避免分母含有虚部，把分母乘以共轭进行“有理化（Rationalization）”。</p>
<span displaypfx="" class="mathjax-container">\[\frac{a+bi}{c+di}=\frac{(a+bi)(c-di)}{(c+di)(c-di)}=\frac{(a+bi)(c-di)}{c^2+d^2}\]</span>
<p>例： <span displaypfx="inline-" class="mathjax-container">\(\frac{1+2i}{3-4i}=\frac{(1+2i)(3+4i)}{3^2+4^2}=\frac{-5+10i}{25}=-\frac{1}{5}+\frac{2}{5}i\)</span>。这里分母变成实数，是因为 <span displaypfx="inline-" class="mathjax-container">\((3-4i)(3+4i)=3^2+4^2\)</span>。</p>
<div class="blog_h3"><span class="graybg">复数乘法与旋转</span></div>
<p>把复数写成极坐标（Polar Form）：<span displaypfx="inline-" class="mathjax-container">\(z=r(\cos\theta+i\sin\theta)=re^{i\theta}\)</span>。此时复数乘法的几何意义非常直接：</p>
<span displaypfx="" class="mathjax-container">\[z_1 z_2 = (r_1 e^{i\theta_1})(r_2 e^{i\theta_2}) = (r_1 r_2)e^{i(\theta_1+\theta_2)}\]</span>
<p><span style="background-color: #c0c0c0;">模相乘、辐角相加</span>。乘法同时完成缩放（Scaling）与旋转（Rotation）。</p>
<p>例：乘以 <span displaypfx="inline-" class="mathjax-container">\(i=e^{i\pi/2}\)</span> 会把任意复数逆时针旋转 90° 且不改变模；乘以 <span displaypfx="inline-" class="mathjax-container">\(-1=e^{i\pi}\)</span> 会旋转 180°。例如 <span displaypfx="inline-" class="mathjax-container">\((1+2i)\cdot i=-2+i\)</span>，几何上就是把点 <span displaypfx="inline-" class="mathjax-container">\((1,2)\)</span> 旋到 <span displaypfx="inline-" class="mathjax-container">\((-2,1)\)</span>。</p>
<div class="blog_h2"><span class="graybg">数列与级数</span></div>
<p>求和符号（Summation Symbol）<span displaypfx="inline-" class="mathjax-container">\(\sum\)</span> 与乘积符号（Product Symbol）<span displaypfx="inline-" class="mathjax-container">\(\prod\)</span> 是数列与级数推导里最常见的两个“聚合”记号：</p>
<span displaypfx="" class="mathjax-container">\[\sum_{i=1}^{n} a_i=a_1+a_2+\cdots+a_n,\quad \prod_{i=1}^{n} a_i=a_1\cdot a_2\cdots a_n\]</span>
<p>英文里通常把 <span displaypfx="inline-" class="mathjax-container">\(\sum\)</span> 读作 “sigma” 或 “summation”，把 <span displaypfx="inline-" class="mathjax-container">\(\prod\)</span> 读作 “capital pi” 或 “product”。</p>
<div class="blog_h3"><span class="graybg">等差数列 / 等比数列</span></div>
<p>数列（Sequence）是一列按整数下标排列的数 <span displaypfx="inline-" class="mathjax-container">\(\{a_n\}_{n\ge 1}\)</span>。最常见的两类是等差数列（Arithmetic Sequence）与等比数列（Geometric Sequence）。它们都可用“递推定义 + 通项公式 + 前 n 项和”三件套描述。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">类型</td>
<td style="text-align: center;">递推定义</td>
<td style="text-align: center;">通项（<span displaypfx="inline-" class="mathjax-container">\(a_n\)</span>）</td>
<td style="width: 35%; text-align: center;">前 n 项和（<span displaypfx="inline-" class="mathjax-container">\(S_n=\sum_{k=1}^{n} a_k\)</span>）</td>
</tr>
</thead>
<tbody>
<tr>
<td>等差数列（Arithmetic）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a_{n}=a_{n-1}+d\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a_n=a_1+(n-1)d\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(S_n=\frac{n}{2}(a_1+a_n)=\frac{n}{2}\left(2a_1+(n-1)d\right)\)</span></td>
</tr>
<tr>
<td>等比数列（Geometric）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(a_{n}=ra_{n-1}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a_n=a_1 r^{n-1}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(S_n=\begin{cases}\frac{a_1(1-r^n)}{1-r},&amp; r\ne 1 \\ na_1,&amp; r=1\end{cases}\)</span></td>
</tr>
</tbody>
</table>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(a_1=1,d=2\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(a_n=2n-1\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(S_n=n^2\)</span>。若 <span displaypfx="inline-" class="mathjax-container">\(a_1=1,r=\frac{1}{2}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(S_n=2\left(1-2^{-n}\right)\)</span>，并随 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 增大趋近于 2。</p>
<div class="blog_h3"><span class="graybg">无穷级数与收敛</span></div>
<p>无穷级数（Infinite Series）<span displaypfx="inline-" class="mathjax-container">\(\sum_{n=1}^{\infty} a_n\)</span> 的核心对象是部分和（Partial Sum）序列 <span displaypfx="inline-" class="mathjax-container">\(S_N=\sum_{n=1}^{N} a_n\)</span>。若极限 <span displaypfx="inline-" class="mathjax-container">\(\lim_{N\to\infty} S_N\)</span> 存在且为有限值，则级数收敛（Convergence）；否则发散（Divergence）。</p>
<p>必要条件：若 <span displaypfx="inline-" class="mathjax-container">\(\sum_{n=1}^{\infty} a_n\)</span> 收敛，则必有 <span displaypfx="inline-" class="mathjax-container">\(\lim_{n\to\infty} a_n=0\)</span>。反之不成立（例如调和级数 <span displaypfx="inline-" class="mathjax-container">\(\sum 1/n\)</span> 发散）。</p>
<p>绝对收敛（Absolute Convergence）指 <span displaypfx="inline-" class="mathjax-container">\(\sum |a_n|\)</span> 收敛；绝对收敛必推出原级数收敛。仅 <span displaypfx="inline-" class="mathjax-container">\(\sum a_n\)</span> 收敛但 <span displaypfx="inline-" class="mathjax-container">\(\sum |a_n|\)</span> 发散则为条件收敛（Conditional Convergence），此时项的重排可能改变和（甚至导致发散）。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/infinite-series.jpg"><img class="alignnone size-full wp-image-40597" src="https://blog.gmem.cc/wp-content/uploads/2026/03/infinite-series.jpg" alt="infinite-series" width="100%" /></a></p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">判别法</td>
<td style="text-align: center;">条件/计算量</td>
<td style="text-align: center;">结论</td>
</tr>
</thead>
<tbody>
<tr>
<td>几何级数（Geometric Series）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sum_{n=0}^{\infty} ar^n\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(|r|&lt;1\)</span> 时收敛，且和为 <span displaypfx="inline-" class="mathjax-container">\(\frac{a}{1-r}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(|r|\ge 1\)</span> 时发散</td>
</tr>
<tr>
<td>p-级数（p-series）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sum_{n=1}^{\infty}\frac{1}{n^p}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(p&gt;1\)</span> 收敛；<span displaypfx="inline-" class="mathjax-container">\(p\le 1\)</span> 发散（调和级数为 <span displaypfx="inline-" class="mathjax-container">\(p=1\)</span>）</td>
</tr>
<tr>
<td>比较判别（Comparison）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\le a_n\le b_n\)</span>（充分大时）</td>
<td>若 <span displaypfx="inline-" class="mathjax-container">\(\sum b_n\)</span> 收敛，则 <span displaypfx="inline-" class="mathjax-container">\(\sum a_n\)</span> 收敛；若 <span displaypfx="inline-" class="mathjax-container">\(\sum a_n\)</span> 发散，则 <span displaypfx="inline-" class="mathjax-container">\(\sum b_n\)</span> 发散</td>
</tr>
<tr>
<td>比值判别（Ratio Test）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(L=\limsup_{n\to\infty}\left|\frac{a_{n+1}}{a_n}\right|\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(L&lt;1\)</span> 绝对收敛；<span displaypfx="inline-" class="mathjax-container">\(L&gt;1\)</span>（或无穷大）发散；<span displaypfx="inline-" class="mathjax-container">\(L=1\)</span> 不定</td>
</tr>
<tr>
<td>根值判别（Root Test）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\rho=\limsup_{n\to\infty}\sqrt[n]{|a_n|}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\rho&lt;1\)</span> 绝对收敛；<span displaypfx="inline-" class="mathjax-container">\(\rho&gt;1\)</span> 发散；<span displaypfx="inline-" class="mathjax-container">\(\rho=1\)</span> 不定</td>
</tr>
<tr>
<td>交错级数（Alternating Series）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sum (-1)^{n-1}b_n\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(b_n\downarrow 0\)</span></td>
<td>收敛；截断误差满足 <span displaypfx="inline-" class="mathjax-container">\(|S-S_N|\le b_{N+1}\)</span></td>
</tr>
</tbody>
</table>
<div class="blog_h4"><span class="graybg">调和级数与调和数（Harmonic Series / Harmonic Numbers）</span></div>
<p>调和级数（Harmonic Series）是 <span displaypfx="inline-" class="mathjax-container">\(\sum_{n=1}^{\infty}\frac{1}{n}\)</span>。它是最经典的“项趋于 0 但级数仍发散”的例子：虽然 <span displaypfx="inline-" class="mathjax-container">\(\lim_{n\to\infty}\frac{1}{n}=0\)</span>，但部分和会无界增长。</p>
<p>其部分和称为调和数（Harmonic Number）：</p>
<span displaypfx="" class="mathjax-container">\[H_n=\sum_{k=1}^{n}\frac{1}{k}\]</span>
<p>调和数的渐近行为与对数紧密相关：<span displaypfx="inline-" class="mathjax-container">\(H_n=\log n+\gamma+o(1)\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(\gamma\)</span> 是欧拉-马歇罗尼常数（Euler–Mascheroni constant）。因此很多“累积量随步数缓慢增长”的分析最终都会出现 <span displaypfx="inline-" class="mathjax-container">\(\log n\)</span>。</p>
<p>在 AI/优化里，调和级数最常见的用途是解释与验证学习率（Learning Rate）衰减的收敛条件。经典随机逼近（Stochastic Approximation）的一个常用充分条件是：</p>
<span displaypfx="" class="mathjax-container">\[\sum_{t=1}^{\infty}\eta_t=\infty,\quad \sum_{t=1}^{\infty}\eta_t^2&lt;\infty\]</span>
<p>取 <span displaypfx="inline-" class="mathjax-container">\(\eta_t=\frac{1}{t}\)</span> 时，第一项对应调和级数发散（保证“走得足够远”），第二项对应 <span displaypfx="inline-" class="mathjax-container">\(\sum 1/t^2\)</span> 收敛（保证噪声的累计影响有限）。很多 SGD（Stochastic Gradient Descent）及在线学习（Online Learning）的理论推导，会用这组“一个发散、一个收敛”的对比来控制偏差与方差项。</p>
<div class="blog_h3"><span class="graybg">Taylor 展开</span></div>
<p>Taylor 展开（Taylor Expansion）用多项式在局部逼近光滑函数。Taylor 定理（Taylor's Theorem）强调“有限阶近似 + 余项（Remainder）”，Taylor 级数（Taylor Series）强调“无限项级数在收敛时等于原函数”。</p>
<span displaypfx="" class="mathjax-container">\[f(x)=\sum_{k=0}^{n}\frac{f^{(k)}(a)}{k!}(x-a)^k+R_{n+1}(x)\]</span>
<p>当余项在 <span displaypfx="inline-" class="mathjax-container">\(n\to\infty\)</span> 时收敛到 0，才有 <span displaypfx="inline-" class="mathjax-container">\(f(x)=\sum_{k=0}^{\infty}\frac{f^{(k)}(a)}{k!}(x-a)^k\)</span>。并非所有光滑函数都等于其 Taylor 级数。</p>
<p>例：在 <span displaypfx="inline-" class="mathjax-container">\(a=0\)</span> 展开，<span displaypfx="inline-" class="mathjax-container">\(e^x\approx 1+x+\frac{x^2}{2}\)</span>；当 <span displaypfx="inline-" class="mathjax-container">\(|x|\)</span> 很小时，用低阶项就能得到高精度近似。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/taylor-expansion.jpg"><img class="alignnone size-full wp-image-40583" src="https://blog.gmem.cc/wp-content/uploads/2026/03/taylor-expansion.jpg" alt="taylor-expansion" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">组合数学</span></div>
<p>组合数学（Combinatorics）研究离散结构的计数、构造与存在性。它的典型问题是“有多少种可能”：当选择空间巨大时，计数结果直接决定搜索/采样的复杂度；当把计数结果归一化为概率时，就得到二项分布、超几何分布等常见模型。</p>
<div class="blog_h3"><span class="graybg">排列与组合</span></div>
<p>排列（Permutation）与组合（Combination）的区别只在一个点：<span style="background-color: #c0c0c0;">是否区分顺序</span>。把“先选哪些元素”与“再怎么排序”分开理解，可以避免大量记忆负担。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">对象</td>
<td style="text-align: center;">记号</td>
<td style="width: 30%; text-align: center;">公式</td>
<td style="text-align: center;">直觉</td>
</tr>
</thead>
<tbody>
<tr>
<td>阶乘（Factorial）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(n!\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(n!=n(n-1)\cdots 2\cdot 1,\ 0!=1\)</span></td>
<td>把 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个互异元素全部排列的方式数</td>
</tr>
<tr>
<td>排列（k-permutation）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(n,k)\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(n,k)=\frac{n!}{(n-k)!}\)</span></td>
<td>从 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个里选 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 个并排序：一步一步填位置</td>
</tr>
<tr>
<td>组合（k-combination）</td>
<td><span displaypfx="inline-" class="mathjax-container">\({n \choose k}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\({n \choose k}=\frac{n!}{k!(n-k)!}\)</span></td>
<td>从 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个里选 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 个，不关心顺序：先选集合</td>
</tr>
<tr>
<td>排列与组合关系</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(n,k)\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(n,k)={n \choose k}\,k!\)</span></td>
<td>先选 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 个元素，再把它们排序</td>
</tr>
</tbody>
</table>
<p>例：从 5 个候选特征里挑 3 个做一个无序子集，有 <span displaypfx="inline-" class="mathjax-container">\({5 \choose 3}=10\)</span> 种；如果还要给这 3 个特征排“处理顺序”，则变为排列 <span displaypfx="inline-" class="mathjax-container">\(P(5,3)=5\cdot4\cdot3=60\)</span> 种。</p>
<div class="blog_h3"><span class="graybg">二项式定理</span></div>
<p>二项式定理（Binomial Theorem）描述 <span displaypfx="inline-" class="mathjax-container">\((a+b)^n\)</span> 的展开结构：</p>
<span displaypfx="" class="mathjax-container">\[(a+b)^n=\sum_{k=0}^{n}{n \choose k}a^{n-k}b^k\]</span>
<p>系数 <span displaypfx="inline-" class="mathjax-container">\({n \choose k}\)</span> 的组合解释非常直接：把 <span displaypfx="inline-" class="mathjax-container">\((a+b)^n\)</span> 看作 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个括号相乘，每一项由“从每个括号里选 <span displaypfx="inline-" class="mathjax-container">\(a\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(b\)</span>”组成。若最终选了 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 次 <span displaypfx="inline-" class="mathjax-container">\(b\)</span>，就需要从 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个位置里挑出这 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 个位置，因此系数是 <span displaypfx="inline-" class="mathjax-container">\({n \choose k}\)</span>。</p>
<p>例：<span displaypfx="inline-" class="mathjax-container">\((x+2)^4={4 \choose 0}x^4+{4 \choose 1}x^3\cdot2+{4 \choose 2}x^2\cdot2^2+{4 \choose 3}x\cdot2^3+{4 \choose 4}2^4=x^4+8x^3+24x^2+32x+16\)</span>。</p>
<p>二项式系数还满足递推（Pascal's Rule）：<span displaypfx="inline-" class="mathjax-container">\({n \choose k}={n-1 \choose k-1}+{n-1 \choose k}\)</span>。这等价于“选与不选某个固定元素”的分类讨论。</p>
<p>与概率的连接：若独立伯努利试验（Bernoulli Trial）成功概率为 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>，做 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 次恰好成功 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 次的概率是 <span displaypfx="inline-" class="mathjax-container">\({n \choose k}p^k(1-p)^{n-k}\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\({n \choose k}\)</span> 计数的是“成功出现在哪些轮次”。</p>
<div class="blog_h2"><span class="graybg">不等式</span></div>
<p>不等式（Inequality）是把“难算/难优化/难比较”的表达式替换为“可控的上界或下界”的工具。机器学习中的许多目标函数与泛化分析，本质上都在用不等式把复杂量压到可操作的形式（例如把非线性函数用线性或二次上界近似）。</p>
<div class="blog_h3"><span class="graybg">基本不等式</span></div>
<p>基本不等式（Basic Inequalities）常见来源有两类：一类来自非负量（例如 <span displaypfx="inline-" class="mathjax-container">\((\cdot)^2\ge 0\)</span>），另一类来自范数（Norm）与凸性（Convexity）的结构性质。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">不等式</td>
<td style="text-align: center;">形式</td>
<td style="text-align: center;">典型用途</td>
</tr>
</thead>
<tbody>
<tr>
<td>平方非负</td>
<td><span displaypfx="inline-" class="mathjax-container">\((a-b)^2\ge 0\Rightarrow a^2+b^2\ge 2ab\)</span></td>
<td>把乘积项 <span displaypfx="inline-" class="mathjax-container">\(ab\)</span> 转成平方项，便于求界或优化（常见于“配方”）</td>
</tr>
<tr>
<td>三角不等式（Triangle Inequality）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(|x+y|\le |x|+|y|\)</span></td>
<td>把“相加后的绝对值”上界成“绝对值之和”；用于误差传播与残差界</td>
</tr>
<tr>
<td>均值不等式（AM-GM）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{a+b}{2}\ge \sqrt{ab}\quad (a,b\ge 0)\)</span></td>
<td>在“和固定时乘积最大”或“乘积/几何平均”相关问题里给出最紧的经典界</td>
</tr>
</tbody>
</table>
<p>例（AM-GM 的“最大乘积”直觉）：在 <span displaypfx="inline-" class="mathjax-container">\(a,b\ge 0\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(a+b=10\)</span> 的约束下，乘积满足 <span displaypfx="inline-" class="mathjax-container">\(ab\le \left(\frac{a+b}{2}\right)^2=25\)</span>，并且当且仅当 <span displaypfx="inline-" class="mathjax-container">\(a=b=5\)</span> 取等号。</p>
<div class="blog_h3"><span class="graybg">Jensen 不等式</span></div>
<p>Jensen 不等式（Jensen's Inequality）回答一个很具体的问题：<span style="background-color: #c0c0c0;">“平均”与“非线性”交换顺序会发生什么</span>。它是把抽象的凸性（Convexity）变成可用结论的最常用工具之一。</p>
<p>先把术语说清楚：</p>
<ul>
<li>加权平均（Weighted Average）：给一组数 <span displaypfx="inline-" class="mathjax-container">\(x_1,\dots,x_n\)</span> 分配权重 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i\ge 0\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(\sum_i\lambda_i=1\)</span>，则加权平均是 <span displaypfx="inline-" class="mathjax-container">\(\sum_i\lambda_i x_i\)</span>（把 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i\)</span> 视为“占比”即可）。</li>
<li>凸函数（Convex Function）：函数 <span displaypfx="inline-" class="mathjax-container">\(\varphi\)</span> 若满足对任意 <span displaypfx="inline-" class="mathjax-container">\(x_1,x_2\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\lambda\in[0,1]\)</span> 都有 <span displaypfx="inline-" class="mathjax-container">\(\varphi(\lambda x_1+(1-\lambda)x_2)\le \lambda\varphi(x_1)+(1-\lambda)\varphi(x_2)\)</span>，则称 <span displaypfx="inline-" class="mathjax-container">\(\varphi\)</span> 是凸的。直观上：它“向上弯”，因此对它做平均会被“惩罚”。</li>
<li>随机变量（Random Variable）：一个在不同试验/样本上会取不同值的量；把 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 视为“每次取到的数”。</li>
<li>期望（Expectation）<span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[\cdot]\)</span>：可把它理解为“按概率加权的平均”。</li>
</ul>
<p>Jensen 的形式（离散加权平均）：若 <span displaypfx="inline-" class="mathjax-container">\(\varphi\)</span> 凸，则</p>
<span displaypfx="" class="mathjax-container">\[\varphi\!\left(\sum_i \lambda_i x_i\right)\le \sum_i \lambda_i \varphi(x_i)\]</span>
<p>等价的期望形式：对随机变量 <span displaypfx="inline-" class="mathjax-container">\(X\)</span>（且 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[\varphi(X)]\)</span> 存在），有</p>
<span displaypfx="" class="mathjax-container">\[\varphi(\mathbb{E}[X])\le \mathbb{E}[\varphi(X)]\]</span>
<p>如果 <span displaypfx="inline-" class="mathjax-container">\(\varphi\)</span> 是凹函数（Concave Function），不等号方向会反过来。</p>
<p>场景 1：凸惩罚下，“波动”本身有代价。设某个系统的代价函数是 <span displaypfx="inline-" class="mathjax-container">\(\varphi(t)=t^2\)</span>（二次惩罚，Convex Penalty），比较两种延迟（Latency）：</p>
<ul>
<li>稳定方案：每次都是 100ms，则平均代价是 <span displaypfx="inline-" class="mathjax-container">\(100^2=10000\)</span>。</li>
<li>波动方案：一半时间 50ms、一半时间 150ms（平均同样是 100ms），则平均代价是 <span displaypfx="inline-" class="mathjax-container">\(\frac{50^2+150^2}{2}=12500\)</span>。</li>
</ul>
<p>两者平均延迟一样，但二次代价更偏好稳定方案；这就是 Jensen 在 <span displaypfx="inline-" class="mathjax-container">\(\varphi(t)=t^2\)</span> 下的直接体现：<span displaypfx="inline-" class="mathjax-container">\(\left(\frac{50+150}{2}\right)^2\le \frac{50^2+150^2}{2}\)</span>。</p>
<p>场景 2：对数损失下，“偶尔很错”会被放大。分类里常用对数损失（Log Loss）<span displaypfx="inline-" class="mathjax-container">\(\varphi(p)=-\log p\)</span>（<span displaypfx="inline-" class="mathjax-container">\(p\)</span> 是正确类别的预测概率），它在 <span displaypfx="inline-" class="mathjax-container">\((0,1]\)</span> 上是凸函数。假设一个模型在同一个样本上两次输出 <span displaypfx="inline-" class="mathjax-container">\(p=0.9\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(p=0.1\)</span>（一次很自信、一次几乎反过来），则</p>
<span displaypfx="" class="mathjax-container">\[-\log\!\left(\frac{0.9+0.1}{2}\right)=-\log 0.5\approx 0.693\le \frac{-\log 0.9-\log 0.1}{2}\approx 1.204\]</span>
<p>含义：在凸损失下，预测的波动会提高平均损失；这也是许多“用不等式构造上界/下界”方法（例如把难优化的期望目标变成可算的界）背后的数学原因。</p>
<p>何时取等号：当所有 <span displaypfx="inline-" class="mathjax-container">\(x_i\)</span> 相等（没有波动），或 <span displaypfx="inline-" class="mathjax-container">\(\varphi\)</span> 在相关区间上近似线性时，不等式可取等号。</p>
<div class="blog_h3"><span class="graybg">Cauchy-Schwarz 不等式</span></div>
<p>Cauchy-Schwarz 不等式（Cauchy–Schwarz Inequality）回答另一个非常基础的问题：<span style="background-color: #c0c0c0;">两组数“对齐相乘再求和”的结果，最多能有多大</span>。它是内积（Inner Product）与范数（Norm）体系的核心约束。</p>
<p>把术语说清楚后，这个不等式就不神秘：</p>
<ul>
<li>向量（Vector）：把一组数按顺序排成列表，例如 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}=(a_1,\dots,a_n)\)</span>。</li>
<li>点积/内积（Dot Product / Inner Product）：<span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}^\top\mathbf{b}=\sum_i a_i b_i\)</span>，可理解为“两组数在同一位置上的重叠程度”。</li>
<li>L2 范数（<span displaypfx="inline-" class="mathjax-container">\(\ell_2\)</span> Norm）：<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\|_2=\sqrt{\sum_i a_i^2}\)</span>，几何上是向量长度（Length）。</li>
</ul>
<p>不等式本身是：</p>
<span displaypfx="" class="mathjax-container">\[|\mathbf{a}^\top\mathbf{b}|\le \|\mathbf{a}\|_2\,\|\mathbf{b}\|_2\]</span>
<p>几何解释：把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}^\top\mathbf{b}\)</span> 写成 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\|_2\|\mathbf{b}\|_2\cos\theta\)</span>，Cauchy-Schwarz 等价于 <span displaypfx="inline-" class="mathjax-container">\(|\cos\theta|\le 1\)</span>。当且仅当两向量同向或反向（线性相关（Linearly Dependent））时取等号。</p>
<p>场景 1：为什么检索里常用“余弦相似度（Cosine Similarity）”。在向量检索中，常用点积 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{q}^\top\mathbf{d}\)</span> 衡量查询向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{q}\)</span> 与文档向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{d}\)</span> 的相似度。但点积同时受“方向”和“长度”影响：如果某个向量范数很大，即使方向一般，点积也可能很大。</p>
<p>一个最小例子：令查询 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{q}=(1,1)\)</span>，两篇候选文档向量为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{d}_1=(100,0)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{d}_2=(2,2)\)</span>。点积分别是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{q}^\top\mathbf{d}_1=100\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{q}^\top\mathbf{d}_2=4\)</span>，点积会更偏向 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{d}_1\)</span>。但如果把向量归一化到单位范数（Unit Norm）再比较，则</p>
<span displaypfx="" class="mathjax-container">\[\cos(\mathbf{q},\mathbf{d}_1)=\frac{\mathbf{q}^\top\mathbf{d}_1}{\|\mathbf{q}\|_2\|\mathbf{d}_1\|_2}=\frac{1}{\sqrt{2}},\quad \cos(\mathbf{q},\mathbf{d}_2)=\frac{\mathbf{q}^\top\mathbf{d}_2}{\|\mathbf{q}\|_2\|\mathbf{d}_2\|_2}=1\]</span>
<p>归一化后 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{d}_2\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{q}\)</span> 方向完全一致，更符合“语义对齐”的直觉。Cauchy-Schwarz 保证余弦相似度一定落在 [-1,1]，从而成为一个尺度稳定、可解释的相似度。</p>
<p>场景 2：为什么相关系数（Correlation Coefficient）不可能超过 1。把两组已中心化（Centered，均值为 0）的数据序列看成向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x},\mathbf{y}\)</span>，它们的“协方差方向”可以写成点积 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top\mathbf{y}\)</span>，而各自的尺度由 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_2,\|\mathbf{y}\|_2\)</span> 给出。Cauchy-Schwarz 直接推出</p>
<span displaypfx="" class="mathjax-container">\[\left|\frac{\mathbf{x}^\top\mathbf{y}}{\|\mathbf{x}\|_2\|\mathbf{y}\|_2}\right|\le 1\]</span>
<p>这就是“线性相关强度最多 100%”的数学原因；取等号对应完全线性关系，即 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}=c\mathbf{x}\)</span>。</p>
<div class="blog_h2"><span class="graybg">集合论基础</span></div>
<p>集合论（Set Theory）是现代数学语言的底座：几乎所有“对象 + 结构”的定义都能归结为集合及其上的运算。工程语境里，把对象抽象为集合的好处是：边界清晰、可组合、可用代数规则推导。</p>
<div class="blog_h3"><span class="graybg">集合运算（并 / 交 / 补）</span></div>
<p>集合（Set）是元素（Element）的无序聚合。记 <span displaypfx="inline-" class="mathjax-container">\(x\in A\)</span> 表示 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 属于集合 <span displaypfx="inline-" class="mathjax-container">\(A\)</span>，记 <span displaypfx="inline-" class="mathjax-container">\(A\subseteq B\)</span> 表示子集（Subset）。常用的运算如下。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">运算</td>
<td style="text-align: center; width: 150px;">记号</td>
<td style="text-align: center;">定义</td>
<td style="text-align: center;">例子</td>
</tr>
</thead>
<tbody>
<tr>
<td>并（Union）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A\cup B\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\{x\mid x\in A\ \text{或}\ x\in B\}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\{1,2,3\}\cup\{3,4\}=\{1,2,3,4\}\)</span></td>
</tr>
<tr>
<td>交（Intersection）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A\cap B\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\{x\mid x\in A\ \text{且}\ x\in B\}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\{1,2,3\}\cap\{3,4\}=\{3\}\)</span></td>
</tr>
<tr>
<td>差（Difference）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A\setminus B\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\{x\mid x\in A,\ x\notin B\}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\{1,2,3\}\setminus\{3,4\}=\{1,2\}\)</span></td>
</tr>
<tr>
<td>补（Complement）</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A^c\)</span></td>
<td>相对于全集 <span displaypfx="inline-" class="mathjax-container">\(U\)</span>： <span displaypfx="inline-" class="mathjax-container">\(A^c=U\setminus A\)</span></td>
<td>若 <span displaypfx="inline-" class="mathjax-container">\(U=\{1,2,3,4\}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\{1,2,3\}^c=\{4\}\)</span></td>
</tr>
</tbody>
</table>
<p>De Morgan 律（De Morgan's Laws）是“补运算”与“并/交”之间的互换规则：</p>
<span displaypfx="" class="mathjax-container">\[(A\cup B)^c=A^c\cap B^c,\quad (A\cap B)^c=A^c\cup B^c\]</span>
<p>计数场景常用容斥原理（Inclusion–Exclusion）：<span displaypfx="inline-" class="mathjax-container">\(|A\cup B|=|A|+|B|-|A\cap B|\)</span>。例：一个数据集里“命中规则 A”的样本有 120 个，“命中规则 B”的有 80 个，同时命中的有 30 个，则命中至少一个规则的样本数是 <span displaypfx="inline-" class="mathjax-container">\(120+80-30=170\)</span>。</p>
<div class="blog_h3"><span class="graybg">映射与关系</span></div>
<p>映射（Mapping / Function）用来描述“从输入到输出”的确定性规则。写作 <span displaypfx="inline-" class="mathjax-container">\(f:A\to B\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 是定义域（Domain），<span displaypfx="inline-" class="mathjax-container">\(B\)</span> 是陪域（Codomain）。对 <span displaypfx="inline-" class="mathjax-container">\(x\in A\)</span>，输出写作 <span displaypfx="inline-" class="mathjax-container">\(f(x)\in B\)</span>。像集（Image / Range）为 <span displaypfx="inline-" class="mathjax-container">\(f(A)=\{f(x)\mid x\in A\}\)</span>。</p>
<p>关系（Relation）是更一般的概念：它不要求“每个输入对应唯一输出”。在集合论里，一个二元关系 <span displaypfx="inline-" class="mathjax-container">\(R\)</span> 可以看成笛卡尔积（Cartesian Product）上的子集：</p>
<span displaypfx="" class="mathjax-container">\[R\subseteq A\times B,\quad (a,b)\in R\ \text{表示}\ a\ R\ b\]</span>
<p>典型例子：</p>
<ul>
<li>等价关系（Equivalence Relation）：满足自反、对称、传递。例如定义 <span displaypfx="inline-" class="mathjax-container">\(x\sim y\Leftrightarrow x-y\)</span> 能被 <span displaypfx="inline-" class="mathjax-container">\(m\)</span> 整除（同余），它把整数划分为若干等价类（Equivalence Class）。</li>
<li>偏序（Partial Order）：满足自反、反对称、传递。例如 <span displaypfx="inline-" class="mathjax-container">\(\le\)</span> 是实数上的偏序；集合的包含关系 <span displaypfx="inline-" class="mathjax-container">\(\subseteq\)</span> 也是偏序。</li>
<li>一般关系：例如“相似度大于阈值”定义了一个关系，但它通常不具备传递性，因此并非等价关系。</li>
</ul>
<p>把关系写成矩阵/邻接矩阵（Adjacency Matrix）是常用表示：若 <span displaypfx="inline-" class="mathjax-container">\(A=B=\{1,\ldots,n\}\)</span>，定义 <span displaypfx="inline-" class="mathjax-container">\(M_{ij}=1\)</span> 当且仅当 <span displaypfx="inline-" class="mathjax-container">\((i,j)\in R\)</span>。在图论（Graph Theory）与推荐/检索（Retrieval）里，这种表示会直接进入线性代数计算。</p>
<div class="blog_h1"><span class="graybg">线性代数</span></div>
<div class="blog_h2"><span class="graybg">向量</span></div>
<div class="blog_h3"><span class="graybg">向量加减法（Vector Addition / Subtraction）</span></div>
<p>在 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^n\)</span> 中，向量加法与减法按分量（Component-wise）进行。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}=(a_1,\ldots,a_n)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}=(b_1,\ldots,b_n)\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{a}+\mathbf{b}=(a_1+b_1,\ldots,a_n+b_n),\quad \mathbf{a}-\mathbf{b}=(a_1-b_1,\ldots,a_n-b_n)\]</span>
<p>几何上，加法对应向量合成；减法 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}-\mathbf{b}\)</span> 是从 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 指向 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\)</span> 的位移向量。</p>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}=(1,2)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}=(3,-1)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}+\mathbf{b}=(4,1)\)</span>，<span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}-\mathbf{b}=(-2,3)\)</span>。</p>
<p>在 AI 里，残差连接（Residual Connection）是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}+f(\mathbf{x})\)</span>；梯度下降（Gradient Descent）的更新可写成 <span displaypfx="inline-" class="mathjax-container">\(\theta\leftarrow\theta-\eta\nabla L(\theta)\)</span>。它们都直接依赖向量加减法。</p>
<div class="blog_h3"><span class="graybg">点积（Dot Product）</span></div>
<p>点积（Dot Product）把两个向量映射为标量（Scalar），常用于相似度、投影和方向一致性判断。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a},\mathbf{b}\in\mathbb{R}^n\)</span>，定义为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\cdot\mathbf{b}=\sum_{i=1}^n a_i b_i\)</span>。当 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a},\mathbf{b}\ne\mathbf{0}\)</span> 时，也可写为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\cdot\mathbf{b}=\|\mathbf{a}\|\|\mathbf{b}\|\cos\theta\)</span>。</p>
<p>点积满足交换律（Commutativity）：<span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\cdot\mathbf{b}=\mathbf{b}\cdot\mathbf{a}\)</span>。若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\cdot\mathbf{b}=0\)</span>，两向量正交（Orthogonal）。</p>
<p>向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 方向上的标量投影是 <span displaypfx="inline-" class="mathjax-container">\(\frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{b}\|}\)</span>。投影更常用的是向量形式（Vector Projection）：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{proj}_{\mathbf{b}}(\mathbf{a})=\frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{b}\|^2}\mathbf{b}\]</span>
<p>当把向量归一化到单位范数（Unit Norm）后，点积就等于余弦相似度（Cosine Similarity）：<span displaypfx="inline-" class="mathjax-container">\(\cos\theta=\mathbf{\hat a}\cdot\mathbf{\hat b}\)</span>，这也是检索与表示学习中常见的相似度度量。</p>
<p>单位向量（Unit Vector）是范数为 1 的向量，常用来“只表示方向”。对非零向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\)</span>，其单位向量是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{\hat a}=\frac{\mathbf{a}}{\|\mathbf{a}\|}\)</span>。</p>
<p>方向角（Direction Angles）/方向余弦（Direction Cosines）描述单位向量与各坐标轴的夹角：在三维中，若单位向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}=(u_x,u_y,u_z)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(u_x=\cos\alpha\)</span>、<span displaypfx="inline-" class="mathjax-container">\(u_y=\cos\beta\)</span>、<span displaypfx="inline-" class="mathjax-container">\(u_z=\cos\gamma\)</span>，并满足 <span displaypfx="inline-" class="mathjax-container">\(\cos^2\alpha+\cos^2\beta+\cos^2\gamma=1\)</span>。</p>
<p>点积之所以会出现“乘积”，是因为它等于“被投影长度 × 参照向量长度”： <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\cdot\mathbf{b}=\|\mathbf{b}\|\cdot \mathrm{projLen}_{\mathbf{b}}(\mathbf{a})\)</span>。当两向量同向时，投影长度就是 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\|\)</span>，于是点积变为 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\|\|\mathbf{b}\|\)</span>。</p>
<div class="blog_h4"><span class="graybg">二维向量的复数表示</span></div>
<p>在二维空间里，向量 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 可以写成复数 <span displaypfx="inline-" class="mathjax-container">\(z=a+bi\)</span>。这核心是给同一个二维量换一种记法：实部对应 x 轴分量，虚部对应 y 轴分量。</p>
<p>若另一向量 <span displaypfx="inline-" class="mathjax-container">\((c,d)\)</span> 写成 <span displaypfx="inline-" class="mathjax-container">\(w=c+di\)</span>，则复共轭乘积为</p>
<span displaypfx="" class="mathjax-container">\[z\bar w=(a+bi)(c-di)=(ac+bd)+i(bc-ad)\]</span>
<p>其中实部 <span displaypfx="inline-" class="mathjax-container">\(ac+bd\)</span> 恰好就是二维向量的点积：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{a}\cdot\mathbf{b}=ac+bd=\mathrm{Re}(z\bar w)\]</span>
<p>若再把它们写成极坐标形式 <span displaypfx="inline-" class="mathjax-container">\(z=r_1e^{i\theta_1}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(w=r_2e^{i\theta_2}\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{a}\cdot\mathbf{b}=\mathrm{Re}(z\bar w)=r_1r_2\cos(\theta_1-\theta_2)\]</span>
<p>这里实部的来源可以直接从指数形式读出：因为 <span displaypfx="inline-" class="mathjax-container">\(\bar w=r_2e^{-i\theta_2}\)</span>，所以 <span displaypfx="inline-" class="mathjax-container">\(z\bar w=r_1r_2e^{i(\theta_1-\theta_2)}\)</span>。再用欧拉公式 <span displaypfx="inline-" class="mathjax-container">\(e^{i\phi}=\cos\phi+i\sin\phi\)</span> 展开，就得到 <span displaypfx="inline-" class="mathjax-container">\(z\bar w=r_1r_2\big(\cos(\theta_1-\theta_2)+i\sin(\theta_1-\theta_2)\big)\)</span>；其中实部正是 <span displaypfx="inline-" class="mathjax-container">\(r_1r_2\cos(\theta_1-\theta_2)\)</span>。</p>
<p>因此，点积既可以看成分量乘加，也可以看成“复数乘积取实部”。后一种写法把<span style="background-color: #c0c0c0;">长度</span>与<span style="background-color: #c0c0c0;">相位差</span>放进同一个式子里，在位置编码、旋转表示与频域分析中尤其方便。后文 RoPE 的复数视角正是沿用这层关系：二维块先写成复数，再让相位随位置旋转。</p>
<p>例：令 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}=(3,4)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}=(4,0)\)</span>。则 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\cdot\mathbf{b}=12\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\|=5\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{b}\|=4\)</span>，所以 <span displaypfx="inline-" class="mathjax-container">\(\cos\theta=\frac{12}{20}=0.6\)</span>。而 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 方向上的标量投影是 <span displaypfx="inline-" class="mathjax-container">\(\frac{12}{4}=3\)</span>，恰好对应 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\)</span> 的 x 分量。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/vector-ops.jpg"><img class="alignnone size-full wp-image-40599" src="https://blog.gmem.cc/wp-content/uploads/2026/03/vector-ops.jpg" alt="vector-ops" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">叉积（Cross Product）</span></div>
<p>叉积（Cross Product）定义在三维空间（3D Space）。结果是同时垂直于两个输入向量的向量，大小为 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\times\mathbf{b}\|=\|\mathbf{a}\|\|\mathbf{b}\|\sin\theta\)</span>，等于两向量张成平行四边形的面积。</p>
<p>计算上，若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}=(a_1,a_2,a_3)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}=(b_1,b_2,b_3)\)</span>，则：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{a}\times\mathbf{b}=(a_2b_3-a_3b_2,\ a_3b_1-a_1b_3,\ a_1b_2-a_2b_1)\]</span>
<p>例： <span displaypfx="inline-" class="mathjax-container">\((1,0,0)\times(0,1,0)=(0,0,1)\)</span>。这个例子在几何上对应两个单位正交基向量张成的“正方形面积为 1”，方向由右手定则给出。</p>
<p>叉积为零当且仅当两向量平行（Parallel/Colinear）或至少有一个为零向量：这是因为 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\times\mathbf{b}\|=\|\mathbf{a}\|\|\mathbf{b}\|\sin\theta\)</span>，为 0 只能来自 <span displaypfx="inline-" class="mathjax-container">\(\sin\theta=0\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{a}\|=0\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{b}\|=0\)</span>。</p>
<p>方向由右手定则（Right-Hand Rule）确定：四指从 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\)</span> 旋向 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span>，拇指方向即 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}\times\mathbf{b}\)</span> 方向。旋转“正负”核心是由坐标系（Coordinate System）与观察方向（View Direction）约定决定。</p>
<p>力矩（Torque）可作为叉积方向的直观例子： <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\tau}=\mathbf{r}\times\mathbf{F}\)</span>。这里保留物理解释的唯一目的，是帮助理解叉积的方向性。</p>
<div class="blog_h2"><span class="graybg">基（Basis）</span></div>
<p>在 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^n\)</span> 中，一组向量 <span displaypfx="inline-" class="mathjax-container">\(\{\mathbf{b}_1,\ldots,\mathbf{b}_n\}\)</span> 若线性无关（Linearly Independent）且张成（Span）整个空间，则称为一组基（Basis）。任何向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 都能唯一表示为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=\sum_{i=1}^{n} c_i\mathbf{b}_i\)</span>；系数向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}=(c_1,\ldots,c_n)^\top\)</span> 就是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 在该基下的坐标（Coordinates）。</p>
<p>把基向量按列堆成矩阵 <span displaypfx="inline-" class="mathjax-container">\(B=[\mathbf{b}_1\ \cdots\ \mathbf{b}_n]\in\mathbb{R}^{n\times n}\)</span>，则坐标与原向量满足 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=B\mathbf{c}\)</span>。换基（Change of Basis）在推导里本质就是在不同 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 之间切换坐标表示。</p>
<div class="blog_h3"><span class="graybg">换基（Change of Basis）：同一个向量，不同坐标</span></div>
<p>换基（Change of Basis）指的是：在不改变几何向量本身的前提下，改用另一组基（Basis）来描述它的坐标（Coordinates）。因此，换基改变的是<span style="background-color: #c0c0c0;">表示方式</span>，并非向量对象本身。直观上，可把几何向量理解为平面/空间里的一支箭头。</p>
<p>因此，“换基”不能理解成“把向量变形”。真正发生变化的是参考基（Basis），因此同一向量在不同基下的坐标数值会不同，而几何对象本身保持不变。</p>
<p>为了不混淆“向量本身”和“向量的坐标表示”，可以用一个约定把它们分开：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span>：把同一个几何向量用标准基（Standard Basis）写出来的分量列向量（数值计算里最常用的表示）。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}\)</span>：把同一个几何向量用某组新基 <span displaypfx="inline-" class="mathjax-container">\(\{\mathbf{b}_i\}\)</span> 写出来的坐标向量（Coordinate Vector），也就是“在新基上要乘的系数”。</li>
</ul>
<p>把新基向量在标准基下的分量按列组成 <span displaypfx="inline-" class="mathjax-container">\(B=[\mathbf{b}_1\ \cdots\ \mathbf{b}_n]\)</span>（可称为基矩阵（Basis Matrix）），则</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}=B\mathbf{c}\]</span>
<p>读法：右边 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}\)</span> 是“在新基下的坐标”，左边 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 是“在标准基下的分量”。乘上 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 就把“新基坐标”换算回“标准基分量”。</p>
<p>反过来，如果你已知标准基下的分量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span>，想求新基坐标 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}\)</span>，就需要解线性方程组 <span displaypfx="inline-" class="mathjax-container">\(B\mathbf{c}=\mathbf{x}\)</span>。由于基向量线性无关，矩阵 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 必可逆（Invertible），因此可写成：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{c}=B^{-1}\mathbf{x}\]</span>
<p>更一般地，若旧基矩阵为 <span displaypfx="inline-" class="mathjax-container">\(B\)</span>、新基矩阵为 <span displaypfx="inline-" class="mathjax-container">\(C\)</span>，同一几何向量满足 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=B\mathbf{c}_{B}=C\mathbf{c}_{C}\)</span>，于是坐标之间的换算是：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{c}_{C}=C^{-1}B\,\mathbf{c}_{B}\]</span>
<p>矩阵 <span displaypfx="inline-" class="mathjax-container">\(P=C^{-1}B\)</span> 常被称为换基矩阵（Change-of-basis Matrix）：它把“旧基坐标”直接映射为“新基坐标”。</p>
<p>例：在 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^2\)</span> 取 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}_1=(1,0)^\top,\ \mathbf{b}_2=(1,1)^\top\)</span>。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(2,3)^\top\)</span>，解 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=c_1\mathbf{b}_1+c_2\mathbf{b}_2\)</span> 得 <span displaypfx="inline-" class="mathjax-container">\(c_2=3,\ c_1=-1\)</span>，因此该基下坐标为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}=(-1,3)^\top\)</span>。同一个几何向量，在不同基下的坐标会不同。</p>
<p>把基矩阵写出来会更便于计算： <span displaypfx="inline-" class="mathjax-container">\(B=[\mathbf{b}_1\ \mathbf{b}_2]=\begin{bmatrix}1 &amp; 1\\ 0 &amp; 1\end{bmatrix}\)</span>。此时 <span displaypfx="inline-" class="mathjax-container">\(B\mathbf{c}=\begin{bmatrix}1 &amp; 1\\ 0 &amp; 1\end{bmatrix}\begin{bmatrix}-1\\ 3\end{bmatrix}=\begin{bmatrix}2\\ 3\end{bmatrix}=\mathbf{x}\)</span>；反过来，解 <span displaypfx="inline-" class="mathjax-container">\(B\mathbf{c}=\mathbf{x}\)</span> 等价于 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}=B^{-1}\mathbf{x}\)</span>，因此“换基”在计算上就是解一个线性方程组。</p>
<div class="blog_h3"><span class="graybg">标准基（Standard Basis）</span></div>
<p>标准基（Standard Basis）是最常用的一组基。第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个标准基向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{e}_i\)</span> 只有第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个分量为 1，其余为 0：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{e}_1=(1,0,\ldots,0)^\top,\ \mathbf{e}_2=(0,1,0,\ldots,0)^\top,\ \ldots,\ \mathbf{e}_n=(0,\ldots,0,1)^\top\]</span>
<p>例：在 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^2\)</span> 中，<span displaypfx="inline-" class="mathjax-container">\((2,3)^\top=2\mathbf{e}_1+3\mathbf{e}_2\)</span>。把 <span displaypfx="inline-" class="mathjax-container">\(\{\mathbf{e}_i\}\)</span> 作为列组成矩阵就是单位矩阵 <span displaypfx="inline-" class="mathjax-container">\(I\)</span>，因此标准基下 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=I\mathbf{x}\)</span> 对应“坐标与分量一致”。</p>
<div class="blog_h3"><span class="graybg">正交基（Orthogonal Basis）</span></div>
<p>正交基（Orthogonal Basis）是指基向量两两正交：对 <span displaypfx="inline-" class="mathjax-container">\(i\ne j\)</span> 有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}_i^\top\mathbf{b}_j=0\)</span>。它不要求单位长度。</p>
<p>正交基的一个关键性质是：坐标可以用投影直接算出。若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=\sum_i c_i\mathbf{b}_i\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(\{\mathbf{b}_i\}\)</span> 正交，则</p>
<span displaypfx="" class="mathjax-container">\[c_i=\frac{\mathbf{x}^\top\mathbf{b}_i}{\mathbf{b}_i^\top\mathbf{b}_i}\]</span>
<p>例：取 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}_1=(1,1)^\top,\ \mathbf{b}_2=(1,-1)^\top\)</span>，它们点积为 0。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(2,1)^\top\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\(c_1=\frac{3}{2},\ c_2=\frac{1}{2}\)</span>，因此 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=\frac{3}{2}\mathbf{b}_1+\frac{1}{2}\mathbf{b}_2\)</span>。</p>
<div class="blog_h3"><span class="graybg">正交标准基（Orthonormal Basis）</span></div>
<p>正交标准基（Orthonormal Basis）要求两两正交且每个基向量单位长度： <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{u}_i\|_2=1\)</span>，并满足 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}_i^\top\mathbf{u}_j=\delta_{ij}\)</span>（克罗内克 delta（Kronecker Delta））。</p>
<p>此时坐标就是内积/投影：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=\sum_i c_i\mathbf{u}_i\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(c_i=\mathbf{x}^\top\mathbf{u}_i\)</span>。计算上，这等价于把向量投影到各基方向。</p>
<p>例：令 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}_1=\frac{1}{\sqrt{2}}(1,1)^\top,\ \mathbf{u}_2=\frac{1}{\sqrt{2}}(1,-1)^\top\)</span>。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(2,1)^\top\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\(c_1=\frac{3}{\sqrt{2}},\ c_2=\frac{1}{\sqrt{2}}\)</span>，于是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=c_1\mathbf{u}_1+c_2\mathbf{u}_2\)</span>。</p>
<p>把 <span displaypfx="inline-" class="mathjax-container">\(\{\mathbf{u}_i\}\)</span> 按列组成矩阵 <span displaypfx="inline-" class="mathjax-container">\(Q\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(Q^\top Q=I\)</span>，并且坐标变换可写成 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}=Q^\top\mathbf{x}\)</span>、重构为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=Q\mathbf{c}\)</span>。在 PCA（Principal Component Analysis）与 SVD 中，主方向/奇异向量就是正交标准基；投影与重构只需要转置，不需要显式求逆。</p>
<div class="blog_h2"><span class="graybg">矩阵运算</span></div>
<p>矩阵运算（Matrix Operations）是机器学习（Machine Learning）中最核心的计算骨架。前向传播、反向传播和参数更新都可以表示为矩阵与向量的组合。</p>
<div class="blog_h3"><span class="graybg">加法与广播（Addition / Broadcasting）</span></div>
<p>矩阵加法按元素（Element-wise）进行：若 <span displaypfx="inline-" class="mathjax-container">\(X,B\in\mathbb{R}^{m\times n}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\((X+B)_{ij}=X_{ij}+B_{ij}\)</span>。减法同理。</p>
<p>在深度学习框架里常见的是广播（Broadcasting）：例如对 batch 特征 <span displaypfx="inline-" class="mathjax-container">\(X\in\mathbb{R}^{B\times d}\)</span> 与偏置 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\in\mathbb{R}^{d}\)</span>，写作 <span displaypfx="inline-" class="mathjax-container">\(Y=X+\mathbf{b}\)</span> 意味着把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 复制到每一行后再相加。这是线性层 <span displaypfx="inline-" class="mathjax-container">\(Y=XW+\mathbf{b}\)</span> 的标准形式。</p>
<div class="blog_h4"><span class="graybg">例：矩阵加法</span></div>
<span displaypfx="" class="mathjax-container">\[X=\begin{bmatrix}1 &amp; 2\\ 3 &amp; 4\end{bmatrix},\ B=\begin{bmatrix}10 &amp; 20\\ 30 &amp; 40\end{bmatrix}\Rightarrow X+B=\begin{bmatrix}11 &amp; 22\\ 33 &amp; 44\end{bmatrix}\]</span>
<div class="blog_h4"><span class="graybg">例：广播加偏置（Bias Broadcasting）</span></div>
<p>令 <span displaypfx="inline-" class="mathjax-container">\(X\in\mathbb{R}^{2\times 3}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\in\mathbb{R}^{3}\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[X=\begin{bmatrix}1 &amp; 2 &amp; 3\\ 4 &amp; 5 &amp; 6\end{bmatrix},\ \mathbf{b}=\begin{bmatrix}10 &amp; 20 &amp; 30\end{bmatrix}\]</span>
<p>广播的语义是“把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 复制到每一行”，因此</p>
<span displaypfx="" class="mathjax-container">\[Y=X+\mathbf{b}=\begin{bmatrix}11 &amp; 22 &amp; 33\\ 14 &amp; 25 &amp; 36\end{bmatrix}\]</span>
<p>从线性代数角度，把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 视作行向量，则广播等价于 <span displaypfx="inline-" class="mathjax-container">\(Y=X+\mathbf{1}\mathbf{b}\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{1}\in\mathbb{R}^{B\times 1}\)</span> 是全 1 列向量。</p>
<div class="blog_h3"><span class="graybg">矩阵乘法（Matrix Multiplication）</span></div>
<p>矩阵乘法（Matrix Multiplication）在神经网络里通常对应线性层（Linear Layer）：<span displaypfx="inline-" class="mathjax-container">\(Y=XW\)</span>。从“每个输出维度是一个点积”来看更容易记：</p>
<span displaypfx="" class="mathjax-container">\[y_j=\sum_{i=1}^{d_{\text{in}}} x_i W_{ij}\]</span>
<p>在批处理（Batch）场景下，常用形状约定是 <span displaypfx="inline-" class="mathjax-container">\(X\in\mathbb{R}^{B\times d_{\text{in}}}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(W\in\mathbb{R}^{d_{\text{in}}\times d_{\text{out}}}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(Y=XW\in\mathbb{R}^{B\times d_{\text{out}}}\)</span>。矩阵乘法一般不满足交换律（Non-commutativity），形状不匹配时也无法相乘。</p>
<p>从几何（Geometry）角度看，矩阵定义了一个线性变换（Linear Transformation）：它把空间中的点/向量整体“变形”（旋转、缩放、剪切、投影等）。一种实用记法是看基向量（Basis Vectors）如何被映射：如果用列向量约定，矩阵的每一列就是某个基向量变换后的像。</p>
<p>例（二维）：标准基向量（Standard Basis Vectors）为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{e}_1=(1,0)^\top\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{e}_2=(0,1)^\top\)</span>。对</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}a &amp; c\\ b &amp; d\end{bmatrix}\]</span>
<p>有</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{e}_1=\begin{bmatrix}a\\ b\end{bmatrix},\quad A\mathbf{e}_2=\begin{bmatrix}c\\ d\end{bmatrix}\]</span>
<p>因此 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的第 1/2 列分别是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{e}_1,\mathbf{e}_2\)</span> 的像。对任意 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=x_1\mathbf{e}_1+x_2\mathbf{e}_2\)</span>，根据线性变换的线性性（Linearity）<span displaypfx="inline-" class="mathjax-container">\(A(\alpha\mathbf{u}+\beta\mathbf{v})=\alpha A\mathbf{u}+\beta A\mathbf{v}\)</span>，可得</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{x}=x_1A\mathbf{e}_1+x_2A\mathbf{e}_2=x_1\begin{bmatrix}a\\ b\end{bmatrix}+x_2\begin{bmatrix}c\\ d\end{bmatrix}\]</span>
<p>数值例子：取</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}2 &amp; 1\\ 0 &amp; 1\end{bmatrix}\]</span>
<p>则 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{e}_1=(2,0)^\top\)</span>、<span displaypfx="inline-" class="mathjax-container">\(A\mathbf{e}_2=(1,1)^\top\)</span>。若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(3,4)^\top=3\mathbf{e}_1+4\mathbf{e}_2\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{x}=3A\mathbf{e}_1+4A\mathbf{e}_2=3\begin{bmatrix}2\\ 0\end{bmatrix}+4\begin{bmatrix}1\\ 1\end{bmatrix}=\begin{bmatrix}10\\ 4\end{bmatrix}\]</span>
<p>这就是“看列向量理解变换”的核心：先画出两条基向量被送到哪里，整个网格会按相同线性组合随之平移/剪切/旋转/缩放。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/matrix-trans.jpg"><img class="alignnone size-full wp-image-40629" src="https://blog.gmem.cc/wp-content/uploads/2026/03/matrix-trans.jpg" alt="matrix-trans" width="100%" /></a></p>
<p>这对应两种等价视角：</p>
<ul>
<li>变换向量（Active View）：固定坐标轴，让向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 变成 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{x}\)</span>。</li>
<li>变换坐标轴（Passive View）：固定几何点，把坐标系按 <span displaypfx="inline-" class="mathjax-container">\(A^{-1}\)</span> 变换；同一个点在新坐标系下的坐标会变化。</li>
</ul>
<p>两种视角描述的是同一个线性映射，只是“变的对象”不同。在做特征变换/白化（Whitening）/坐标变换推导时，这个区分能避免符号混乱。</p>
<p>矩阵乘法只有在内维度相等时才有定义：<span displaypfx="inline-" class="mathjax-container">\((m\times n)(n\times p)=(m\times p)\)</span>。把向量视为列向量（<span displaypfx="inline-" class="mathjax-container">\(m\times 1\)</span>）或行向量（<span displaypfx="inline-" class="mathjax-container">\(1\times m\)</span>）后，外积与点积也都可以统一为矩阵乘法的特例。</p>
<ol>
<li>
<p>一般矩阵乘法：<span displaypfx="inline-" class="mathjax-container">\((m\times n)(n\times p)=(m\times p)\)</span>。</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}1 &amp; 2 &amp; 3\\ 4 &amp; 5 &amp; 6\end{bmatrix}\in\mathbb{R}^{2\times 3},\quad B=\begin{bmatrix}7 &amp; 8\\ 9 &amp; 10\\ 11 &amp; 12\end{bmatrix}\in\mathbb{R}^{3\times 2}\]</span>
<span displaypfx="" class="mathjax-container">\[AB=\begin{bmatrix}58 &amp; 64\\ 139 &amp; 154\end{bmatrix}\in\mathbb{R}^{2\times 2}\]</span>
</li>
<li>
<p>外积（Outer Product）：<span displaypfx="inline-" class="mathjax-container">\((m\times 1)(1\times n)=(m\times n)\)</span>。</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{u}=\begin{bmatrix}1\\ 2\\ 3\end{bmatrix}\in\mathbb{R}^{3\times 1},\quad \mathbf{v}=\begin{bmatrix}4 &amp; 5\end{bmatrix}\in\mathbb{R}^{1\times 2}\]</span>
<span displaypfx="" class="mathjax-container">\[\mathbf{u}\mathbf{v}=\begin{bmatrix}4 &amp; 5\\ 8 &amp; 10\\ 12 &amp; 15\end{bmatrix}\in\mathbb{R}^{3\times 2}\]</span>
<p>这是一个秩一（Rank-1）矩阵：它把“列向量 × 行向量”变成矩阵；在低秩近似、注意力权重构造与二阶统计量里都很常见。</p>
</li>
<li>
<p>点积（Dot Product）：<span displaypfx="inline-" class="mathjax-container">\((1\times m)(m\times 1)=(1\times 1)\)</span>。</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{r}=\begin{bmatrix}1 &amp; 2 &amp; 3\end{bmatrix}\in\mathbb{R}^{1\times 3},\quad \mathbf{c}=\begin{bmatrix}4\\ 5\\ 6\end{bmatrix}\in\mathbb{R}^{3\times 1}\]</span>
<span displaypfx="" class="mathjax-container">\[\mathbf{r}\mathbf{c}=\begin{bmatrix}32\end{bmatrix}\in\mathbb{R}^{1\times 1}\equiv 32\]</span>
<p>结果是标量 <span displaypfx="inline-" class="mathjax-container">\(32\)</span>，等价于点积： <span displaypfx="inline-" class="mathjax-container">\(\mathbf{r}\mathbf{c}=\sum_{i=1}^{m} r_i c_i\)</span>。在实现里常写成 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top\mathbf{y}\)</span>。</p>
</li>
</ol>
<div class="blog_h3"><span class="graybg">仿射变换与仿射子空间</span></div>
<p>仿射（Affine）是线性（Linear）的一个自然扩展。线性变换要求 <span displaypfx="inline-" class="mathjax-container">\(f(\mathbf{x})=A\mathbf{x}\)</span>，必须把原点 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{0}\)</span> 映到原点；仿射变换则允许再加一个平移项：</p>
<span displaypfx="" class="mathjax-container">\[f(\mathbf{x})=A\mathbf{x}+\mathbf{b}\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 是线性部分，负责旋转、缩放、剪切、投影等形变； <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 是平移项（Translation / Bias），负责把整个空间整体推走一个位移。因此，仿射变换就是“先做线性变换，再做平移”。</p>
<p>几何上，线性变换像在原点固定不动的前提下拉伸或扭转整张网格；仿射变换则像先把网格按 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 变形，再把整张网格连同原点一起平移到别的位置。两者最核心的区别是：<span style="background-color: #c0c0c0;">线性变换保原点，仿射变换不一定保原点</span>。</p>
<p>最简单的一维例子是 <span displaypfx="inline-" class="mathjax-container">\(f(x)=2x\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(g(x)=2x+3\)</span>。前者是线性的，因为 <span displaypfx="inline-" class="mathjax-container">\(f(0)=0\)</span>；后者是仿射的，因为它先把数轴按 2 倍拉伸，再整体平移 3 个单位，所以 <span displaypfx="inline-" class="mathjax-container">\(g(0)=3\)</span>，不再经过原点。二维里也是同样： <span displaypfx="inline-" class="mathjax-container">\(f(\mathbf{x})=\mathbf{x}\)</span> 是恒等线性变换，而 <span displaypfx="inline-" class="mathjax-container">\(g(\mathbf{x})=\mathbf{x}+\begin{bmatrix}1\\2\end{bmatrix}\)</span> 会把整张平面网格整体向右平移 1、向上平移 2。</p>
<p>仿射函数（Affine Function）在优化与机器学习里极其常见。一维情形的 <span displaypfx="inline-" class="mathjax-container">\(f(x)=ax+b\)</span> 就是最简单的仿射函数；高维里则写成 <span displaypfx="inline-" class="mathjax-container">\(f(\mathbf{x})=\mathbf{w}^\top\mathbf{x}+b\)</span>。因此，神经网络里通常口头说“线性层（Linear Layer）”，但如果带偏置 <span displaypfx="inline-" class="mathjax-container">\(b\)</span>，更严格的数学名称其实是仿射层（Affine Layer）：</p>
<span displaypfx="" class="mathjax-container">\[Y=XW+\mathbf{1}b^\top\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 是输入矩阵， <span displaypfx="inline-" class="mathjax-container">\(W\)</span> 是线性变换矩阵， <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 是偏置向量， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{1}\)</span> 是把偏置广播到每个样本上的全 1 列向量。若没有偏置，才是严格意义上的线性映射。</p>
<p>仿射还有一个重要性质：它保持仿射组合（Affine Combination）。若 <span displaypfx="inline-" class="mathjax-container">\(\sum_i \alpha_i=1\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[f\!\left(\sum_i \alpha_i \mathbf{x}_i\right)=\sum_i \alpha_i f(\mathbf{x}_i)\]</span>
<p>这意味着直线、平面、平行关系和凸组合结构在仿射变换下会被保留；因此很多几何对象在经过仿射变换后，仍然保持“像线还是线，像平面还是平面”的基本类型，但位置和方向可能改变。</p>
<p>仿射子空间（Affine Subspace）则是“线性子空间整体平移后得到的集合”。若 <span displaypfx="inline-" class="mathjax-container">\(U\)</span> 是一个线性子空间， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_0\)</span> 是空间中的某个固定点，则</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{A}=\mathbf{x}_0+U=\{\mathbf{x}_0+\mathbf{u}:\mathbf{u}\in U\}\]</span>
<p>就是一个仿射子空间。它和线性子空间的差别也在于是否经过原点：线性子空间必须包含原点，仿射子空间不必。例如二维中的直线 <span displaypfx="inline-" class="mathjax-container">\(x+y=1\)</span> 就是一个仿射子空间；它的方向部分与线性子空间 <span displaypfx="inline-" class="mathjax-container">\(x+y=0\)</span> 相同，但整条直线被平移开了，因此不经过原点。</p>
<p>这正是为什么超平面 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}^\top\mathbf{x}+b=0\)</span> 被称为仿射子空间而非线性子空间：当 <span displaypfx="inline-" class="mathjax-container">\(b\ne 0\)</span> 时，它通常不经过原点，只是由某个线性超平面整体平移而来。优化里的等式约束 <span displaypfx="inline-" class="mathjax-container">\(h_j(x)=0\)</span> 若要求 <span displaypfx="inline-" class="mathjax-container">\(h_j\)</span> 是仿射函数，含义也正是“约束边界仍然保持平直结构，但允许存在偏置和平移”。</p>
<p>更进一步，双仿射（Biaffine）也是同一族概念的延伸。它通常在两个向量之间做一个双线性项 <span displaypfx="inline-" class="mathjax-container">\(h_i^\top U h_j\)</span>，再加上线性项和偏置项，因此既包含“两个变量之间的乘性交互”，也包含仿射偏置修正。理解了仿射，就能把“线性 / 仿射 / 双线性 / 双仿射”看成一条逐步加复杂度的函数族谱。</p>
<div class="blog_h4"><span class="graybg">线性到双仿射的公式族谱</span></div>
<p>把输出视为一个标量时，这条族谱可以写成一组并列的标准形式：</p>
<span displaypfx="" class="mathjax-container">\[f_{\mathrm{linear}}(\mathbf{x})=\mathbf{w}^\top \mathbf{x}\]</span>
<span displaypfx="" class="mathjax-container">\[f_{\mathrm{affine}}(\mathbf{x})=\mathbf{w}^\top \mathbf{x}+b\]</span>
<span displaypfx="" class="mathjax-container">\[s_{\mathrm{bilinear}}(\mathbf{x},\mathbf{z})=\mathbf{x}^\top U\mathbf{z}\]</span>
<span displaypfx="" class="mathjax-container">\[s_{\mathrm{biaffine}}(\mathbf{x},\mathbf{z})=\mathbf{x}^\top U\mathbf{z}+\mathbf{a}^\top\mathbf{x}+\mathbf{c}^\top\mathbf{z}+b\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\in\mathbb{R}^{m},\mathbf{z}\in\mathbb{R}^{n}\)</span> 是两个输入向量， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w},\mathbf{a}\in\mathbb{R}^{m}\)</span>， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}\in\mathbb{R}^{n}\)</span>， <span displaypfx="inline-" class="mathjax-container">\(U\in\mathbb{R}^{m\times n}\)</span>， <span displaypfx="inline-" class="mathjax-container">\(b\in\mathbb{R}\)</span>。这里的 <span displaypfx="inline-" class="mathjax-container">\(U\)</span> 是双线性项的参数矩阵（Parameter Matrix）：它不作用于单个向量本身；它给“ <span displaypfx="inline-" class="mathjax-container">\(x_p\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(z_q\)</span> 同时出现”这类二元交互分配权重。把式子展开后可写成 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top U\mathbf{z}=\sum_{p=1}^{m}\sum_{q=1}^{n}x_p\,U_{pq}\,z_q\)</span>，因此 <span displaypfx="inline-" class="mathjax-container">\(U_{pq}\)</span> 直接控制第 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 个 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 特征与第 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 个 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{z}\)</span> 特征之间的交互强度。 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a}^\top\mathbf{x}\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{c}^\top\mathbf{z}\)</span> 是单边线性项，分别描述各自独立的角色偏好； <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 是全局基线偏置。</p>
<p>把这个定义写成一个最小的 2×3 例子，会更容易直接看出“连接强度”来自哪里。令</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}=\begin{bmatrix}x_1\\x_2\end{bmatrix},\quad \mathbf{z}=\begin{bmatrix}z_1\\z_2\\z_3\end{bmatrix},\quad U=\begin{bmatrix}u_{11} &amp; u_{12} &amp; u_{13}\\u_{21} &amp; u_{22} &amp; u_{23}\end{bmatrix}\]</span>
<p>则双线性项为</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top U\mathbf{z}=\begin{bmatrix}x_1 &amp; x_2\end{bmatrix}\begin{bmatrix}u_{11} &amp; u_{12} &amp; u_{13}\\u_{21} &amp; u_{22} &amp; u_{23}\end{bmatrix}\begin{bmatrix}z_1\\z_2\\z_3\end{bmatrix}\]</span>
<span displaypfx="" class="mathjax-container">\[=x_1u_{11}z_1+x_1u_{12}z_2+x_1u_{13}z_3+x_2u_{21}z_1+x_2u_{22}z_2+x_2u_{23}z_3\]</span>
<p>这一步把抽象的矩阵乘法拆成了六条显式连接： <span displaypfx="inline-" class="mathjax-container">\(u_{11}\)</span> 控制 <span displaypfx="inline-" class="mathjax-container">\(x_1\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(z_1\)</span> 的连接强度， <span displaypfx="inline-" class="mathjax-container">\(u_{23}\)</span> 控制 <span displaypfx="inline-" class="mathjax-container">\(x_2\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(z_3\)</span> 的连接强度。若某个 <span displaypfx="inline-" class="mathjax-container">\(u_{pq}\)</span> 很大且为正，只要对应的 <span displaypfx="inline-" class="mathjax-container">\(x_p\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(z_q\)</span> 同时取大值，这一对特征就会显著抬高总分；若某个 <span displaypfx="inline-" class="mathjax-container">\(u_{pq}\)</span> 为负，则说明这对特征的共同出现会压低分数。</p>
<p>在同一个例子里，双仿射只是在双线性项之外再加上单边项与偏置：</p>
<span displaypfx="" class="mathjax-container">\[s_{\mathrm{biaffine}}(\mathbf{x},\mathbf{z})=\mathbf{x}^\top U\mathbf{z}+\mathbf{a}^\top\mathbf{x}+\mathbf{c}^\top\mathbf{z}+b\]</span>
<span displaypfx="" class="mathjax-container">\[=\mathbf{x}^\top U\mathbf{z}+(a_1x_1+a_2x_2)+(c_1z_1+c_2z_2+c_3z_3)+b\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(a_1,a_2\)</span> 描述 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 一侧各特征自身的偏好， <span displaypfx="inline-" class="mathjax-container">\(c_1,c_2,c_3\)</span> 描述 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{z}\)</span> 一侧各特征自身的偏好， <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 给出无条件基线分数。于是，双线性回答的是“这两组特征配在一起有多合适”，双仿射回答的则是“它们配在一起有多合适，并且各自本身是否已经带有倾向”。</p>
<p>若输出包含 <span displaypfx="inline-" class="mathjax-container">\(K\)</span> 个关系类别或标签分数，则通常会为每个类别准备一张交互矩阵 <span displaypfx="inline-" class="mathjax-container">\(U^{(k)}\)</span>，或等价地把它们堆成三阶张量 <span displaypfx="inline-" class="mathjax-container">\(U\in\mathbb{R}^{K\times m\times n}\)</span>。这时每个类别都拥有自己的一套“特征两两交互”权重。</p>
<p>从函数结构看，线性与仿射的区别在于是否含偏置；双线性与双仿射的区别同样在于是否在交互项之外再加入单边项与偏置。固定 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{z}\)</span> 时， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top U\mathbf{z}\)</span> 对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 是线性的， <span displaypfx="inline-" class="mathjax-container">\(s_{\text{biaffine}}(\mathbf{x},\mathbf{z})\)</span> 对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 则是仿射的；固定 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 时，对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{z}\)</span> 也是同样的性质。这正是 “biaffine” 这个名字的数学含义。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/affine-biaffine-family.png"><img class="alignnone size-full" src="https://blog.gmem.cc/wp-content/uploads/2026/03/affine-biaffine-family.png" alt="affine-biaffine-family" width="1920" height="1203" /></a></p>
<p>图中上排用一维切片显示“是否经过原点”这一关键差异： <span displaypfx="inline-" class="mathjax-container">\(f(x)=ax\)</span> 必然经过原点，而 <span displaypfx="inline-" class="mathjax-container">\(f(x)=ax+b\)</span> 由于加入偏置项，整条直线沿输出轴发生平移。下排保持与公式族谱一致，仍写成 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top U\mathbf{z}\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top U\mathbf{z}+\mathbf{a}^\top\mathbf{x}+\mathbf{c}^\top\mathbf{z}+b\)</span>；图像本身展示的是把高维向量关系压到二维后的一个切片。纯双线性项的零等值线体现为对称的交互边界；加入单边项与偏置后，零等值线整体偏移，分数面出现倾斜与平移，表示模型不仅关心“是否匹配”，还关心两个对象各自单独的倾向。</p>
<p>在依存句法（Dependency Parsing）、关系抽取（Relation Extraction）和成对匹配（Pairwise Matching）任务中，这个结构尤其有用。纯双线性项只能表达“组合后是否相容”，双仿射则进一步允许模型学习“某个对象本身就更像 head / dependent”或“某个实体本身就更像某类关系的一端”。因此，双仿射通常既比纯仿射更能表达交互，又比纯双线性更稳定。</p>
<div class="blog_h3"><span class="graybg">转置（Transpose）</span></div>
<p>转置（Transpose）把行列互换：对 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{m\times n}\)</span>，其转置 <span displaypfx="inline-" class="mathjax-container">\(A^\top\in\mathbb{R}^{n\times m}\)</span> 满足 <span displaypfx="inline-" class="mathjax-container">\((A^\top)_{ij}=A_{ji}\)</span>。</p>
<p>它常用于对齐乘法形状、把点积写成矩阵乘法，以及在推导中“移动”矩阵：例如 <span displaypfx="inline-" class="mathjax-container">\((AB)^\top=B^\top A^\top\)</span>。Transformer 注意力中的 <span displaypfx="inline-" class="mathjax-container">\(QK^\top\)</span> 就是典型的“先转置再相乘”。</p>
<div class="blog_h4"><span class="graybg">例：行列互换与形状变化</span></div>
<p>令</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}1 &amp; 2 &amp; 3\\ 4 &amp; 5 &amp; 6\end{bmatrix}\in\mathbb{R}^{2\times 3}\]</span>
<p>则</p>
<span displaypfx="" class="mathjax-container">\[A^\top=\begin{bmatrix}1 &amp; 4\\ 2 &amp; 5\\ 3 &amp; 6\end{bmatrix}\in\mathbb{R}^{3\times 2}\]</span>
<p>可以直接看到：原矩阵的第 1 行变成转置后的第 1 列；因此 <span displaypfx="inline-" class="mathjax-container">\((m\times n)^\top=(n\times m)\)</span>。</p>
<div class="blog_h3"><span class="graybg">Hadamard 乘积（Hadamard Product）</span></div>
<p>Hadamard 乘积（Hadamard Product）是逐元素（Element-wise）相乘：若 <span displaypfx="inline-" class="mathjax-container">\(X,M\)</span> 形状相同，则 <span displaypfx="inline-" class="mathjax-container">\((X\odot M)_{ij}=X_{ij}M_{ij}\)</span>。</p>
<p>典型用途是掩码（Masking）与门控（Gating）。例：令 <span displaypfx="inline-" class="mathjax-container">\(M\in\{0,1\}^{B\times d}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(X\odot M\)</span> 会把被屏蔽的特征位置直接置零；也可以用 <span displaypfx="inline-" class="mathjax-container">\(M\in[0,1]^{B\times d}\)</span> 做连续缩放。</p>
<div class="blog_h3"><span class="graybg">矩阵分解（Factorization / Decomposition）</span></div>
<p>矩阵分解（Decomposition）把矩阵写成更“易处理”的结构乘积，用于求解、降维与稳定计算。常见形式包括：</p>
<ul>
<li>SVD： <span displaypfx="inline-" class="mathjax-container">\(A=U\Sigma V^\top\)</span>，用于 PCA（Principal Component Analysis）、低秩近似与数值稳健求解。</li>
<li>QR： <span displaypfx="inline-" class="mathjax-container">\(A=QR\)</span>（<span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 正交、<span displaypfx="inline-" class="mathjax-container">\(R\)</span> 上三角），常用于最小二乘与正交化。</li>
<li>Cholesky：对对称正定（SPD）矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\(A=LL^\top\)</span>，常用于高斯模型与二次优化中的快速求解。</li>
</ul>
<div class="blog_h3"><span class="graybg">迹（Trace）</span></div>
<p>矩阵的迹（Trace）定义为对角线元素之和：对方阵 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{n\times n}\)</span>，</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{tr}(A)=\sum_{i=1}^{n} A_{ii}\]</span>
<p>迹在推导里常用的性质是循环不变性（Cyclic Property）：<span displaypfx="inline-" class="mathjax-container">\(\mathrm{tr}(AB)=\mathrm{tr}(BA)\)</span>（形状匹配时）。一个高频等式是 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{tr}(A^\top A)=\|A\|_F^2\)</span>，它把“平方和”写成迹，便于做矩阵微分与正则化推导。</p>
<div class="blog_h3"><span class="graybg">范数（Matrix Norms）</span></div>
<p>范数（Norm）刻画矩阵的“大小”。最常用的是 Frobenius 范数：</p>
<span displaypfx="" class="mathjax-container">\[\|A\|_F=\sqrt{\sum_{i,j}A_{ij}^2}\]</span>
<p>它等价于把矩阵按元素展平后的 <span displaypfx="inline-" class="mathjax-container">\(\ell_2\)</span> 范数，常用于权重衰减（Weight Decay）/L2 正则。另一个常见的是谱范数（Spectral Norm）<span displaypfx="inline-" class="mathjax-container">\(\|A\|_2\)</span>（最大奇异值），用于控制 Lipschitz 常数与训练稳定性（如 spectral normalization）。</p>
<div class="blog_h3"><span class="graybg">外积与秩一更新（Outer Product / Rank-1 Update）</span></div>
<p>外积（Outer Product）把两个向量映射为矩阵：对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\in\mathbb{R}^{m}\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\in\mathbb{R}^{n}\)</span>，</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{u}\mathbf{v}^\top\in\mathbb{R}^{m\times n}\]</span>
<p>它是一个秩一（Rank-1）矩阵。外积在统计与学习中常用于构造二阶量：例如样本协方差的无偏估计可写成中心化向量的外积平均 <span displaypfx="inline-" class="mathjax-container">\(\Sigma\approx \frac{1}{N}\sum_{k=1}^{N}(\mathbf{x}_k-\bar{\mathbf{x}})(\mathbf{x}_k-\bar{\mathbf{x}})^\top\)</span>。</p>
<p>例：令 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}=\begin{bmatrix}1\\ 2\\ 3\end{bmatrix}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}=\begin{bmatrix}4\\ 5\end{bmatrix}\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{u}\mathbf{v}^\top=\begin{bmatrix}4 &amp; 5\\ 8 &amp; 10\\ 12 &amp; 15\end{bmatrix}\]</span>
<p>直观上，外积得到的矩阵每一列都是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\)</span> 的缩放：第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 列等于 <span displaypfx="inline-" class="mathjax-container">\(v_j\mathbf{u}\)</span>。因此所有列共线，矩阵的秩最多为 1（除非 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 为零向量）。</p>
<p>把外积视为线性算子更直接：对任意 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\in\mathbb{R}^{n}\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\((\mathbf{u}\mathbf{v}^\top)\mathbf{x}=\mathbf{u}(\mathbf{v}^\top\mathbf{x})\)</span>。这表示先沿 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 做一次投影/打分得到标量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}^\top\mathbf{x}\)</span>，再沿 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\)</span> 方向输出。例：取 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=\begin{bmatrix}1\\ 1\end{bmatrix}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}^\top\mathbf{x}=9\)</span>，从而 <span displaypfx="inline-" class="mathjax-container">\((\mathbf{u}\mathbf{v}^\top)\mathbf{x}=9\mathbf{u}=\begin{bmatrix}9\\ 18\\ 27\end{bmatrix}\)</span>。</p>
<p>秩一更新（Rank-1 Update）则是把矩阵写成 <span displaypfx="inline-" class="mathjax-container">\(A\leftarrow A+\mathbf{u}\mathbf{v}^\top\)</span>：只引入一个方向上的低秩结构，常用于用较低代价注入统计量/二阶近似，或在保持主结构的前提下做小幅调整。</p>
<div class="blog_h2"><span class="graybg">行列式</span></div>
<p>行列式（Determinant）把一个方阵 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{n\times n}\)</span> 映射为标量 <span displaypfx="inline-" class="mathjax-container">\(\det(A)\)</span>。几何上，它是线性变换对体积的缩放因子（Volume Scaling Factor）：绝对值表示缩放倍数，符号表示是否翻转取向（Orientation Flip）。</p>
<p>二维情形最直观：若</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}a &amp; b\\ c &amp; d\end{bmatrix}\]</span>
<p>则</p>
<span displaypfx="" class="mathjax-container">\[\det(A)=ad-bc\]</span>
<p>例： <span displaypfx="inline-" class="mathjax-container">\(A=\begin{bmatrix}2 &amp; 1\\ 0 &amp; 3\end{bmatrix}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\det(A)=6\)</span>：面积被放大 6 倍。</p>
<p>关键结论：<span style="background-color: #c0c0c0;">方阵可逆（Invertible）当且仅当行列式非零</span>。当 <span displaypfx="inline-" class="mathjax-container">\(\det(A)=0\)</span> 时，变换会把体积压扁到低维（丢失信息），对应列向量线性相关（Linearly Dependent）。</p>
<p>常用性质：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(\det(AB)=\det(A)\det(B)\)</span></li>
<li><span displaypfx="inline-" class="mathjax-container">\(\det(A^\top)=\det(A)\)</span></li>
<li><span displaypfx="inline-" class="mathjax-container">\(\det(I)=1\)</span></li>
</ul>
<p>若把特征值（Eigenvalues）记作 <span displaypfx="inline-" class="mathjax-container">\(\{\lambda_i\}_{i=1}^n\)</span>（按代数重数计），则 <span displaypfx="inline-" class="mathjax-container">\(\det(A)=\prod_i \lambda_i\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathrm{tr}(A)=\sum_i \lambda_i\)</span>。</p>
<div class="blog_h2"><span class="graybg">矩阵的秩</span></div>
<p>矩阵的秩（Rank）刻画“列（或行）里最多有多少个线性无关（Linearly Independent）的方向”。对 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{m\times n}\)</span>，秩定义为列空间（Column Space）的维数：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{rank}(A)=\dim(\mathrm{col}(A))\]</span>
<p>这一定义的直接含义是：若 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(A)=r\)</span>，那么 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的所有列向量都只能张成一个 <span displaypfx="inline-" class="mathjax-container">\(r\)</span> 维子空间，超出这个子空间的方向它完全无法表达。反过来，若某一列可以由其他列线性组合得到，它就不提供新的维度，因此不会增加秩。</p>
<p>它也等于行空间（Row Space）的维数（行秩=列秩）。把 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 看作线性映射 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^n\to\mathbb{R}^m\)</span>，秩就是输出子空间的维度：最多能输出多少个自由方向。</p>
<p>满秩（Full Rank）通常指 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(A)=\min(m,n)\)</span>。对方阵 <span displaypfx="inline-" class="mathjax-container">\(n\times n\)</span> 而言，满秩等价于可逆（也等价于 <span displaypfx="inline-" class="mathjax-container">\(\det(A)\ne 0\)</span>）。</p>
<p>线性方程组（Linear System）<span displaypfx="inline-" class="mathjax-container">\(A\mathbf{x}=\mathbf{b}\)</span> 的解与秩直接相关：设增广矩阵为 <span displaypfx="inline-" class="mathjax-container">\([A\mid \mathbf{b}]\)</span>，则</p>
<ul>
<li>若 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(A)\ne \mathrm{rank}([A\mid \mathbf{b}])\)</span>，无解。</li>
<li>若 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(A)=\mathrm{rank}([A\mid \mathbf{b}])=n\)</span>（未知数个数），唯一解。</li>
<li>若 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(A)=\mathrm{rank}([A\mid \mathbf{b}])&lt;n\)</span>，无穷多解（存在自由变量）。</li>
</ul>
<p>与 SVD 的关系非常实用：<span style="background-color: #c0c0c0;">秩等于非零奇异值（Singular Values）的个数</span>，因此在数值计算里常用“奇异值是否接近 0”判断有效秩（Numerical Rank）。</p>
<div class="blog_h2"><span class="graybg">二次型（Quadratic Form）</span></div>
<p>在高中里，一元二次函数常写成 <span displaypfx="inline-" class="mathjax-container">\(ax^2+bx+c\)</span>。把“二次”推广到多元，并且只保留二次项（没有一次项与常数项），就得到二次型（Quadratic Form）。二维里最常见的形式是：</p>
<span displaypfx="" class="mathjax-container">\[q(x,y)=ax^2+bxy+cy^2\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(bxy\)</span> 是交叉项（Cross Term）：它把不同变量“耦合在一起”。在解析几何（Analytic Geometry）里，交叉项常对应二次曲线（Conic Section）的主轴（Principal Axes）不与坐标轴对齐（图形呈旋转/倾斜）。</p>
<p>若再把一次项与常数项加回来，就得到更一般的二次多项式（Quadratic Polynomial）<span displaypfx="inline-" class="mathjax-container">\(ax^2+bxy+cy^2+dx+ey+f\)</span>。这时：交叉项 <span displaypfx="inline-" class="mathjax-container">\(bxy\)</span> 主要反映主轴旋转；一次项 <span displaypfx="inline-" class="mathjax-container">\(dx+ey\)</span> 往往表示图形的中心/顶点从原点平移出去；常数项 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 则改变整体基准值，进而影响图形的截距、大小以及是否与 <span displaypfx="inline-" class="mathjax-container">\(q(x,y)=0\)</span> 相交。只有把一次项和常数项都去掉时，我们讨论的才是纯粹的二次型。</p>
<p>下面两幅图都基于<span style="background-color: #c0c0c0;">等值线（Level Set）</span>生成：先固定常数 <span displaypfx="inline-" class="mathjax-container">\(k\)</span>，在平面上求解 <span displaypfx="inline-" class="mathjax-container">\(q(x,y)=k\)</span> 得到等值线，再把不同 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 的结果叠加，并与 <span displaypfx="inline-" class="mathjax-container">\(z=q(x,y)\)</span> 的三维曲面对应显示。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/quadratic-forms.png"><img class="alignnone size-full wp-image-40671" src="https://blog.gmem.cc/wp-content/uploads/2026/03/quadratic-forms.png" alt="quadratic-forms" width="100%" /></a></p>
<p>第一幅展示无交叉项（<span displaypfx="inline-" class="mathjax-container">\(b=0\)</span>）的典型形态：等值线与坐标轴对齐，曲面主轴方向也与坐标轴一致。</p>
<p>&nbsp;</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/quadratic-forms-cross.png"><img class="alignnone size-full wp-image-40677" src="https://blog.gmem.cc/wp-content/uploads/2026/03/quadratic-forms-cross.png" alt="quadratic-forms-cross" width="100%" /></a></p>
<p>第二幅展示含交叉项（<span displaypfx="inline-" class="mathjax-container">\(b\ne 0\)</span>）的情形：等值线整体发生旋转/倾斜，三维曲面看起来更“不规则”。</p>
<p>在线性代数里，用矩阵（Matrix）把系数组织起来更方便。令 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x_1,\ldots,x_n)^\top\)</span>、<span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{n\times n}\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[q(\mathbf{x})=\mathbf{x}^\top A\mathbf{x}=\sum_{i=1}^{n}\sum_{j=1}^{n}A_{ij}x_i x_j\]</span>
<p>上面这条等式核心是把矩阵乘法按分量（Component）展开后的结果。把它分两步看最清楚：</p>
<ol>
<li>先做一次矩阵-向量乘法：令 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}=A\mathbf{x}\)</span>，则第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个分量是</li>
</ol>
<span displaypfx="" class="mathjax-container">\[y_i=(A\mathbf{x})_i=\sum_{j=1}^{n}A_{ij}x_j\]</span>
<ol start="2">
<li>再做一次点积： <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top\mathbf{y}=\sum_{i=1}^{n}x_i y_i\)</span>。把第 1 步的 <span displaypfx="inline-" class="mathjax-container">\(y_i\)</span> 代入，就得到</li>
</ol>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=\mathbf{x}^\top(A\mathbf{x})=\sum_{i=1}^{n}x_i\left(\sum_{j=1}^{n}A_{ij}x_j\right)=\sum_{i=1}^{n}\sum_{j=1}^{n}A_{ij}x_i x_j\]</span>
<p>这就是“双重求和（Double Summation）”的含义：每一个矩阵元素 <span displaypfx="inline-" class="mathjax-container">\(A_{ij}\)</span> 都在给二次项 <span displaypfx="inline-" class="mathjax-container">\(x_i x_j\)</span> 分配一个权重；当 <span displaypfx="inline-" class="mathjax-container">\(i=j\)</span> 时就是平方项 <span displaypfx="inline-" class="mathjax-container">\(x_i^2\)</span>，当 <span displaypfx="inline-" class="mathjax-container">\(i\ne j\)</span> 时就是交叉项 <span displaypfx="inline-" class="mathjax-container">\(x_i x_j\)</span>。</p>
<p>二维情形最直观：若希望展开后得到 <span displaypfx="inline-" class="mathjax-container">\(ax^2+bxy+cy^2\)</span>，可以取</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}a &amp; \frac{b}{2}\\ \frac{b}{2} &amp; c\end{bmatrix}\]</span>
<p>这里把向量写成 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x,y)^\top\)</span>，按矩阵乘法展开一遍：</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{x}=\begin{bmatrix}a &amp; \frac{b}{2}\\ \frac{b}{2} &amp; c\end{bmatrix}\begin{bmatrix}x\\ y\end{bmatrix}=\begin{bmatrix}ax+\frac{b}{2}y\\ \frac{b}{2}x+cy\end{bmatrix}\]</span>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top(A\mathbf{x})=\begin{bmatrix}x &amp; y\end{bmatrix}\begin{bmatrix}ax+\frac{b}{2}y\\ \frac{b}{2}x+cy\end{bmatrix}=ax^2+\frac{b}{2}xy+\frac{b}{2}yx+cy^2=ax^2+bxy+cy^2\]</span>
<p>可以看到：交叉项 <span displaypfx="inline-" class="mathjax-container">\(xy\)</span> 的系数 <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 实际来自两处对称位置 <span displaypfx="inline-" class="mathjax-container">\(A_{12}\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(A_{21}\)</span> 的“合力”（各贡献一半）。这也会自然导向下一节的结论：二次型只依赖矩阵的对称部分。</p>
<p>例：取 <span displaypfx="inline-" class="mathjax-container">\(q(x,y)=5x^2-4xy+5y^2\)</span>，对应 <span displaypfx="inline-" class="mathjax-container">\(A=\begin{bmatrix}5 &amp; -2\\ -2 &amp; 5\end{bmatrix}\)</span>。这一类表达式不仅在几何里出现（椭圆（Ellipse）/双曲线（Hyperbola）），在优化与统计里也高频出现（曲率（Curvature）、距离度量（Distance Metric））。</p>
<div class="blog_h3"><span class="graybg">对称化（Symmetrization）</span></div>
<p>对任意方阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span>，二次型只依赖其对称部分：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=\mathbf{x}^\top\left(\frac{A+A^\top}{2}\right)\mathbf{x}\]</span>
<p>这句话的意思是：无论 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的非对称部分长什么样，只要 <span displaypfx="inline-" class="mathjax-container">\(\frac{A+A^\top}{2}\)</span> 不变，二次型 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}\)</span> 对所有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 的取值就完全不变。</p>
<p>把 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 拆开看更直观。定义对称部分（Symmetric Part）与反对称部分（Skew-symmetric Part）：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(S=\frac{A+A^\top}{2}\)</span>，满足 <span displaypfx="inline-" class="mathjax-container">\(S=S^\top\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(K=\frac{A-A^\top}{2}\)</span>，满足 <span displaypfx="inline-" class="mathjax-container">\(K^\top=-K\)</span>。</li>
</ul>
<p>这里“对称部分（Symmetric Part）”是一个<span style="background-color: #c0c0c0;">定义</span>：对任意方阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span>，把 <span displaypfx="inline-" class="mathjax-container">\(S=\frac{A+A^\top}{2}\)</span> 定义为它的对称部分。它与 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> <span style="background-color: #c0c0c0;">同型（同大小）</span>，并且一定是对称矩阵；它并非 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的某个“子矩阵”。</p>
<p>按元素（Entry-wise）写得更直观：对任意 <span displaypfx="inline-" class="mathjax-container">\(i,j\)</span>，</p>
<span displaypfx="" class="mathjax-container">\[S_{ij}=\frac{A_{ij}+A_{ji}}{2},\quad K_{ij}=\frac{A_{ij}-A_{ji}}{2}\]</span>
<p>对称部分就是把每一对对称位置 <span displaypfx="inline-" class="mathjax-container">\((i,j)\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\((j,i)\)</span> 的元素取平均；反对称部分则记录它们的“差的一半”。因此 <span displaypfx="inline-" class="mathjax-container">\(A=S+K\)</span> 是把任意矩阵分解成“对称 + 反对称”的标准方式，并且这个分解是唯一的（Unique）。</p>
<p>为什么“取 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(A^\top\)</span> 的平均值”就得到对称部分？因为转置（Transpose）会把非对角元素成对交换： <span displaypfx="inline-" class="mathjax-container">\(A_{ij}\leftrightarrow A_{ji}\)</span>。把它们相加后，非对称性（即 <span displaypfx="inline-" class="mathjax-container">\(A_{ij}-A_{ji}\)</span>）会被抵消，只留下“对称的那一半”（即 <span displaypfx="inline-" class="mathjax-container">\(A_{ij}+A_{ji}\)</span>）。再除以 2，是为了把“加了两份”的量恢复到原始尺度：如果 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 本来就对称（<span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span>），那么 <span displaypfx="inline-" class="mathjax-container">\(\frac{A+A^\top}{2}=A\)</span>，不会把矩阵放大一倍。</p>
<p>于是 <span displaypfx="inline-" class="mathjax-container">\(A=S+K\)</span>，并且</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=\mathbf{x}^\top S\mathbf{x}+\mathbf{x}^\top K\mathbf{x}\]</span>
<p>关键点在于：对任意 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span>，都有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top K\mathbf{x}=0\)</span>。理由很短：它是一个标量，等于它自己的转置，而</p>
<span displaypfx="" class="mathjax-container">\[(\mathbf{x}^\top K\mathbf{x})^\top=\mathbf{x}^\top K^\top \mathbf{x}=\mathbf{x}^\top(-K)\mathbf{x}=-(\mathbf{x}^\top K\mathbf{x})\]</span>
<p>一个数如果等于它的相反数，只能是 0。于是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}=\mathbf{x}^\top S\mathbf{x}\)</span>，二次型确实只由对称部分决定。</p>
<p>二维展开能直接看到“只依赖对称部分”的具体含义。令 <span displaypfx="inline-" class="mathjax-container">\(A=\begin{bmatrix}a &amp; b\\ c &amp; d\end{bmatrix}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x_1,x_2)^\top\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=ax_1^2+(b+c)x_1x_2+dx_2^2\]</span>
<p>交叉项系数只出现 <span displaypfx="inline-" class="mathjax-container">\(b+c\)</span>（也就是 <span displaypfx="inline-" class="mathjax-container">\(A_{12}+A_{21}\)</span>），而差值 <span displaypfx="inline-" class="mathjax-container">\(b-c\)</span>（反对称部分）完全不会出现。</p>
<div class="blog_h4"><span class="graybg">例：两个不同矩阵，二次型完全一样</span></div>
<p>下面给一个“看得见”的数值例子。取</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}2 &amp; 4\\ -2 &amp; 4\end{bmatrix}\]</span>
<p>它显然并非对称矩阵（因为 <span displaypfx="inline-" class="mathjax-container">\(A_{12}=4\ne -2=A_{21}\)</span>）。计算它的对称部分：</p>
<span displaypfx="" class="mathjax-container">\[\frac{A+A^\top}{2}=\frac{1}{2}\left(\begin{bmatrix}2 &amp; 4\\ -2 &amp; 4\end{bmatrix}+\begin{bmatrix}2 &amp; -2\\ 4 &amp; 4\end{bmatrix}\right)=\begin{bmatrix}2 &amp; 1\\ 1 &amp; 4\end{bmatrix}=S\]</span>
<p>现在比较二次型。对任意 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x,y)^\top\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{x}=\begin{bmatrix}2x+4y\\ -2x+4y\end{bmatrix}\Rightarrow \mathbf{x}^\top A\mathbf{x}=x(2x+4y)+y(-2x+4y)=2x^2+2xy+4y^2\]</span>
<span displaypfx="" class="mathjax-container">\[S\mathbf{x}=\begin{bmatrix}2x+y\\ x+4y\end{bmatrix}\Rightarrow \mathbf{x}^\top S\mathbf{x}=x(2x+y)+y(x+4y)=2x^2+2xy+4y^2\]</span>
<p>两者对所有 <span displaypfx="inline-" class="mathjax-container">\((x,y)\)</span> 都完全相同；例如取 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(1,2)^\top\)</span>，都有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}=\mathbf{x}^\top S\mathbf{x}=22\)</span>。这就直观解释了“二次型只依赖对称部分”的含义：反对称的那一半怎么改，都不会改变 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}\)</span> 的值。</p>
<p>因此讨论二次型时通常可假设 <span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span>。这也解释了为什么二次型与对称矩阵/半正定性（Positive Semi-Definite, PSD）紧密绑定。</p>
<div class="blog_h3"><span class="graybg">二次型的标准型（Standard Form）</span></div>
<div class="blog_h4"><span class="graybg">标准型与对角标准型是什么</span></div>
<p>二次型 <span displaypfx="inline-" class="mathjax-container">\(q(\mathbf{x})=\mathbf{x}^\top A\mathbf{x}\)</span> 本身是一个几何对象；它在不同坐标系（Coordinate System）/基（Basis）下的<span style="background-color: #c0c0c0;">矩阵表示</span>会不同：同一个几何对象，用不同坐标轴/基表示时，系数矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的元素会改变。</p>
<p>这里的标准型指的是：在一类允许的坐标变换（可逆线性变量替换（Invertible Linear Change of Variables））下，把同一个二次型写成某种<span style="background-color: #c0c0c0;">约定的简化代表</span>。不同教材的约定略有差异，但最常用的目标是：把交叉项（Cross Term）消掉，露出每个坐标轴方向上的“纯平方项”。</p>
<p>把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=T\mathbf{y}\)</span> 理解成换基（Change of Basis）会更不容易出错： <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 是同一几何向量在新基下的坐标，矩阵 <span displaypfx="inline-" class="mathjax-container">\(T\)</span> 由新基向量在旧基下的坐标组成。因为 <span displaypfx="inline-" class="mathjax-container">\(T\)</span> 可逆，两套坐标是一一对应的，可以互相换回：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{y}=T^{-1}\mathbf{x},\quad \mathbf{x}=T\mathbf{y}\]</span>
<p>把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=T\mathbf{y}\)</span> 代入可得</p>
<span displaypfx="" class="mathjax-container">\[q(\mathbf{x})=\mathbf{x}^\top A\mathbf{x}=\mathbf{y}^\top(T^\top A T)\mathbf{y}\]</span>
<p>这里要求 <span displaypfx="inline-" class="mathjax-container">\(T\)</span> 可逆（Invertible），意味着这个变量代换不会把空间压缩到低维（不会丢维度）。因此在新坐标 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 下，二次型对应的系数矩阵变为 <span displaypfx="inline-" class="mathjax-container">\(T^\top A T\)</span>（这叫合同变换（Congruence Transformation））。可以把 <span displaypfx="inline-" class="mathjax-container">\(T\)</span> 理解为“旋转/缩放后的新坐标轴”在旧坐标里的表示：同一个二次型在新坐标系里的系数就由 <span displaypfx="inline-" class="mathjax-container">\(T^\top A T\)</span> 给出。标准型的目标就是选取合适的 <span displaypfx="inline-" class="mathjax-container">\(T\)</span>，把 <span displaypfx="inline-" class="mathjax-container">\(T^\top A T\)</span> 化到更简单的结构。</p>
<p>对角标准型（Diagonal Form）指把二次型写成“只有平方项、没有交叉项”的形式（也常称对角规范形（Diagonal Canonical Form））：</p>
<span displaypfx="" class="mathjax-container">\[q(\mathbf{x})=\sum_{i=1}^{n}\lambda_i y_i^2\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i\)</span> 是系数，<span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 是新坐标。对角标准型等价于：在新坐标系下，二次型对应的矩阵是对角矩阵（Diagonal Matrix）；“交叉项” <span displaypfx="inline-" class="mathjax-container">\(y_i y_j\)</span>（<span displaypfx="inline-" class="mathjax-container">\(i\ne j\)</span>）消失。</p>
<p>结论需要明确：标准型与原来的二次型描述的是<span style="background-color: #c0c0c0;">同一个二次型/同一组几何等值集合</span>，只是坐标系不同。给定可逆变换 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=T\mathbf{y}\)</span>，任何关于 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 的几何描述都可以无损地翻译成关于 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 的描述，并且可以随时“还原”回去。矩阵层面也一样：若 <span displaypfx="inline-" class="mathjax-container">\(A' = T^\top A T\)</span> 是标准型里的系数矩阵，则 <span displaypfx="inline-" class="mathjax-container">\(A=(T^{-1})^\top A' T^{-1}\)</span> 可把它变回原坐标下的表示。</p>
<p>接下来真正关心的是：<span style="background-color: #c0c0c0;">如何选 <span displaypfx="inline-" class="mathjax-container">\(T\)</span> 才能把交叉项消掉</span>。对二次型而言，一个关键简化是：二次型只依赖矩阵的对称部分，因此总可以先把 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 对称化为 <span displaypfx="inline-" class="mathjax-container">\(\frac{A+A^\top}{2}\)</span> 而不改变 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}\)</span> 的值。于是“消交叉项”的核心问题就变成：对实对称矩阵，能否通过一次正交变基（Orthogonal Change of Basis）把它对角化（Diagonalize）。</p>
<div class="blog_h4"><span class="graybg">怎么来的：换到特征向量基消掉交叉项</span></div>
<p>对实对称矩阵，对角化与“消掉交叉项”来自同一个结构事实：它总可以通过一次正交变基（Orthogonal Change of Basis）写成对角形式。数学依据就是谱定理（Spectral Theorem，也常表述为“实对称矩阵可正交对角化（Orthogonal Diagonalization）”）。若 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{n\times n}\)</span> 是实对称矩阵（Real Symmetric Matrix, <span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span>），则存在正交矩阵（Orthogonal Matrix）<span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 与实对角矩阵（Real Diagonal Matrix）<span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 使得</p>
<span displaypfx="" class="mathjax-container">\[A=Q\Lambda Q^\top,\quad \text{等价于}\quad Q^\top A Q=\Lambda\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(Q=[\mathbf{v}_1,\ldots,\mathbf{v}_n]\)</span> 的列向量是一组单位特征向量（Orthonormal Eigenvectors），<span displaypfx="inline-" class="mathjax-container">\(\Lambda=\mathrm{diag}(\lambda_1,\ldots,\lambda_n)\)</span> 的对角元素是对应特征值（Eigenvalues）。该定理同时包含两个常用事实：特征值都是实数；并且可以选出一组两两正交的特征向量作为基。</p>
<p>这就是你熟悉的特征值分解（Eigendecomposition / Eigenvalue Decomposition）的对称矩阵特例。</p>
<p>一般情况下，如果矩阵可对角化（Diagonalizable），可以写成 <span displaypfx="inline-" class="mathjax-container">\(A=V\Lambda V^{-1}\)</span>（或 <span displaypfx="inline-" class="mathjax-container">\(V^{-1}AV=\Lambda\)</span>），其中 <span displaypfx="inline-" class="mathjax-container">\(V\)</span> 的列是特征向量；但 <span displaypfx="inline-" class="mathjax-container">\(V\)</span> 不一定正交（Orthogonal），甚至矩阵可能不可对角化（Non-diagonalizable）。</p>
<p>对称矩阵的额外好处是：可以把 <span displaypfx="inline-" class="mathjax-container">\(V\)</span> 选成正交矩阵 <span displaypfx="inline-" class="mathjax-container">\(Q\)</span>，因此 <span displaypfx="inline-" class="mathjax-container">\(V^{-1}=Q^{-1}=Q^\top\)</span>，分解变成数值上更稳定、几何上更直观的 <span displaypfx="inline-" class="mathjax-container">\(A=Q\Lambda Q^\top\)</span>。</p>
<p>两个最小例子能把“<span displaypfx="inline-" class="mathjax-container">\(V\)</span> 不一定正交 / 甚至不可对角化”说得更具体：</p>
<ul>
<li>
<p><span style="background-color: #c0c0c0;">例 1：可对角化，但 <span displaypfx="inline-" class="mathjax-container">\(V\)</span> 不正交</span>。取</p>
<span displaypfx="" class="mathjax-container">\[A_1=\begin{bmatrix}2 &amp; 1\\ 0 &amp; 1\end{bmatrix}\]</span>
<p>它的特征值是 <span displaypfx="inline-" class="mathjax-container">\(\lambda_1=2,\lambda_2=1\)</span>（两个不同特征值意味着在二维里一定能找到两条线性无关的特征向量，因此可对角化）。对应一组特征向量可以取</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{v}_1=\begin{bmatrix}1\\ 0\end{bmatrix},\quad \mathbf{v}_2=\begin{bmatrix}1\\ -1\end{bmatrix}\]</span>
<p>它们并不正交，因为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}_1^\top\mathbf{v}_2=1\ne 0\)</span>。把它们按列组成矩阵 <span displaypfx="inline-" class="mathjax-container">\(V=[\mathbf{v}_1\ \mathbf{v}_2]\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[V=\begin{bmatrix}1 &amp; 1\\ 0 &amp; -1\end{bmatrix},\quad \Lambda=\begin{bmatrix}2 &amp; 0\\ 0 &amp; 1\end{bmatrix},\quad V^{-1}=\begin{bmatrix}1 &amp; 1\\ 0 &amp; -1\end{bmatrix}\]</span>
<p>注意：这个例子里 <span displaypfx="inline-" class="mathjax-container">\(V^{-1}\)</span> 恰好等于 <span displaypfx="inline-" class="mathjax-container">\(V\)</span>（只是代数上的巧合），但它仍然并非正交矩阵，因为正交要求 <span displaypfx="inline-" class="mathjax-container">\(V^{-1}=V^\top\)</span>，而这里并不成立。</p>
<p>并且确实有 <span displaypfx="inline-" class="mathjax-container">\(A_1=V\Lambda V^{-1}\)</span>。这个例子说明：一般矩阵即使可对角化，特征向量也未必能选成“互相垂直的方向”。</p>
</li>
<li>
<p><span style="background-color: #c0c0c0;">例 2：不可对角化（特征值重复，但特征向量不够）</span>。取</p>
<span displaypfx="" class="mathjax-container">\[A_2=\begin{bmatrix}1 &amp; 1\\ 0 &amp; 1\end{bmatrix}\]</span>
<p>它的特征值只有 <span displaypfx="inline-" class="mathjax-container">\(\lambda=1\)</span>（在二维里重复出现）。求特征向量需要解 <span displaypfx="inline-" class="mathjax-container">\((A_2-I)\mathbf{v}=\mathbf{0}\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[A_2-I=\begin{bmatrix}0 &amp; 1\\ 0 &amp; 0\end{bmatrix}\Rightarrow (A_2-I)\begin{bmatrix}x\\ y\end{bmatrix}=\begin{bmatrix}y\\ 0\end{bmatrix}=\begin{bmatrix}0\\ 0\end{bmatrix}\Rightarrow y=0\]</span>
<p>因此所有特征向量都形如 <span displaypfx="inline-" class="mathjax-container">\((x,0)^\top\)</span>，只有 1 个线性无关方向。要写成 <span displaypfx="inline-" class="mathjax-container">\(A_2=V\Lambda V^{-1}\)</span>，矩阵 <span displaypfx="inline-" class="mathjax-container">\(V\)</span> 必须可逆（Invertible），这要求有足够多（在二维里是 2 个）线性无关特征向量作为列；该矩阵做不到，所以它不可对角化。</p>
</li>
</ul>
<p>把这个定理放回二次型就能立刻看出“交叉项为什么会消失”。令坐标变换 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}=Q^\top\mathbf{x}\)</span>（把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 在特征向量基下的坐标记作 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span>），则</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=\mathbf{x}^\top(Q\Lambda Q^\top)\mathbf{x}=\mathbf{y}^\top\Lambda\mathbf{y}=\sum_{i=1}^{n}\lambda_i y_i^2\]</span>
<p>注意这里同时出现了两种“换坐标”的写法：线性变换里常写 <span displaypfx="inline-" class="mathjax-container">\(Q^{-1}AQ\)</span>（相似变换（Similarity Transformation）），二次型里写 <span displaypfx="inline-" class="mathjax-container">\(Q^\top A Q\)</span>（合同变换（Congruence Transformation））。对正交矩阵而言 <span displaypfx="inline-" class="mathjax-container">\(Q^{-1}=Q^\top\)</span>，所以它们在这里完全一致：同一个正交变换既给出特征值分解，也把二次型化到没有交叉项的对角标准型。</p>
<p>因此：在对称矩阵的情形，“换到特征向量基”与“把二次型旋转到主轴”是同一件事，只是用不同语言描述。</p>
<p>直观上，特征向量（Eigenvector）给出“主轴方向”（把坐标轴转到这些方向后，交叉项会消失），特征值（Eigenvalue）则是标准型里各平方项前的系数。</p>
<p>详细例子：取</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}5 &amp; -2\\ -2 &amp; 5\end{bmatrix}\]</span>
<p>它是对称矩阵，因此可正交对角化。其特征值与一组单位特征向量可以取为：</p>
<span displaypfx="" class="mathjax-container">\[\lambda_1=3,\ \mathbf{v}_1=\frac{1}{\sqrt{2}}\begin{bmatrix}1\\ 1\end{bmatrix};\quad \lambda_2=7,\ \mathbf{v}_2=\frac{1}{\sqrt{2}}\begin{bmatrix}1\\ -1\end{bmatrix}\]</span>
<p>把它们组成正交矩阵与对角矩阵：</p>
<span displaypfx="" class="mathjax-container">\[Q=[\mathbf{v}_1\ \mathbf{v}_2]=\frac{1}{\sqrt{2}}\begin{bmatrix}1 &amp; 1\\ 1 &amp; -1\end{bmatrix},\quad \Lambda=\begin{bmatrix}3 &amp; 0\\ 0 &amp; 7\end{bmatrix}\]</span>
<p>则 <span displaypfx="inline-" class="mathjax-container">\(A=Q\Lambda Q^\top\)</span>。这里 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 核心是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 在特征向量基 <span displaypfx="inline-" class="mathjax-container">\(\{\mathbf{v}_1,\mathbf{v}_2\}\)</span> 下的坐标： <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=y_1\mathbf{v}_1+y_2\mathbf{v}_2=Q\mathbf{y}\)</span>。</p>
<p>由于 <span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 是正交矩阵（<span displaypfx="inline-" class="mathjax-container">\(Q^\top Q=I\)</span>），左乘 <span displaypfx="inline-" class="mathjax-container">\(Q^\top\)</span> 可得 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}=Q^\top\mathbf{x}\)</span>。这一步就是换基（Change of Basis）：把向量从标准坐标系表达改写为主轴坐标系表达。</p>
<p>因此可显式写出两组坐标关系：</p>
<span displaypfx="" class="mathjax-container">\[y_1=\frac{x_1+x_2}{\sqrt{2}},\quad y_2=\frac{x_1-x_2}{\sqrt{2}}\]</span>
<span displaypfx="" class="mathjax-container">\[x_1=\frac{y_1+y_2}{\sqrt{2}},\quad x_2=\frac{y_1-y_2}{\sqrt{2}}\]</span>
<p>代入标准型：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=\mathbf{y}^\top\Lambda\mathbf{y}=3y_1^2+7y_2^2\]</span>
<p>把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 用 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 展开，可直接验证“交叉项被旋转消掉”：</p>
<span displaypfx="" class="mathjax-container">\[3y_1^2+7y_2^2=\frac{3}{2}(x_1+x_2)^2+\frac{7}{2}(x_1-x_2)^2=5x_1^2-4x_1x_2+5x_2^2\]</span>
<p>数值校验：取 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(1,2)^\top\)</span>，原式为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}=17\)</span>；而 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}=Q^\top\mathbf{x}=\left(\frac{3}{\sqrt{2}},-\frac{1}{\sqrt{2}}\right)^\top\)</span>，代入 <span displaypfx="inline-" class="mathjax-container">\(3y_1^2+7y_2^2\)</span> 同样得到 17。</p>
<p>几何解释：正交矩阵 <span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 表示旋转/换基，把坐标轴对齐到“主轴方向”（特征向量）；对角矩阵 <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 表示沿主轴的逐轴缩放（由特征值控制）。因此等值线在 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 坐标系里与轴对齐，形状由 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i\)</span> 决定。</p>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 中既有正特征值也有负特征值，则二次型是不定的（Indefinite）：沿某些方向 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 增大，沿另一些方向 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 减小。二维里它的等值线（Level Set）典型呈双曲线（Hyperbola）形状，优化里对应鞍点（Saddle Point）结构。例：令 <span displaypfx="inline-" class="mathjax-container">\(A=\begin{bmatrix}1 &amp; 2\\ 2 &amp; 1\end{bmatrix}\)</span>，其特征值为 3 与 -1，在某个正交坐标 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 下有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^\top A\mathbf{x}=3y_1^2-y_2^2\)</span>，可取正也可取负。</p>
<p>进一步允许一般可逆线性变换（不要求是旋转）时，可把对角项缩放为 <span displaypfx="inline-" class="mathjax-container">\(+1,-1,0\)</span>（Sylvester 惯性定理（Law of Inertia））：二次型被分解为若干正平方项、负平方项与零方向，其中正/负/零项的个数在合同变换下保持不变；“正方向有几个、负方向有几个、平坦方向有几个”是坐标变换改不掉的性质。正/负项的个数也称为签名（Signature）。在优化里，它们分别对应局部最小、鞍点与平坦方向。</p>
<div class="blog_h3"><span class="graybg">二次型与机器学习（Quadratic Form in Machine Learning）</span></div>
<p>下面这些场景看起来不同，但核心都在计算“某个方向上的能量/代价”：给一个向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span>，二次型 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}^\top A\mathbf{v}\)</span> 会告诉你它在矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 定义的几何里有多大、代价有多高。</p>
<ul>
<li>平方范数（Squared <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> Norm）：<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_2^2=\mathbf{x}^\top I\mathbf{x}\)</span>。直白地说，它就是“向量长度的平方”，在训练里常作为最基础的“大小惩罚”。例如权重衰减（Weight Decay）把过大的参数拉回去，本质是在最小化 <span displaypfx="inline-" class="mathjax-container">\(\|\theta\|_2^2\)</span> 这种二次型。</li>
<li>最小二乘与二次损失（Least Squares / MSE）：线性回归目标 <span displaypfx="inline-" class="mathjax-container">\(\|X\mathbf{w}-\mathbf{y}\|_2^2\)</span> 展开后是关于 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 的二次型。通俗理解：模型每偏一点，代价按“平方”增长，所以大误差会被更重惩罚。它的闭式解来自正规方程（Normal Equations）<span displaypfx="inline-" class="mathjax-container">\(X^\top X\mathbf{w}=X^\top\mathbf{y}\)</span>。</li>
<li>PCA（Principal Component Analysis）：对中心化（Centering）数据，方向 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\)</span> 上的方差是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}^\top\Sigma\mathbf{u}\)</span>。这句话的直觉是：“把数据投影到某个方向后，能展开多宽”。PCA 就是在所有单位方向里找让这个二次型最大的方向（主成分），因此主成分就是“信息最密集”的方向。</li>
<li>马氏距离（Mahalanobis Distance）与高斯负对数似然（Gaussian NLL）：核心项是 <span displaypfx="inline-" class="mathjax-container">\((\mathbf{x}-\boldsymbol{\mu})^\top\Sigma^{-1}(\mathbf{x}-\boldsymbol{\mu})\)</span>。可以把它理解成“先按数据真实尺度做校正，再测距离”：方差大的方向偏离一点不算太异常，方差小的方向偏离同样大小则更异常。异常检测（Anomaly Detection）和高斯判别模型都依赖这个量。</li>
<li>二阶近似与优化曲率（Second-order Approximation / Curvature）：在参数点附近，损失变化可写成 <span displaypfx="inline-" class="mathjax-container">\(\frac{1}{2}\Delta^\top H\Delta\)</span>。它告诉你“往哪个方向走会涨得快/慢”：特征值大表示该方向很陡，特征值小表示平坦，正负混合则是鞍点（Saddle）。牛顿法、预条件（Preconditioning）和学习率调度之所以都关心 Hessian 的谱结构，原因就在这里。</li>
</ul>
<p>在机器学习的实现层面，二次型也常先通过可逆变量替换 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=T\mathbf{y}\)</span> 化到更易计算的表示： <span displaypfx="inline-" class="mathjax-container">\(q(\mathbf{x})=\mathbf{x}^\top A\mathbf{x}=\mathbf{y}^\top(T^\top A T)\mathbf{y}\)</span>。若 <span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span>，原坐标有 <span displaypfx="inline-" class="mathjax-container">\(\nabla_{\mathbf{x}}q=2A\mathbf{x}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\nabla^2_{\mathbf{x}}q=2A\)</span>；在新坐标下 <span displaypfx="inline-" class="mathjax-container">\(\nabla_{\mathbf{y}}q=2A'\mathbf{y}\)</span>（<span displaypfx="inline-" class="mathjax-container">\(A'=T^\top A T\)</span>）。若进一步化到对角标准型 <span displaypfx="inline-" class="mathjax-container">\(A'=\Lambda\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial q}{\partial y_i}=2\lambda_i y_i\)</span>，逐坐标解耦，推导与实现都会更直接。</p>
<p>这里要区分“性质不变”和“数值不变”：在可逆变量替换下，正定/半正定/不定性质与正负零方向个数（惯性（Inertia））保持不变，因此局部最小/鞍点等优化结构不变；但一般合同变换 <span displaypfx="inline-" class="mathjax-container">\(T^\top A T\)</span> 不要求逐个保留特征值数值，只有正交相似变换 <span displaypfx="inline-" class="mathjax-container">\(Q^\top A Q\)</span> 才逐个保留特征值。</p>
<div class="blog_h2"><span class="graybg">对角矩阵（Diagonal Matrix）</span></div>
<p>对角矩阵（Diagonal Matrix）是只有对角线元素可能非零的方阵。写作 <span displaypfx="inline-" class="mathjax-container">\(D=\mathrm{diag}(d_1,\ldots,d_n)\)</span>，其非对角元素全为 0：</p>
<span displaypfx="" class="mathjax-container">\[D=\begin{bmatrix}d_1 &amp; 0 &amp; \cdots &amp; 0\\ 0 &amp; d_2 &amp; \cdots &amp; 0\\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots\\ 0 &amp; 0 &amp; \cdots &amp; d_n\end{bmatrix}\]</span>
<p>对角矩阵乘以向量等价于“逐维缩放”：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x_1,\ldots,x_n)^\top\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(D\mathbf{x}=(d_1x_1,\ldots,d_nx_n)^\top\)</span>。例：令 <span displaypfx="inline-" class="mathjax-container">\(D=\mathrm{diag}(2,0.5)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(3,4)^\top\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(D\mathbf{x}=(6,2)^\top\)</span>。</p>
<p>在 AI 里，对角矩阵最常见的用途是把“逐元素缩放”写成线性算子：例如 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\odot \mathbf{s}=\mathrm{diag}(\mathbf{s})\mathbf{x}\)</span>。很多优化器的自适应学习率也可以视为对角预条件（Diagonal Preconditioner）：例如 Adam/Adagrad 里的 <span displaypfx="inline-" class="mathjax-container">\(1/\sqrt{v+\epsilon}\)</span> 本质上是按参数维度缩放梯度。</p>
<div class="blog_h3"><span class="graybg">对角化（Diagonalization）</span></div>
<p>对角化（Diagonalization）研究的核心是<span style="background-color: #c0c0c0;">能否通过换基把它变成对角矩阵</span>。若存在可逆矩阵 <span displaypfx="inline-" class="mathjax-container">\(P\)</span> 与对角矩阵 <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 使得</p>
<span displaypfx="" class="mathjax-container">\[A=P\Lambda P^{-1}\]</span>
<p>则称 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 可对角化（Diagonalizable）。这里 <span displaypfx="inline-" class="mathjax-container">\(P\)</span> 的列向量通常取为 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的一组线性无关特征向量， <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 的对角线上放的是对应特征值。对角化的本质，是寻找一个“最自然的坐标系”，使线性变换在这个坐标系里不再发生分量混合，而只剩逐坐标缩放。</p>
<p>这和前面的对角矩阵直接连在一起：对角矩阵本来就表示“各坐标轴彼此独立地缩放”；对角化则说明，很多看起来耦合很强的矩阵，只要换到合适基底，也能被还原成这种最简单的作用形式。因此，对角矩阵是结构最简单的目标形式，对角化是把一般矩阵化到这个目标形式的方法。</p>
<p>若写成特征分解的形式，这个关系更直接。设 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 有 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个线性无关特征向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}_1,\dots,\mathbf{v}_n\)</span>，对应特征值为 <span displaypfx="inline-" class="mathjax-container">\(\lambda_1,\dots,\lambda_n\)</span>。令</p>
<span displaypfx="" class="mathjax-container">\[P=[\mathbf{v}_1,\dots,\mathbf{v}_n],\quad \Lambda=\mathrm{diag}(\lambda_1,\dots,\lambda_n)\]</span>
<p>则有 <span displaypfx="inline-" class="mathjax-container">\(AP=P\Lambda\)</span>，进而得到 <span displaypfx="inline-" class="mathjax-container">\(A=P\Lambda P^{-1}\)</span>。这表明：<span style="background-color: #c0c0c0;">可对角化的核心条件，就是能否找到足够多的线性无关特征向量，把整个空间铺满</span>。</p>
<p>例：令</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}3 &amp; 1\\ 0 &amp; 2\end{bmatrix}\]</span>
<p>它的特征值为 <span displaypfx="inline-" class="mathjax-container">\(3\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(2\)</span>。对应可取特征向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}_1=(1,0)^\top\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}_2=(1,-1)^\top\)</span>。于是</p>
<span displaypfx="" class="mathjax-container">\[P=\begin{bmatrix}1 &amp; 1\\ 0 &amp; -1\end{bmatrix},\quad \Lambda=\begin{bmatrix}3 &amp; 0\\ 0 &amp; 2\end{bmatrix},\quad A=P\Lambda P^{-1}\]</span>
<p>在标准坐标下， <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 既有缩放也有“串扰”；在特征向量基下，它只是在第一维乘 3、第二维乘 2。</p>
<p>为什么需要对角化，原因有三层。第一，<span style="background-color: #c0c0c0;">计算会显著简化</span>。例如</p>
<span displaypfx="" class="mathjax-container">\[A^k=P\Lambda^k P^{-1}\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(\Lambda^k\)</span> 只需把每个对角元素分别升到 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 次方，即 <span displaypfx="inline-" class="mathjax-container">\(\Lambda^k=\mathrm{diag}(\lambda_1^k,\dots,\lambda_n^k)\)</span>。这让离散动力系统、马尔可夫链、线性递推、RNN 线性稳定性分析都更容易做。</p>
<p>第二，<span style="background-color: #c0c0c0;">几何结构会变透明</span>。二次型、曲率、协方差传播等问题，本质都在问“哪些方向最重要、每个方向强度是多少”。对角化以后，每个方向对应一个特征值，方向之间不再耦合。前面讲二次型标准型、正定矩阵、谱分解时反复出现的“换到主轴方向再逐维看”，本质上都属于这种思路。</p>
<p>第三，<span style="background-color: #c0c0c0;">稳定性与长期行为可以直接从特征值读出</span>。例如在线性迭代 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_{t+1}=A\mathbf{x}_t\)</span> 中，若 <span displaypfx="inline-" class="mathjax-container">\(|\lambda_i|&lt;1\)</span>，对应方向会衰减；若 <span displaypfx="inline-" class="mathjax-container">\(|\lambda_i|&gt;1\)</span>，对应方向会放大；若 <span displaypfx="inline-" class="mathjax-container">\(|\lambda_i|=1\)</span>，则处于临界状态。很多收敛性判断最终都落到这个层面。</p>
<p>对称矩阵是最理想的情形。它不仅可对角化，而且可以被正交对角化：</p>
<span displaypfx="" class="mathjax-container">\[A=Q\Lambda Q^\top\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 是正交矩阵，因此换基不会引入尺度扭曲，只是旋转坐标系。这正是 PCA、协方差分析、Hessian 主曲率分析最喜欢对称矩阵的原因。相比之下，一般矩阵即便可对角化，也可能需要非正交的 <span displaypfx="inline-" class="mathjax-container">\(P\)</span>，数值稳定性通常更差。</p>
<div class="blog_h2"><span class="graybg">单位矩阵（Identity Matrix）</span></div>
<p>单位矩阵（Identity Matrix）<span displaypfx="inline-" class="mathjax-container">\(I_n\)</span> 是对角线上全为 1、其他元素为 0 的方阵：</p>
<span displaypfx="" class="mathjax-container">\[I_n=\begin{bmatrix}1 &amp; 0 &amp; \cdots &amp; 0\\ 0 &amp; 1 &amp; \cdots &amp; 0\\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots\\ 0 &amp; 0 &amp; \cdots &amp; 1\end{bmatrix}\]</span>
<p>它是矩阵乘法的单位元：对任意形状匹配的矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\(AI=IA=A\)</span>；对任意向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\(I\mathbf{x}=\mathbf{x}\)</span>。例：若 <span displaypfx="inline-" class="mathjax-container">\(I_2=\begin{bmatrix}1 &amp; 0\\ 0 &amp; 1\end{bmatrix}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(I_2(3,4)^\top=(3,4)^\top\)</span>。</p>
<p>在 AI/数值计算里，<span displaypfx="inline-" class="mathjax-container">\(A+\lambda I\)</span>（<span displaypfx="inline-" class="mathjax-container">\(\lambda&gt;0\)</span>）用于改善条件数、提高可逆性与数值稳定性：例如岭回归（Ridge Regression）把 <span displaypfx="inline-" class="mathjax-container">\(X^\top X\)</span> 替换为 <span displaypfx="inline-" class="mathjax-container">\(X^\top X+\lambda I\)</span>；在高斯模型与协方差估计里常见 <span displaypfx="inline-" class="mathjax-container">\(\Sigma+\epsilon I\)</span> 来保证 Cholesky 分解可用。</p>
<div class="blog_h2"><span class="graybg">对称矩阵（Symmetric Matrix）</span></div>
<p>对称矩阵（Symmetric Matrix）是满足 <span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span> 的实方阵，即 <span displaypfx="inline-" class="mathjax-container">\(A_{ij}=A_{ji}\)</span>。直观上，它的上三角与下三角互为镜像。</p>
<p>例： <span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix}2 &amp; 1\\ 1 &amp; 3\end{bmatrix}\)</span> 是对称矩阵；而 <span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix}2 &amp; 1\\ 0 &amp; 3\end{bmatrix}\)</span> 并非，因为非对角元素不成对相等。</p>
<p>对称矩阵拥有更“干净”的谱结构：所有特征值都是实数，并且可正交对角化（Spectral Theorem）：<span displaypfx="inline-" class="mathjax-container">\(A=Q\Lambda Q^\top\)</span>（<span displaypfx="inline-" class="mathjax-container">\(Q^\top Q=I\)</span>）。这使得很多推导都可以在旋转后的坐标系里逐维分析二次型、曲率与能量。</p>
<p>在 AI 里，对称矩阵高频出现于：</p>
<ul>
<li>协方差矩阵（Covariance Matrix）<span displaypfx="inline-" class="mathjax-container">\(\Sigma\)</span>：例如高斯模型与特征白化（Whitening）里，要求 <span displaypfx="inline-" class="mathjax-container">\(\Sigma\succeq 0\)</span>，并常用 <span displaypfx="inline-" class="mathjax-container">\(\Sigma+\epsilon I\)</span> 保证数值稳定。</li>
<li>Gram 矩阵（Gram Matrix）<span displaypfx="inline-" class="mathjax-container">\(X^\top X\)</span> 与核矩阵（Kernel Matrix）<span displaypfx="inline-" class="mathjax-container">\(K\)</span>：它们天然对称/半正定，是最小二乘、岭回归与核方法的核心对象。</li>
<li>海森矩阵（Hessian）：当目标函数二阶连续可导时，Hessian 对称；其特征值决定局部曲率，从而决定“极小/极大/鞍点”的类型与优化难度。</li>
</ul>
<div class="blog_h2"><span class="graybg">厄米矩阵（Hermitian Matrix）</span></div>
<p>厄米矩阵（Hermitian Matrix）是复数域上与对称矩阵对应的概念。若复矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{C}^{n\times n}\)</span> 满足</p>
<span displaypfx="" class="mathjax-container">\[A=A^\ast\]</span>
<p>则称 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 为厄米矩阵，其中 <span displaypfx="inline-" class="mathjax-container">\(A^\ast\)</span> 表示共轭转置（Conjugate Transpose）：先转置，再对每个元素取复共轭。因此，厄米矩阵满足按元素关系 <span displaypfx="inline-" class="mathjax-container">\(A_{ij}=\overline{A_{ji}}\)</span>。可以把它直接理解为<span style="background-color: #c0c0c0;">复数版本的对称矩阵</span>。</p>
<p>例： <span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix}1 &amp; 2+i\\ 2-i &amp; 3\end{bmatrix}\)</span> 是厄米矩阵，因为非对角元素互为复共轭，而对角线元素必须是实数。厄米矩阵保留了实对称矩阵最重要的好性质：特征值全为实数，并且可以被酉矩阵（Unitary Matrix）对角化。因此在复数信号处理、量子力学、复数优化与某些频域分析里，它扮演的角色与实对称矩阵在实数域中的角色完全对应。</p>
<div class="blog_h2"><span class="graybg">可逆矩阵与奇异矩阵（Invertible vs Singular）</span></div>
<p>可逆矩阵（Invertible Matrix）是存在逆矩阵的方阵：对 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{n\times n}\)</span>，若存在 <span displaypfx="inline-" class="mathjax-container">\(A^{-1}\)</span> 使得 <span displaypfx="inline-" class="mathjax-container">\(AA^{-1}=A^{-1}A=I\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 可逆；否则称 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 为奇异矩阵（Singular Matrix）。</p>
<p>等价判据（常用）：<span displaypfx="inline-" class="mathjax-container">\(A\)</span> 可逆 <span displaypfx="inline-" class="mathjax-container">\(\Leftrightarrow \det(A)\ne 0 \Leftrightarrow \mathrm{rank}(A)=n\)</span>（列向量线性无关）。</p>
<p>例（可逆）：令 <span displaypfx="inline-" class="mathjax-container">\(A=\begin{bmatrix}2 &amp; 1\\ 1 &amp; 1\end{bmatrix}\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\det(A)=1\)</span>，并且 <span displaypfx="inline-" class="mathjax-container">\(A^{-1}=\begin{bmatrix}1 &amp; -1\\ -1 &amp; 2\end{bmatrix}\)</span>。</p>
<p>例（奇异）：令 <span displaypfx="inline-" class="mathjax-container">\(B=\begin{bmatrix}1 &amp; 2\\ 2 &amp; 4\end{bmatrix}\)</span>，第二行是第一行的 2 倍，因此秩为 1、行列式为 0，无法求逆。对应线性方程组 <span displaypfx="inline-" class="mathjax-container">\(B\mathbf{x}=\mathbf{b}\)</span> 可能无解（例如 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}=(3,5)^\top\)</span>），也可能有无穷多解（例如 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}=(3,6)^\top\)</span>）。</p>
<p>在 AI 里，奇异性最常出现在最小二乘与协方差：当特征共线、维度远大于样本数（<span displaypfx="inline-" class="mathjax-container">\(d\gg N\)</span>）时，<span displaypfx="inline-" class="mathjax-container">\(X^\top X\)</span> 往往奇异或病态（Ill-conditioned）。常见处理是正则化（<span displaypfx="inline-" class="mathjax-container">\(X^\top X+\lambda I\)</span>）或用 SVD/QR 求解并使用伪逆（Pseudoinverse）<span displaypfx="inline-" class="mathjax-container">\(A^+\)</span>。</p>
<p>实现上通常避免显式求 <span displaypfx="inline-" class="mathjax-container">\(A^{-1}\)</span>：更稳定的做法是直接求解 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{x}=\mathbf{b}\)</span>（Solve），或用分解（Cholesky / QR / SVD）替代。</p>
<div class="blog_h2"><span class="graybg">正交矩阵（Orthogonal Matrix）</span></div>
<p>正交矩阵（Orthogonal Matrix）是满足 <span displaypfx="inline-" class="mathjax-container">\(Q^\top Q=QQ^\top=I\)</span> 的实方阵。它的列向量（或行向量）构成一组正交标准基（Orthonormal Basis），因此保持长度与点积：对任意向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 有 <span displaypfx="inline-" class="mathjax-container">\(\|Q\mathbf{x}\|_2=\|\mathbf{x}\|_2\)</span>，对任意向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{a},\mathbf{b}\)</span> 有 <span displaypfx="inline-" class="mathjax-container">\((Q\mathbf{a})^\top(Q\mathbf{b})=\mathbf{a}^\top\mathbf{b}\)</span>。</p>
<p>正交矩阵的列向量不需要“沿着坐标轴方向”。要求只有一个：列向量两两正交且都是单位向量，也就是构成一组正交标准基。标准基（<span displaypfx="inline-" class="mathjax-container">\(\mathbf{e}_1,\mathbf{e}_2,\ldots\)</span>）只是其中最常用的一组。</p>
<p>例（旋转 45°）：令</p>
<span displaypfx="" class="mathjax-container">\[Q=\frac{1}{\sqrt{2}}\begin{bmatrix}1 &amp; -1\\ 1 &amp; 1\end{bmatrix}\]</span>
<p>它的两列分别是 <span displaypfx="inline-" class="mathjax-container">\(\frac{1}{\sqrt{2}}(1,1)^\top\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\frac{1}{\sqrt{2}}(-1,1)^\top\)</span>，都不与坐标轴对齐，但它们正交且单位长度，因此</p>
<span displaypfx="" class="mathjax-container">\[Q^\top Q=\frac{1}{2}\begin{bmatrix}1 &amp; 1\\ -1 &amp; 1\end{bmatrix}\begin{bmatrix}1 &amp; -1\\ 1 &amp; 1\end{bmatrix}=\begin{bmatrix}1 &amp; 0\\ 0 &amp; 1\end{bmatrix}=I\]</span>
<p>例（二维旋转 90°）：令</p>
<span displaypfx="" class="mathjax-container">\[R=\begin{bmatrix}0 &amp; -1\\ 1 &amp; 0\end{bmatrix},\quad R^\top=\begin{bmatrix}0 &amp; 1\\ -1 &amp; 0\end{bmatrix}\]</span>
<p>则</p>
<span displaypfx="" class="mathjax-container">\[R^\top R=RR^\top=\begin{bmatrix}1 &amp; 0\\ 0 &amp; 1\end{bmatrix}=I\]</span>
<p>在 AI 里，正交矩阵常用于正交初始化（Orthogonal Initialization）、QR 分解与正交约束参数化；核心目的是把谱范数控制在 1 附近，改善深层网络与 RNN 的数值稳定性。</p>
<div class="blog_h2"><span class="graybg">酉矩阵（Unitary Matrix）</span></div>
<p>酉矩阵（Unitary Matrix）是复数域上的“长度保持”线性变换。对复矩阵 <span displaypfx="inline-" class="mathjax-container">\(U\in\mathbb{C}^{n\times n}\)</span>，若满足</p>
<span displaypfx="" class="mathjax-container">\[U^\ast U=UU^\ast=I\]</span>
<p>则称 <span displaypfx="inline-" class="mathjax-container">\(U\)</span> 为酉矩阵，其中 <span displaypfx="inline-" class="mathjax-container">\(U^\ast\)</span> 是共轭转置（Conjugate Transpose）。酉矩阵的列向量构成一组正交归一基（Orthonormal Basis），因此对任意向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 都有 <span displaypfx="inline-" class="mathjax-container">\(\|U\mathbf{x}\|_2=\|\mathbf{x}\|_2\)</span>。</p>
<p>实数域特例：当矩阵元素为实数时，酉矩阵退化为正交矩阵（Orthogonal Matrix），即满足 <span displaypfx="inline-" class="mathjax-container">\(Q^\top Q=QQ^\top=I\)</span>。</p>
<p>例（复数域）：令</p>
<span displaypfx="" class="mathjax-container">\[U=\begin{bmatrix}1 &amp; 0\\ 0 &amp; i\end{bmatrix},\quad U^\ast=\begin{bmatrix}1 &amp; 0\\ 0 &amp; -i\end{bmatrix}\]</span>
<p>则可直接计算：</p>
<span displaypfx="" class="mathjax-container">\[U^\ast U=\begin{bmatrix}1 &amp; 0\\ 0 &amp; -i\end{bmatrix}\begin{bmatrix}1 &amp; 0\\ 0 &amp; i\end{bmatrix}=\begin{bmatrix}1 &amp; 0\\ 0 &amp; 1\end{bmatrix}=I,\quad UU^\ast=\begin{bmatrix}1 &amp; 0\\ 0 &amp; i\end{bmatrix}\begin{bmatrix}1 &amp; 0\\ 0 &amp; -i\end{bmatrix}=I\]</span>
<p>在 AI 里，正交/酉矩阵常用于控制数值稳定性：例如正交初始化（Orthogonal Initialization）与正交/酉参数化可把谱范数压在 1 附近，缓解深层网络与 RNN 中的梯度爆炸/消失；一些长序列建模会使用 unitary/orthogonal RNN 来更好地传播长程信息。</p>
<div class="blog_h2"><span class="graybg">正定矩阵</span></div>
<p>正定矩阵（Positive Definite Matrix）把“二次型总是正”形式化。对对称矩阵（Symmetric Matrix）<span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span>，若对任意非零向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\ne\mathbf{0}\)</span> 都有</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x} &gt; 0\]</span>
<p>则称 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 正定，记作 <span displaypfx="inline-" class="mathjax-container">\(A\succ 0\)</span>。若是 <span displaypfx="inline-" class="mathjax-container">\(\ge 0\)</span> 则为半正定（Positive Semi-Definite, PSD），记作 <span displaypfx="inline-" class="mathjax-container">\(A\succeq 0\)</span>。</p>
<p>几何上，把 <span displaypfx="inline-" class="mathjax-container">\(q(x,y)=\mathbf{x}^\top A\mathbf{x}\)</span> 画成 <span displaypfx="inline-" class="mathjax-container">\(z=q(x,y)\)</span> 的三维曲面时，正定对应“向上开口的碗”（椭圆抛物面（Elliptic Paraboloid））：原点是唯一最低点，任意非零方向都往上抬升。若没有交叉项（<span displaypfx="inline-" class="mathjax-container">\(bxy\)</span> 项为 0），等值线与坐标轴对齐；若有交叉项（<span displaypfx="inline-" class="mathjax-container">\(b\ne 0\)</span>），碗的主轴会旋转，但“向上碗”的本质不变。半正定则可能出现平坦方向（Flat Direction），典型形状是槽（Trough）而非严格碗底。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/matrix-pd-psd.png"><img class="alignnone size-full wp-image-40695" src="https://blog.gmem.cc/wp-content/uploads/2026/03/matrix-pd-psd.png" alt="matrix-pd-psd" width="100%" /></a></p>
<p>从特征值（Eigenvalues）角度看，对称矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的二次型类型可直接由特征值符号判别（下述以二维 <span displaypfx="inline-" class="mathjax-container">\(\lambda_1,\lambda_2\)</span> 为例）：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(\lambda_1&gt;0,\lambda_2&gt;0\)</span>：正定（Positive Definite, PD），向上开口碗。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\lambda_1&lt;0,\lambda_2&lt;0\)</span>：负定（Negative Definite, ND），向下开口碗。</li>
<li>一个为 0、另一个大于 0：半正定（Positive Semi-Definite, PSD），出现平坦方向，形状更像槽。</li>
<li>一个为 0、另一个小于 0：半负定（Negative Semi-Definite, NSD），对应“倒槽”。</li>
<li>一正一负：不定（Indefinite），对应鞍面（Saddle Surface）。</li>
</ul>
<p>因此图里“有交叉项”并不改变正负定类型；它主要改变主轴方向（旋转等值线），曲面属于碗、槽还是鞍，则由特征值符号决定。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/matrix-nd-nsd.png"><img class="alignnone size-full wp-image-40703" src="https://blog.gmem.cc/wp-content/uploads/2026/03/matrix-nd-nsd.png" alt="matrix-nd-nsd" width="100%" /></a></p>
<p>例：令</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}2 &amp; 1\\ 1 &amp; 2\end{bmatrix}\]</span>
<p>对任意 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x_1,x_2)^\top\)</span>，有</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}^\top A\mathbf{x}=2x_1^2+2x_1x_2+2x_2^2=(x_1+x_2)^2+x_1^2+x_2^2&gt;0\quad (\mathbf{x}\ne\mathbf{0})\]</span>
<p>因此 <span displaypfx="inline-" class="mathjax-container">\(A\succ 0\)</span>。同时它的特征值为 3 与 1（均为正），并且存在 Cholesky 分解：</p>
<span displaypfx="" class="mathjax-container">\[A=LL^\top,\quad L=\begin{bmatrix}\sqrt{2} &amp; 0\\ \frac{1}{\sqrt{2}} &amp; \sqrt{\frac{3}{2}}\end{bmatrix}\]</span>
<p>等价刻画（常用）：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(A\succ 0\)</span> 当且仅当所有特征值 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i&gt;0\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(A\succ 0\)</span> 当且仅当存在 Cholesky 分解 <span displaypfx="inline-" class="mathjax-container">\(A=LL^\top\)</span>（<span displaypfx="inline-" class="mathjax-container">\(L\)</span> 下三角且对角为正）。</li>
</ul>
<p>它在优化里非常关键：若函数的海森矩阵（Hessian）在某点正定，则该点是严格局部极小；若 Hessian 半正定，则函数局部凸（Locally Convex）。</p>
<div class="blog_h2"><span class="graybg">特征值与特征向量</span></div>
<p>特征值（Eigenvalue）与特征向量（Eigenvector）描述线性变换的“固有方向”：若存在非零向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\ne\mathbf{0}\)</span> 与标量 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 使得</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{v}=\lambda \mathbf{v}\]</span>
<p>则 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 是特征向量，<span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 是对应特征值。几何上，沿特征向量方向的向量经过变换后方向不变，只被缩放（若 <span displaypfx="inline-" class="mathjax-container">\(\lambda&lt;0\)</span> 还会翻转）。</p>
<p>当矩阵可对角化（Diagonalizable）时，可写为 <span displaypfx="inline-" class="mathjax-container">\(A=V\Lambda V^{-1}\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 是特征值对角矩阵，列向量 <span displaypfx="inline-" class="mathjax-container">\(V=[\mathbf{v}_1,\dots,\mathbf{v}_n]\)</span> 是特征向量。</p>
<p>对称矩阵（Symmetric Matrix）是最重要的特例：它的特征向量可取为一组正交归一基（Orthonormal Basis），因此</p>
<span displaypfx="" class="mathjax-container">\[A=Q\Lambda Q^\top,\quad Q^\top Q=I\]</span>
<p>这正是 PCA（Principal Component Analysis）等方法背后的谱分解（Spectral Decomposition）基础。</p>
<div class="blog_h3"><span class="graybg">几何直觉：哪些方向会被保留</span></div>
<p>只看公式 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{v}=\lambda \mathbf{v}\)</span> 仍然容易抽象。二维里更直观的看法是：把原点周围一个闭合形状的边界看成“很多向量的端点集合”。边界上的每个点 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 都对应一根从原点出发的向量；施加线性变换 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 后，这个端点会被送到新位置 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{v}\)</span>，整个形状也随之被拉伸、压缩、剪切、翻折或旋转。</p>
<p>特征向量方向的判别标准正是：<span style="background-color: #c0c0c0;">变换后是否仍落在原来的那条直线上</span>。若某个非零向量满足 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{v}=\lambda\mathbf{v}\)</span>，那么 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{v}\)</span> 只是 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 的倍数，它仍位于通过原点和 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 的那条一维子空间上。因此，特征向量真正对应的是一个<span style="background-color: #c0c0c0;">被保留下来的方向</span>，而非某个固定长度的箭头。</p>
<p>这里要把“方向”理解为过原点的一条直线，而非有朝向的箭头。若 <span displaypfx="inline-" class="mathjax-container">\(\lambda&gt;0\)</span>，变换后的向量和原向量同向，只是被拉长或缩短；若 <span displaypfx="inline-" class="mathjax-container">\(\lambda&lt;0\)</span>，变换后会翻到反方向，但仍留在同一条直线上，因此它依然是特征方向；若 <span displaypfx="inline-" class="mathjax-container">\(\lambda=0\)</span>，该方向上的向量会被压到原点，这说明这条方向被完全消灭了，但它仍然对应一个特征值为 0 的特征方向。</p>
<p>很多常见变换都可以用这套语言重述：</p>
<ul>
<li><span style="background-color: #c0c0c0;">对角缩放（Diagonal Scaling）</span>：例如 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{diag}(2,0.5)\)</span>。坐标轴方向会被保留，因此 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 轴和 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 轴就是特征方向；对应特征值分别是 2 和 0.5。</li>
<li><span style="background-color: #c0c0c0;">对称耦合拉伸（Symmetric Coupled Stretch）</span>：矩阵含有非零交叉项时，保留下来的方向通常不再和原坐标轴对齐，而会旋转到主轴方向。因此，对称矩阵会和椭圆主轴、二次型标准型、PCA 主方向自然连到一起。</li>
<li><span style="background-color: #c0c0c0;">剪切（Shear）</span>：例如 <span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix}1 &amp; 1\\ 0 &amp; 1\end{bmatrix}\)</span>。多数向量都会被“推斜”，通常只有少数方向真正保持不变；在这个例子里， <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 轴方向被保留，而绝大多数其他方向都并非特征方向。</li>
<li><span style="background-color: #c0c0c0;">投影（Projection）</span>：例如投影到 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 轴。被保留下来的子空间对应 <span displaypfx="inline-" class="mathjax-container">\(\lambda=1\)</span>，被压扁掉的方向对应 <span displaypfx="inline-" class="mathjax-container">\(\lambda=0\)</span>。</li>
<li><span style="background-color: #c0c0c0;">反射（Reflection）</span>：关于某条直线做镜像时，镜像轴本身是 <span displaypfx="inline-" class="mathjax-container">\(\lambda=1\)</span> 的特征方向；与它正交的法向方向会被翻过去，因此是 <span displaypfx="inline-" class="mathjax-container">\(\lambda=-1\)</span> 的特征方向。</li>
<li><span style="background-color: #c0c0c0;">纯旋转（Rotation）</span>：在实数平面中，只要旋转角度并非 <span displaypfx="inline-" class="mathjax-container">\(0\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span>，就不存在非零向量在旋转后仍留在原来的直线上，因此没有实特征向量。二维纯旋转的特征值要到复数域里才会出现，形式是 <span displaypfx="inline-" class="mathjax-container">\(e^{\pm i\theta}\)</span>。</li>
</ul>
<p>因此，特征值和特征向量核心是在回答一个非常几何的问题：<span style="background-color: #c0c0c0;">这个线性变换到底保留了哪些一维方向，以及沿这些方向会放大、缩小、翻转还是压扁到 0</span>。后面讲特征空间、可对角化、谱分解时，本质都在把这种“被保留下来的方向结构”系统化。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/04/eigenvector-linear-maps.png"><img class="alignnone size-full wp-image-42333" src="https://blog.gmem.cc/wp-content/uploads/2026/04/eigenvector-linear-maps.png" alt="eigenvector-linear-maps" width="2089" height="1389" /></a></p>
<div class="blog_h3"><span class="graybg">特征空间（Eigenspace）</span></div>
<p>单个特征向量只是一条方向；特征空间（Eigenspace）则把<span style="background-color: #c0c0c0;">所有属于同一特征值的特征向量连同零向量一起</span>统一起来。对特征值 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span>，其特征空间定义为</p>
<span displaypfx="" class="mathjax-container">\[E_\lambda(A)=\ker(A-\lambda I)=\{\mathbf{v}\in\mathbb{R}^n\mid A\mathbf{v}=\lambda \mathbf{v}\}\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(\ker(A-\lambda I)\)</span> 表示核空间（Kernel / Null Space）。定义的含义很直接：凡是被 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 作用后只发生 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 倍缩放的向量，全都落在同一个特征空间里。由于核空间本身是线性子空间，因此特征空间天然是一个子空间，而非若干零散向量的集合。</p>
<p>这件事的线性结构很重要。若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}_1,\mathbf{v}_2\in E_\lambda(A)\)</span>，且 <span displaypfx="inline-" class="mathjax-container">\(c_1,c_2\)</span> 是任意标量，则</p>
<span displaypfx="" class="mathjax-container">\[A(c_1\mathbf{v}_1+c_2\mathbf{v}_2)=c_1A\mathbf{v}_1+c_2A\mathbf{v}_2=c_1\lambda\mathbf{v}_1+c_2\lambda\mathbf{v}_2=\lambda(c_1\mathbf{v}_1+c_2\mathbf{v}_2)\]</span>
<p>因此同一特征值对应的任意线性组合，仍然属于同一个特征空间。这就是为什么当某个特征值有多个线性无关特征向量时，不会把它们看成彼此无关的点，会整体看成一个方向簇所张成的子空间。</p>
<p>例：令</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}2 &amp; 0\\ 0 &amp; 2\end{bmatrix}=2I\]</span>
<p>则对任意向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\in\mathbb{R}^2\)</span>，都有 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{v}=2\mathbf{v}\)</span>。因此特征值 <span displaypfx="inline-" class="mathjax-container">\(\lambda=2\)</span> 的特征空间核心是整个平面 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^2\)</span>。这说明：同一个特征值可以对应一个高维子空间。</p>
<p>再看另一个例子。若</p>
<span displaypfx="" class="mathjax-container">\[A=\begin{bmatrix}3 &amp; 1\\ 0 &amp; 3\end{bmatrix}\]</span>
<p>则唯一特征值是 <span displaypfx="inline-" class="mathjax-container">\(3\)</span>，但</p>
<span displaypfx="" class="mathjax-container">\[A-3I=\begin{bmatrix}0 &amp; 1\\ 0 &amp; 0\end{bmatrix}\]</span>
<p>它的核空间只有形如 <span displaypfx="inline-" class="mathjax-container">\((x,0)^\top\)</span> 的向量，因此特征空间是一维的，而非二维。这意味着虽然特征值按代数重数（Algebraic Multiplicity）出现了两次，但线性无关特征向量只有一个，矩阵就不可对角化。这里暴露出的关键区别是：</p>
<ul>
<li>代数重数（Algebraic Multiplicity）：<span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 作为特征多项式根出现的次数。</li>
<li>几何重数（Geometric Multiplicity）：特征空间 <span displaypfx="inline-" class="mathjax-container">\(E_\lambda(A)\)</span> 的维数，也就是线性无关特征向量的个数。</li>
</ul>
<p>对任一特征值 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span>，总有 <span displaypfx="inline-" class="mathjax-container">\(1\le \dim E_\lambda(A)\le m_\lambda\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(m_\lambda\)</span> 表示 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 的代数重数。矩阵可对角化，当且仅当所有特征空间的维数加起来达到 <span displaypfx="inline-" class="mathjax-container">\(n\)</span>，也就是能从这些特征空间里取出一组基，铺满整个空间。</p>
<p>从几何上看，特征空间给出的核心是一整块在变换下保持不变的空间（Invariant Subspace）：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\in E_\lambda(A)\)</span>，那么 <span displaypfx="inline-" class="mathjax-container">\(A\mathbf{v}\)</span> 仍留在这个子空间内。对称矩阵的优势再次体现在这里：不同特征值对应的特征空间彼此正交，因此整个空间可以被分解为若干互相独立的主方向子空间。这也是谱分解、PCA 和二次型主轴分析能如此清晰的根本原因。</p>
<div class="blog_h3"><span class="graybg">特征值和秩</span></div>
<p>特征值（Eigenvalue）与秩（Rank）之间的关系，核心在于 <span displaypfx="inline-" class="mathjax-container">\(\lambda=0\)</span> 这个特征值。因为</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{v}=0\cdot \mathbf{v}=\mathbf{0}\]</span>
<p>说明：<span style="background-color: #c0c0c0;">0 是特征值，当且仅当存在非零向量被 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 压到 0</span>。而这正是核空间（Kernel / Null Space）非平凡的条件，也就是矩阵丢失维度、不能满秩、不可逆的根源。</p>
<p>对方阵 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{n\times n}\)</span>，最稳定的一条结论是：</p>
<span displaypfx="" class="mathjax-container">\[A\ \text{满秩}\ \Longleftrightarrow\ \mathrm{rank}(A)=n\ \Longleftrightarrow\ \det(A)\ne 0\ \Longleftrightarrow\ 0\notin \sigma(A)\]</span>
<p>因此，若一个方阵满秩，那么它的所有特征值都非零；反过来，只要 0 是特征值，矩阵就一定并非满秩。这条结论并不要求矩阵可对角化，对任意方阵都成立。</p>
<p>若再加上“可对角化（Diagonalizable）”这个前提，秩与特征值个数之间就能写得更直接。设</p>
<span displaypfx="" class="mathjax-container">\[A=P\Lambda P^{-1},\quad \Lambda=\mathrm{diag}(\lambda_1,\dots,\lambda_n)\]</span>
<p>因为可逆变换 <span displaypfx="inline-" class="mathjax-container">\(P\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(P^{-1}\)</span> 不会改变秩，所以</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{rank}(A)=\mathrm{rank}(\Lambda)\]</span>
<p>而对角矩阵的秩最容易读：它恰好等于非零对角元素的个数。因此在可对角化情形下，</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{rank}(A)=\#\{i\mid \lambda_i\ne 0\}\]</span>
<p>这里计数的是按代数重数（Algebraic Multiplicity）展开后的特征值个数。<span style="background-color: #c0c0c0;">对可对角化方阵，秩就是非零特征值的数量，零特征值的数量则等于亏格（Nullity）</span>。</p>
<p>例：若</p>
<span displaypfx="" class="mathjax-container">\[\Lambda=\mathrm{diag}(5,2,0,0)\]</span>
<p>则 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(\Lambda)=2\)</span>。任何与它相似且可对角化的矩阵 <span displaypfx="inline-" class="mathjax-container">\(A=P\Lambda P^{-1}\)</span>，秩也都是 2，因为其中只有两个非零特征值。</p>
<p>这个结论在不可对角化时不能直接照搬。例：令</p>
<span displaypfx="" class="mathjax-container">\[J=\begin{bmatrix}0 &amp; 1\\ 0 &amp; 0\end{bmatrix}\]</span>
<p>它唯一的特征值是 0，但 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(J)=1\)</span>。原因在于：虽然 0 是唯一特征值，但这个矩阵含有非平凡 Jordan 块（Jordan Block），它仍然会把某些向量送到非零方向。因此“秩等于非零特征值个数”必须以可对角化为前提；对一般方阵，只能稳妥地使用“满秩当且仅当 0 并非特征值”这条判据。</p>
<p>从线性映射角度看，这组关系也很自然。非零特征值对应的特征方向会被保留下来，只是被缩放；0 特征值对应的方向会被压扁到更低维空间。矩阵秩衡量的正是“最终还能保留下来的独立方向数目”，因此它会和 0 特征值是否存在、以及存在多少，在可对角化情形下发生直接对应。</p>
<div class="blog_h2"><span class="graybg">谱、谱定理与谱范数</span></div>
<div class="blog_h3"><span class="graybg">谱（Spectrum）</span></div>
<p>矩阵的谱（Spectrum）指的是矩阵全部特征值构成的集合。对方阵 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{C}^{n\times n}\)</span>，常记为 <span displaypfx="inline-" class="mathjax-container">\(\sigma(A)\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[\sigma(A)=\{\lambda\in\mathbb{C}\mid \det(A-\lambda I)=0\}\]</span>
<p>这里之所以会把行列式（Determinant）扯进来，是因为特征值定义本身就会自然导向这个条件。若 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 是特征值，按定义必须存在某个非零向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\ne \mathbf{0}\)</span> 使得</p>
<span displaypfx="" class="mathjax-container">\[A\mathbf{v}=\lambda \mathbf{v}\]</span>
<p>把右边移到左边，就是</p>
<span displaypfx="" class="mathjax-container">\[(A-\lambda I)\mathbf{v}=\mathbf{0}\]</span>
<p>这说明：矩阵 <span displaypfx="inline-" class="mathjax-container">\(A-\lambda I\)</span> 对应的齐次线性方程组必须有<span style="background-color: #c0c0c0;">非零解</span>。而线性代数里，一个方阵齐次方程组有非零解，当且仅当该矩阵不可逆；对方阵而言，不可逆又等价于行列式为 0。因此就得到</p>
<span displaypfx="" class="mathjax-container">\[\det(A-\lambda I)=0\]</span>
<p>行列式在这里核心是“特征向量存在非零解”这一要求的等价写法。解这个方程得到的多项式根，就是矩阵的全部特征值。</p>
<p>这个定义的关键核心是把矩阵最核心的线性作用浓缩成一组标量。许多稳定性、可逆性、收敛性与几何性质，最终都可以回到谱上来判断。例：若 <span displaypfx="inline-" class="mathjax-container">\(0\in \sigma(A)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 不可逆；若所有特征值都为正，且 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 对称，则它是正定矩阵。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/spectrum.png"><img class="alignnone size-full wp-image-42063" src="https://blog.gmem.cc/wp-content/uploads/2026/03/spectrum.png" alt="spectrum" width="1024" height="1024" /></a></p>
<p>与谱紧密相关、但不能混为一谈的另一个概念是谱半径（Spectral Radius）：</p>
<span displaypfx="" class="mathjax-container">\[\rho(A)=\max_{\lambda\in\sigma(A)}|\lambda|\]</span>
<p>它只取特征值模长中的最大者。谱是整个特征值集合，谱半径只是其中的最大模长摘要。在线性迭代、RNN 稳定性与幂法（Power Method）里，谱半径尤其常见。</p>
<div class="blog_h3"><span class="graybg">谱定理（Spectral Theorem）</span></div>
<p>谱定理（Spectral Theorem）是线性代数里最重要的结构定理之一。对实对称矩阵 <span displaypfx="inline-" class="mathjax-container">\(A=A^\top\)</span>，存在正交矩阵 <span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 与实对角矩阵 <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span>，使得</p>
<span displaypfx="" class="mathjax-container">\[A=Q\Lambda Q^\top\]</span>
<p>等价地说， <span displaypfx="inline-" class="mathjax-container">\(Q\)</span> 的列向量是一组两两正交的单位特征向量， <span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span> 的对角线上放着对应特征值。这条定理的含义非常深：对称矩阵不仅“有特征值”，而且它的全部作用都可以被解释为<span style="background-color: #c0c0c0;">先换到特征向量基，再按各坐标轴独立缩放</span>。二次型、协方差矩阵、Hessian、图 Laplacian 等对象一旦对称，分析通常都会变得异常清爽。</p>
<p>在复数域上，对应版本是厄米矩阵（Hermitian Matrix）<span displaypfx="inline-" class="mathjax-container">\(A=A^\ast\)</span> 可被酉矩阵（Unitary Matrix）对角化：</p>
<span displaypfx="" class="mathjax-container">\[A=U\Lambda U^\ast\]</span>
<p>这类“可由一组正交 / 酉基完全分解”的矩阵，在数值上更稳定、几何上更透明，也正因此成为机器学习里最重要的一类矩阵对象。</p>
<div class="blog_h3"><span class="graybg">谱范数（Spectral Norm）</span></div>
<p>谱范数（Spectral Norm）记作 <span displaypfx="inline-" class="mathjax-container">\(\|A\|_2\)</span>，定义为矩阵对单位向量能造成的最大放大倍数：</p>
<span displaypfx="" class="mathjax-container">\[\|A\|_2=\max_{\|\mathbf{x}\|_2=1}\|A\mathbf{x}\|_2\]</span>
<p>这一定义直接揭示了它的几何意义：找出所有长度为 1 的输入向量，看矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 最多能把哪一个方向拉得最长。对任意矩阵，都有</p>
<span displaypfx="" class="mathjax-container">\[\|A\|_2=\sigma_{\max}(A)=\sqrt{\lambda_{\max}(A^\top A)}\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(\sigma_{\max}(A)\)</span> 是最大奇异值。若 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 还是实对称矩阵，则奇异值等于特征值绝对值，于是谱范数进一步化为</p>
<span displaypfx="" class="mathjax-container">\[\|A\|_2=\max_i |\lambda_i(A)|\]</span>
<p>因此，对一般矩阵要通过奇异值来理解谱范数；对对称矩阵，则可以直接通过特征值来理解。要特别区分：谱范数与谱半径在对称 / 正规矩阵上常常一致，但对一般非正规矩阵并不总相同。</p>
<p>在 AI 中，谱范数最常用于表达“局部放大能力”与 Lipschitz 常数控制。若某层线性映射的谱范数过大，它会把某些方向的扰动显著放大，进而加重训练不稳定、梯度爆炸或对抗脆弱性；这也是谱归一化（Spectral Normalization）、正交初始化与某些鲁棒优化方法反复关注它的原因。</p>
<div class="blog_h2"><span class="graybg">奇异值分解（SVD）</span></div>
<p>奇异值分解（SVD, Singular Value Decomposition）对任意矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{m\times n}\)</span> 都成立：</p>
<span displaypfx="" class="mathjax-container">\[A=U\Sigma V^\top\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(U\in\mathbb{R}^{m\times m}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(V\in\mathbb{R}^{n\times n}\)</span> 是正交矩阵（Orthogonal Matrix），<span displaypfx="inline-" class="mathjax-container">\(\Sigma\in\mathbb{R}^{m\times n}\)</span> 是对角（更准确说是“对角形”）矩阵，其对角线元素 <span displaypfx="inline-" class="mathjax-container">\(\sigma_1\ge\sigma_2\ge\cdots\ge 0\)</span> 为奇异值（Singular Values）。</p>
<p>几何解释非常直接：<span style="background-color: #c0c0c0;">先用 <span displaypfx="inline-" class="mathjax-container">\(V^\top\)</span> 旋转/换基，再用 <span displaypfx="inline-" class="mathjax-container">\(\Sigma\)</span> 沿坐标轴缩放，最后用 <span displaypfx="inline-" class="mathjax-container">\(U\)</span> 再旋转</span>。因此 SVD 是“旋转-缩放-旋转”的标准分解。</p>
<p>SVD 与特征值的关系要分左右两侧一起看：</p>
<ul>
<li>右奇异向量（Right Singular Vectors）是 <span displaypfx="inline-" class="mathjax-container">\(A^\top A\)</span> 的特征向量，即 <span displaypfx="inline-" class="mathjax-container">\(A^\top A\mathbf{v}_i=\sigma_i^2\mathbf{v}_i\)</span>。</li>
<li>左奇异向量（Left Singular Vectors）是 <span displaypfx="inline-" class="mathjax-container">\(AA^\top\)</span> 的特征向量，即 <span displaypfx="inline-" class="mathjax-container">\(AA^\top\mathbf{u}_i=\sigma_i^2\mathbf{u}_i\)</span>。</li>
</ul>
<p>其中<span displaypfx="inline-" class="mathjax-container">\(\sigma_i^2\)</span> 是 <span displaypfx="inline-" class="mathjax-container">\(A^\top A\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(AA^\top\)</span> 的特征值；<span displaypfx="inline-" class="mathjax-container">\(\sigma_i\)</span> 为奇异值（即这些非零特征值的平方根）。</p>
<p>矩阵形式分别是 <span displaypfx="inline-" class="mathjax-container">\(A^\top A=V\Sigma^\top\Sigma V^\top\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(AA^\top=U\Sigma\Sigma^\top U^\top\)</span>，因此非零奇异值满足 <span displaypfx="inline-" class="mathjax-container">\(\sigma_i=\sqrt{\lambda_i(A^\top A)}=\sqrt{\lambda_i(AA^\top)}\)</span>。这也解释了为什么奇异值总是非负，而一般矩阵的特征值可以为负甚至为复数。</p>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(\sigma_i&gt;0\)</span>，左右奇异向量还可互相对应： <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}_i=\frac{A\mathbf{v}_i}{\sigma_i}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}_i=\frac{A^\top\mathbf{u}_i}{\sigma_i}\)</span>。</p>
<p>特殊地，若 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 是对称矩阵，则它可正交对角化，此时奇异值等于特征值的绝对值：<span displaypfx="inline-" class="mathjax-container">\(\sigma_i=|\lambda_i(A)|\)</span>；若 <span displaypfx="inline-" class="mathjax-container">\(A\succeq 0\)</span>（半正定），则 <span displaypfx="inline-" class="mathjax-container">\(\sigma_i=\lambda_i(A)\)</span>。</p>
<p>为什么 SVD 可用于压缩与降维（Compression &amp; Dimensionality Reduction）？因为很多数据/权重矩阵在有效意义下是低秩（Low-rank）的：只有前几个 <span displaypfx="inline-" class="mathjax-container">\(\sigma_i\)</span> 很大，后面的奇异值接近 0。保留前 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 项得到秩 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 近似：</p>
<span displaypfx="" class="mathjax-container">\[A_k=U_{(:,1:k)}\Sigma_{(1:k,1:k)}V_{(:,1:k)}^\top\]</span>
<p>它在 Frobenius 范数（Frobenius Norm）与谱范数（Spectral Norm）意义下都是最优的秩 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 近似（Eckart–Young 定理）：用最少的信息保留最大的能量（由奇异值平方决定）。</p>
<p>在 PCA 中，对中心化数据矩阵 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 做 SVD： <span displaypfx="inline-" class="mathjax-container">\(X=U\Sigma V^\top\)</span>，右奇异向量 <span displaypfx="inline-" class="mathjax-container">\(V\)</span> 给出主方向（Principal Directions），奇异值刻画各方向的方差贡献（Variance Explained）。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/svd.png"><img class="alignnone size-full wp-image-42053" src="https://blog.gmem.cc/wp-content/uploads/2026/03/svd.png" alt="svd" width="1024" height="1024" /></a></p>
<div class="blog_h2"><span class="graybg">范数（L0 / L1 / L2 / L∞）</span></div>
<p>范数（Norm）刻画“向量大小”。在 AI 中，它最常出现在三类地方：距离度量（Distance Metric）、正则化（Regularization）与鲁棒性约束（Robustness Constraint）。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\in\mathbb{R}^d\)</span>，当 <span displaypfx="inline-" class="mathjax-container">\(p\ge 1\)</span> 时 <span displaypfx="inline-" class="mathjax-container">\(L_p\)</span> 范数定义为</p>
<span displaypfx="" class="mathjax-container">\[\|\mathbf{x}\|_p=\left(\sum_{i=1}^{d}|x_i|^p\right)^{1/p},\quad p\ge 1\]</span>
<p>并且 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_\infty=\max_i |x_i|=\lim_{p\to\infty}\|\mathbf{x}\|_p\)</span>。</p>
<div class="blog_h3"><span class="graybg">L0 “范数”（L0 “norm”）</span></div>
<p><span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_0\)</span> 定义为非零分量的个数：</p>
<span displaypfx="" class="mathjax-container">\[\|\mathbf{x}\|_0=\#\{i\mid x_i\ne 0\}\]</span>
<p>严格来说它并非范数：例如对任意非零标量 <span displaypfx="inline-" class="mathjax-container">\(\alpha\ne 0\)</span>，有 <span displaypfx="inline-" class="mathjax-container">\(\|\alpha\mathbf{x}\|_0=\|\mathbf{x}\|_0\)</span>，不满足齐次性（Homogeneity）<span displaypfx="inline-" class="mathjax-container">\(\|\alpha\mathbf{x}\|=|\alpha|\|\mathbf{x}\|\)</span>。</p>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(3,0,-1,0)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_0=2\)</span>。</p>
<p>在 AI 里，<span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_0\)</span> 用来表达稀疏性（Sparsity）：特征选择（Feature Selection）、压缩感知（Compressed Sensing）与网络剪枝（Pruning）常以“非零个数最少”为目标。但直接优化 <span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_0\)</span> 一般是组合优化，常用 <span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_1\)</span> 或其他可优化的替代目标近似。</p>
<div class="blog_h3"><span class="graybg">L1 范数（L1 Norm）</span></div>
<span displaypfx="" class="mathjax-container">\[\|\mathbf{x}\|_1=\sum_{i=1}^{d}|x_i|\]</span>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(3,4)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_1=7\)</span>。几何上，二维 <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 等值线是菱形；与 <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> 的圆相比，它更容易在坐标轴上产生“尖角”，对应优化时更容易把部分坐标推到 0。</p>
<p>在 AI 里，<span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 正则化是稀疏学习（Sparse Learning）的标准工具：在凸模型中会得到稀疏解（例如 Lasso）；在深度模型中也常用于诱导稀疏权重/稀疏特征、做轻量化。</p>
<div class="blog_h3"><span class="graybg">L2 范数（L2 Norm）</span></div>
<span displaypfx="" class="mathjax-container">\[\|\mathbf{x}\|_2=\sqrt{\sum_{i=1}^{d}x_i^2}\]</span>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(3,4)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_2=5\)</span>，对应欧氏距离（Euclidean Distance）。在连续优化中，<span displaypfx="inline-" class="mathjax-container">\(\|\theta\|_2^2\)</span> 具有良好的光滑性（Smoothness），使得许多推导与数值计算更稳定。</p>
<p>在 AI 里，<span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> 正则化（权重衰减（Weight Decay））会惩罚大权重、改善泛化并缓解病态问题；在二次目标里它也对应“加 <span displaypfx="inline-" class="mathjax-container">\(\lambda I\)</span>”的稳定化（例如岭回归）。</p>
<div class="blog_h3"><span class="graybg">L∞ 范数（L-infinity Norm）</span></div>
<span displaypfx="" class="mathjax-container">\[\|\mathbf{x}\|_\infty=\max_{i}|x_i|\]</span>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(3,0,-1,0)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_\infty=3\)</span>。它度量的是“最大坐标幅度”。</p>
<p>在 AI 里，<span displaypfx="inline-" class="mathjax-container">\(L_\infty\)</span> 最常与鲁棒性相关：对抗样本（Adversarial Examples）中的 <span displaypfx="inline-" class="mathjax-container">\(L_\infty\)</span> 约束表示“每个像素的改动幅度不超过 <span displaypfx="inline-" class="mathjax-container">\(\epsilon\)</span>”；一些鲁棒优化与最坏情况界也会用 <span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_\infty\)</span> 表达最大误差。</p>
<div class="blog_h3"><span class="graybg">距离与正则化</span></div>
<p>由范数诱导的距离（Norm-induced Distance）写作 <span displaypfx="inline-" class="mathjax-container">\(d(\mathbf{x},\mathbf{y})=\|\mathbf{x}-\mathbf{y}\|\)</span>。常见对应关系：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(L_2\)</span>：欧氏距离（Euclidean Distance），<span displaypfx="inline-" class="mathjax-container">\(d_2(\mathbf{x},\mathbf{y})=\|\mathbf{x}-\mathbf{y}\|_2=\sqrt{\sum_{i=1}^{d}(x_i-y_i)^2}\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(L_1\)</span>：曼哈顿距离（Manhattan Distance），<span displaypfx="inline-" class="mathjax-container">\(d_1(\mathbf{x},\mathbf{y})=\|\mathbf{x}-\mathbf{y}\|_1=\sum_{i=1}^{d}|x_i-y_i|\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(L_\infty\)</span>：切比雪夫距离（Chebyshev Distance），<span displaypfx="inline-" class="mathjax-container">\(d_\infty(\mathbf{x},\mathbf{y})=\|\mathbf{x}-\mathbf{y}\|_\infty=\max_{i}|x_i-y_i|\)</span>。它度量的是“最坏维度”的偏差：例如 <span displaypfx="inline-" class="mathjax-container">\(d_\infty(\mathbf{x},\mathbf{y})\le \epsilon \Leftrightarrow \forall i,\ |x_i-y_i|\le \epsilon\)</span>，即每一维的误差都被同一个上界约束。直觉上，如果一次操作允许同时修改所有坐标、且每步每个坐标最多改 1，那么从 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 变到 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 的最少步数就是 <span displaypfx="inline-" class="mathjax-container">\(\max_i|x_i-y_i|\)</span>（更一般地，每步上限为 <span displaypfx="inline-" class="mathjax-container">\(\epsilon\)</span> 时步数为 <span displaypfx="inline-" class="mathjax-container">\(d_\infty(\mathbf{x},\mathbf{y})/\epsilon\)</span> 的向上取整）。</li>
</ul>
<p>关于 <span displaypfx="inline-" class="mathjax-container">\(L_0\)</span>：常见写法是 <span displaypfx="inline-" class="mathjax-container">\(d_0(\mathbf{x},\mathbf{y})=\|\mathbf{x}-\mathbf{y}\|_0=\#\{i\mid x_i\ne y_i\}\)</span>，它统计两向量在多少个坐标上不相等。本质上这是逐坐标“相等/不相等”的计数度量；当取值来自离散集合时，它对应哈明距离（Hamming Distance）。但 <span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_0\)</span> 严格来说并非范数，因此 <span displaypfx="inline-" class="mathjax-container">\(d_0\)</span> 不属于“由范数诱导”的距离家族。</p>
<p>在学习目标中，正则化通常写成：</p>
<span displaypfx="" class="mathjax-container">\[\min_{\theta}\ \frac{1}{m}\sum_{i=1}^{m}\ell\!\left(f_{\theta}(x^{(i)}),y^{(i)}\right)+\lambda\Omega(\theta)\]</span>
<p>式中各成分含义如下：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>：模型参数（Parameters），优化的对象。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(m\)</span>：训练样本数（Number of Samples）。</li>
<li><span displaypfx="inline-" class="mathjax-container">\((x^{(i)},y^{(i)})\)</span>：第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个样本与标签。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(f_{\theta}(x^{(i)})\)</span>：模型对第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个样本的预测。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\ell(\cdot,\cdot)\)</span>：单样本损失函数（Per-sample Loss），衡量预测与标签偏差。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{m}\sum_{i=1}^{m}\ell(\cdot)\)</span>：经验风险（Empirical Risk），即平均训练误差。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\Omega(\theta)\)</span>：正则项（Regularizer），约束参数复杂度。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span>：正则化系数（Regularization Strength），平衡“拟合训练数据”与“控制模型复杂度”。</li>
</ul>
<p>常见的 <span displaypfx="inline-" class="mathjax-container">\(\Omega(\theta)\)</span> 包括 <span displaypfx="inline-" class="mathjax-container">\(\|\theta\|_1\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\|\theta\|_2^2\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\|\theta\|_0\)</span>（稀疏性目标）与 <span displaypfx="inline-" class="mathjax-container">\(\|\theta\|_\infty\)</span>（最大幅度约束）。同一个思想也可写成“约束形式”（Constraint Form）：<span displaypfx="inline-" class="mathjax-container">\(\min_\theta \frac{1}{m}\sum_i \ell(\cdot)\ \text{s.t.}\ \Omega(\theta)\le c\)</span>。惩罚系数 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 与约束半径 <span displaypfx="inline-" class="mathjax-container">\(c\)</span> 在凸优化（Convex Optimization）里可通过对偶（Duality）联系起来。</p>
<div class="blog_h1"><span class="graybg">微积分</span></div>
<div class="blog_h2"><span class="graybg">极限与连续</span></div>
<div class="blog_h3"><span class="graybg">极限的定义</span></div>
<p>极限（Limit）回答的问题是：当输入“逼近”某个值时，函数输出“逼近”什么值。它关心的是趋势而非是否刚好取到该点。</p>
<span displaypfx="" class="mathjax-container">\[\lim_{x\to a}f(x)=L\]</span>
<p>严格定义（<span displaypfx="inline-" class="mathjax-container">\(\varepsilon-\delta\)</span> 定义）可写为：</p>
<span displaypfx="" class="mathjax-container">\[\forall \varepsilon \gt 0,\ \exists \delta \gt 0,\ \text{s.t.}\ 0 \lt |x-a| \lt \delta \Rightarrow |f(x)-L| \lt \varepsilon\]</span>
<p>工程上可把它理解为：把输入控制得足够近，输出误差就能被压到任意小。</p>
<p>在 AI 里，极限直觉用于理解“收敛（Convergence）”：例如训练步长变小后，参数更新是否趋于稳定；以及损失函数在某点附近是否可被低阶展开近似。</p>
<div class="blog_h3"><span class="graybg">连续性</span></div>
<p>连续（Continuity）可理解为“函数图像没有跳断”。在点 <span displaypfx="inline-" class="mathjax-container">\(a\)</span> 处连续的三个条件是：</p>
<ol>
<li><span displaypfx="inline-" class="mathjax-container">\(f(a)\)</span> 有定义；</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\lim_{x\to a}f(x)\)</span> 存在；</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\lim_{x\to a}f(x)=f(a)\)</span>。</li>
</ol>
<p>连续是可导（Differentiable）的前提之一（但连续不必然可导）。例如 <span displaypfx="inline-" class="mathjax-container">\(|x|\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(x=0\)</span> 连续但不可导。</p>
<p>在优化里，连续性保证“小步更新不会导致目标突变”，这也是学习率（Learning Rate）可调与训练可控的基础假设之一。</p>
<div class="blog_h3"><span class="graybg">无穷小与无穷大</span></div>
<p>无穷小（Infinitesimal）描述“趋近于 0 的量”，无穷大（Infinity）描述“无界增长”。在推导里常通过渐近记号（Asymptotic Notation）表达量级关系：</p>
<p>这里的 <span displaypfx="inline-" class="mathjax-container">\(o\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(O\)</span> 核心是两种记号：小 <span displaypfx="inline-" class="mathjax-container">\(o\)</span>（little-o）表示“严格更小一个量级”，大 <span displaypfx="inline-" class="mathjax-container">\(O\)</span>（big-O）表示“至多同量级的上界”。</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(f(x)=o(g(x))\)</span>：当 <span displaypfx="inline-" class="mathjax-container">\(x\to a\)</span> 时 <span displaypfx="inline-" class="mathjax-container">\(f/g\to 0\)</span>（高阶小量，增长/衰减速度严格慢于 <span displaypfx="inline-" class="mathjax-container">\(g\)</span>）。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(f(x)=O(g(x))\)</span>：存在常数 <span displaypfx="inline-" class="mathjax-container">\(C\)</span> 使 <span displaypfx="inline-" class="mathjax-container">\(|f(x)|\le C|g(x)|\)</span>（同阶或更小的上界）。</li>
</ul>
<p>例如一阶 Taylor 展开里的 <span displaypfx="inline-" class="mathjax-container">\(o(\Delta x)\)</span> 表示“比 <span displaypfx="inline-" class="mathjax-container">\(\Delta x\)</span> 更小得多”的误差项。算法分析中的时间复杂度 <span displaypfx="inline-" class="mathjax-container">\(O(Nd)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(O(N^2)\)</span> 也属于同一套量级语言。</p>
<div class="blog_h2"><span class="graybg">常见求导法则与公式</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">法则</td>
<td style="text-align: center;">公式</td>
<td style="text-align: center;">条件</td>
</tr>
</thead>
<tbody>
<tr>
<td>常数倍法则</td>
<td><span displaypfx="inline-" class="mathjax-container">\((Cu)' = C u'\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(C\)</span> 为常数</td>
</tr>
<tr>
<td>和差法则</td>
<td><span displaypfx="inline-" class="mathjax-container">\((u \pm v)' = u' \pm v'\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(u,v\)</span> 可导</td>
</tr>
<tr>
<td>乘法法则</td>
<td><span displaypfx="inline-" class="mathjax-container">\((uv)' = u'v + uv'\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(u,v\)</span> 可导</td>
</tr>
<tr>
<td>除法法则</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\left(\frac{u}{v}\right)'=\frac{u'v-uv'}{v^2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(u,v\)</span> 可导，且 <span displaypfx="inline-" class="mathjax-container">\(v \ne 0\)</span></td>
</tr>
<tr>
<td>链式法则</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{d}{dx}f(g(x)) = f'(g(x))g'(x)\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(f,g\)</span> 可导</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">常见函数导数</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">函数 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span></td>
<td style="text-align: center;">导数 <span displaypfx="inline-" class="mathjax-container">\(f'(x)\)</span></td>
<td style="text-align: center;">备注/条件</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(c\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(0\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(c\)</span> 为常数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x^n\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(n x^{n-1}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(n\)</span> 为常数；非整数 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 时需注意实数域定义域</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sqrt{x}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{2\sqrt{x}}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(e^x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^x\)</span></td>
<td>自然指数（Natural Exponential）</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(a^x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a^x\ln a\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(a&gt;0,a\ne 1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{x}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\log_a x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{x\ln a}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x&gt;0,\ a&gt;0,\ a\ne 1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\cos x\)</span></td>
<td> </td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\cos x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(-\sin x\)</span></td>
<td> </td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\tan x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sec^2 x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\cos x\ne 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(|x|\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{sign}(x)\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x&gt;0\)</span> 时导数为 <span displaypfx="inline-" class="mathjax-container">\(1\)</span></p>
<p><span displaypfx="inline-" class="mathjax-container">\(x&lt;0\)</span> 时导数为 <span displaypfx="inline-" class="mathjax-container">\(-1\)</span></p>
<p>在 <span displaypfx="inline-" class="mathjax-container">\(x=0\)</span> 不可导（优化中常用次梯度 <span displaypfx="inline-" class="mathjax-container">\(g\in[-1,1]\)</span>）</p>
</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">导数（Derivative）</span></div>
<p>导数是点 <span displaypfx="inline-" class="mathjax-container">\(x_0\)</span> 处的瞬时变化率（Instantaneous Rate of Change）：</p>
<span displaypfx="" class="mathjax-container">\[f'(x_0)=\lim_{\Delta x\to 0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x}\]</span>
<p><span displaypfx="inline-" class="mathjax-container">\(x_0\)</span> 核心是定义域中的固定位置；趋近于 0 的小量是 <span displaypfx="inline-" class="mathjax-container">\(\Delta x\)</span>（或记作 <span displaypfx="inline-" class="mathjax-container">\(dx\)</span>）。</p>
<p>一阶展开把导数解释为“线性项的系数”：当 <span displaypfx="inline-" class="mathjax-container">\(\Delta x\to 0\)</span> 时，</p>
<span displaypfx="" class="mathjax-container">\[f(x_0+\Delta x)=f(x_0)+f'(x_0)\Delta x+o(\Delta x)\]</span>
<p>可按“等于三项相加”理解：左边 <span displaypfx="inline-" class="mathjax-container">\(f(x_0+\Delta x)\)</span> 是扰动后的真实函数值；右边第一项 <span displaypfx="inline-" class="mathjax-container">\(f(x_0)\)</span> 是基点函数值，第二项 <span displaypfx="inline-" class="mathjax-container">\(f'(x_0)\Delta x\)</span> 是一阶线性近似，第三项 <span displaypfx="inline-" class="mathjax-container">\(o(\Delta x)\)</span> 是比 <span displaypfx="inline-" class="mathjax-container">\(\Delta x\)</span> 更小的高阶余项（High-order Remainder）。</p>
<div class="blog_h2"><span class="graybg">中值定理（Mean Value Theorems）</span></div>
<p>中值定理（Mean Value Theorems）是一组把“区间上的平均变化”与“某一点的瞬时变化率”连接起来的核心定理。它们在形式上不同，但共同结构是：在闭区间连续、在开区间可导，进而保证存在某个中间点 <span displaypfx="inline-" class="mathjax-container">\(c\in(a,b)\)</span> 使得斜率关系成立。</p>
<div class="blog_h3"><span class="graybg">罗尔中值定理</span></div>
<p>设 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\([a,b]\)</span> 上连续、在 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 上可导，且 <span displaypfx="inline-" class="mathjax-container">\(f(a)=f(b)\)</span>。则存在 <span displaypfx="inline-" class="mathjax-container">\(c\in(a,b)\)</span> 使</p>
<span displaypfx="" class="mathjax-container">\[f'(c)=0\]</span>
<p>几何直觉：若曲线两端高度相同，那么中间至少有一点的切线是水平的。</p>
<div class="blog_h3"><span class="graybg">拉格朗日中值定理</span></div>
<p>设 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\([a,b]\)</span> 上连续、在 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 上可导。则存在 <span displaypfx="inline-" class="mathjax-container">\(c\in(a,b)\)</span> 使</p>
<span displaypfx="" class="mathjax-container">\[f'(c)=\frac{f(b)-f(a)}{b-a}\]</span>
<p>几何直觉：区间割线斜率（平均变化率）等于某个点的切线斜率（瞬时变化率）。</p>
<div class="blog_h3"><span class="graybg">柯西中值定理</span></div>
<p>设 <span displaypfx="inline-" class="mathjax-container">\(f,g\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\([a,b]\)</span> 上连续、在 <span displaypfx="inline-" class="mathjax-container">\((a,b)\)</span> 上可导。则存在 <span displaypfx="inline-" class="mathjax-container">\(c\in(a,b)\)</span> 使</p>
<span displaypfx="" class="mathjax-container">\[(f(b)-f(a))g'(c)=(g(b)-g(a))f'(c)\]</span>
<p>当分母不为 0 时，可写成比值形式：</p>
<span displaypfx="" class="mathjax-container">\[\frac{f'(c)}{g'(c)}=\frac{f(b)-f(a)}{g(b)-g(a)}\]</span>
<p>它把“单函数斜率比较”推广为“两个函数变化率的比较”，是洛必达法则（L'Hospital's Rule）证明链中的关键步骤。</p>
<div class="blog_h3"><span class="graybg">三类中值定理的区别</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">定理</td>
<td style="text-align: center;">涉及函数</td>
<td style="text-align: center;">额外条件</td>
<td style="text-align: center; width: 40%;">结论形式</td>
<td style="text-align: center;">关系</td>
</tr>
</thead>
<tbody>
<tr>
<td>罗尔中值定理</td>
<td>1 个函数 <span displaypfx="inline-" class="mathjax-container">\(f\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(f(a)=f(b)\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(f'(c)=0\)</span></td>
<td>拉格朗日定理的特殊情形</td>
</tr>
<tr>
<td>拉格朗日中值定理</td>
<td>1 个函数 <span displaypfx="inline-" class="mathjax-container">\(f\)</span></td>
<td>无额外端点相等条件</td>
<td><span displaypfx="inline-" class="mathjax-container">\(f'(c)=\frac{f(b)-f(a)}{b-a}\)</span></td>
<td>柯西定理取 <span displaypfx="inline-" class="mathjax-container">\(g(x)=x\)</span> 的特例</td>
</tr>
<tr>
<td>柯西中值定理</td>
<td>2 个函数 <span displaypfx="inline-" class="mathjax-container">\(f,g\)</span></td>
<td>两个函数都满足连续+可导</td>
<td><span displaypfx="inline-" class="mathjax-container">\((f(b)-f(a))g'(c)=(g(b)-g(a))f'(c)\)</span></td>
<td>三者中最一般形式</td>
</tr>
</tbody>
</table>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/mean-value-theorems.png"><img class="alignnone size-full wp-image-40785" src="https://blog.gmem.cc/wp-content/uploads/2026/03/mean-value-theorems.png" alt="mean-value-theorems" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">中值定理和AI</span></div>
<p>在 AI 系统中，中值定理主要作为理论工具出现：工程代码很少直接“调用定理”，但大量优化、稳定性与误差分析都在使用它的核心变形，即把“两个点的函数值差”转写为“某个中间点的导数（梯度）信息”。</p>
<ul>
<li>优化收敛分析（Optimization Convergence）：训练中常关心一步更新后损失变化 <span displaypfx="inline-" class="mathjax-container">\(L(\theta+\Delta)-L(\theta)\)</span>。中值定理把它连接到中间点的梯度，进而用于学习率条件与下降性证明。</li>
<li>Lipschitz 界与鲁棒性（Lipschitz Bound &amp; Robustness）：中值定理给出“输入小扰动导致输出变化”的上界形式。若梯度有界，则输出变化可控；这正是对抗鲁棒性分析和梯度惩罚（Gradient Penalty）类方法的数学基础之一。</li>
<li>有限差分与梯度估计（Finite Difference / Gradient Estimation）：割线斜率与切线斜率之间的关系来自拉格朗日中值定理，是数值优化里差分近似、线搜索（Line Search）和误差估计的核心依据。</li>
</ul>
<p>从“纯数学”到“AI 实践”的桥梁可以一句话概括：<span style="background-color: #c0c0c0;">中值定理把宏观变化量（函数值差）变成可优化的微观信息（导数/梯度）</span>。</p>
<div class="blog_h2"><span class="graybg">偏导数（Partial Derivative）</span></div>
<p>对多元函数 <span displaypfx="inline-" class="mathjax-container">\(f:\mathbb{R}^n\to\mathbb{R}\)</span>，偏导数把“只沿某一坐标轴方向的导数”形式化：固定其余变量，只让第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个变量变化。先写成最直接的极限定义：</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial f}{\partial x_i}(x_0)=\lim_{h\to 0}\frac{f(x_{0,1},\dots,x_{0,i-1},x_{0,i}+h,x_{0,i+1},\dots,x_{0,n})-f(x_0)}{h}\]</span>
<p>这里的 <span displaypfx="inline-" class="mathjax-container">\(h\)</span> 是“第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个变量的微小增量”（Increment）：只加在第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个坐标上，其他坐标保持不变。</p>
<p>在线性代数记号下，上式等价写成（更紧凑）：令 <span displaypfx="inline-" class="mathjax-container">\(e_i\)</span> 为第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个标准基向量（Standard Basis Vector），则</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial f}{\partial x_i}(x_0)=\lim_{h\to 0}\frac{f(x_0+h e_i)-f(x_0)}{h}\]</span>
<p>更常用的导数视角（计算视角）是：<span style="background-color: #c0c0c0;">把其余变量暂时当常数，把目标变量当自变量，直接套一元求导法则</span>。极限定义负责“定义正确性”，日常计算通常用求导规则完成。</p>
<p>例如 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=x^2y\)</span>：对 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 求偏导时把 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 视作常数，得 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial f}{\partial x}=2xy\)</span>；对 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 求偏导时把 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 视作常数，得 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial f}{\partial y}=x^2\)</span>。</p>
<p>切换为极限视角，令 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=x^2y\)</span>，在点 <span displaypfx="inline-" class="mathjax-container">\((1,2)\)</span>。</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial f}{\partial x}(1,2)=\lim_{h\to 0}\frac{f(1+h,2)-f(1,2)}{h}\]</span>
<span displaypfx="" class="mathjax-container">\[=\lim_{h\to 0}\frac{2(1+h)^2-2}{h}\]</span>
<span displaypfx="" class="mathjax-container">\[=\lim_{h\to 0}(4+2h)=4\]</span>
<span displaypfx="" class="mathjax-container">\[\frac{\partial f}{\partial y}(1,2)=\lim_{h\to 0}\frac{f(1,2+h)-f(1,2)}{h}\]</span>
<span displaypfx="" class="mathjax-container">\[=\lim_{h\to 0}\frac{(2+h)-2}{h}=1\]</span>
<p>可以看到：求 <span displaypfx="inline-" class="mathjax-container">\(\partial f/\partial x\)</span> 时把 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 当常数；求 <span displaypfx="inline-" class="mathjax-container">\(\partial f/\partial y\)</span> 时把 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 当常数。这正是“其余变量固定”的具体计算含义。</p>
<p>梯度（Gradient）就是把所有偏导数按坐标收集成向量： <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x)=(\partial f/\partial x_1,\dots,\partial f/\partial x_n)^\top\)</span>。</p>
<div class="blog_h2"><span class="graybg">微分（Differential）</span></div>
<p>在一元情形中，微分是“把函数增量线性化”的记号：给定一个小增量 <span displaypfx="inline-" class="mathjax-container">\(dx\)</span>，定义</p>
<span displaypfx="" class="mathjax-container">\[df\big|_{x_0}=f'(x_0)\,dx\]</span>
<p>此时真实增量满足 <span displaypfx="inline-" class="mathjax-container">\(\Delta f = df + o(dx)\)</span>。给定 <span displaypfx="inline-" class="mathjax-container">\(dx\)</span> 后， <span displaypfx="inline-" class="mathjax-container">\(df\)</span> 才对应一个确定数值。</p>
<p>例：若 <span displaypfx="inline-" class="mathjax-container">\(f(x)=x^2\)</span>，在 <span displaypfx="inline-" class="mathjax-container">\(x_0=3\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(dx=0.1\)</span> 时， <span displaypfx="inline-" class="mathjax-container">\(df=2x_0dx=0.6\)</span>，而 <span displaypfx="inline-" class="mathjax-container">\(\Delta f=f(3.1)-f(3)=0.61\)</span>。微分给出一阶近似，误差来自高阶项。</p>
<div class="blog_h2"><span class="graybg">全微分（Total Differential）</span></div>
<p>对多元函数 <span displaypfx="inline-" class="mathjax-container">\(f(x_1,\dots,x_n)\)</span>，全微分把“多方向小扰动下的一阶线性响应”写成：</p>
<span displaypfx="" class="mathjax-container">\[df=\sum_{i=1}^n \frac{\partial f}{\partial x_i}dx_i\]</span>
<p>令 <span displaypfx="inline-" class="mathjax-container">\(d\mathbf{x}=(dx_1,\dots,dx_n)^\top\)</span>，则向量形式是：</p>
<span displaypfx="" class="mathjax-container">\[df=(\nabla f(x))^\top d\mathbf{x}\]</span>
<p>若进一步把扰动分解为“方向 + 步长”： <span displaypfx="inline-" class="mathjax-container">\(d\mathbf{x}=\mathbf{u}\,ds\)</span>（<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{u}\|_2=1\)</span>），则</p>
<span displaypfx="" class="mathjax-container">\[\frac{df}{ds}=\nabla f(x)\cdot \mathbf{u}\]</span>
<p>右侧就是方向导数（Directional Derivative）：全微分给出任意小位移的一阶近似，方向导数则把位移约束在单位方向并除去步长。</p>
<p>例：令 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=x^2y\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial f}{\partial x}=2xy\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\frac{\partial f}{\partial y}=x^2\)</span>。在点 <span displaypfx="inline-" class="mathjax-container">\((x_0,y_0)=(1,2)\)</span>，若 <span displaypfx="inline-" class="mathjax-container">\(dx=0.1\)</span>、<span displaypfx="inline-" class="mathjax-container">\(dy=-0.05\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(df=2xy\,dx+x^2dy=2\cdot1\cdot2\cdot0.1+1\cdot(-0.05)=0.35\)</span>，给出 <span displaypfx="inline-" class="mathjax-container">\(\Delta f\)</span> 的一阶近似。</p>
<div class="blog_h2"><span class="graybg">向量微积分</span></div>
<p>Nabla 算子（Nabla Operator）记作 <span displaypfx="inline-" class="mathjax-container">\(\nabla\)</span>，本质上是把偏导算子按坐标排列成的“向量形式”：</p>
<span displaypfx="" class="mathjax-container">\[\nabla=\left(\frac{\partial}{\partial x_1},\dots,\frac{\partial}{\partial x_n}\right)^\top\]</span>
<p>它本身核心是一个算子（Operator）。作用在标量场上得到梯度（Gradient）；与向量场点乘得到散度（Divergence）；与向量场叉乘得到旋度（Curl）；对标量场再取散度得到拉普拉斯（Laplacian）。</p>
<p>符号 <span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|\)</span>（双竖线）表示范数（Norm）。因此 <span displaypfx="inline-" class="mathjax-container">\(\|\nabla f(x)\|\)</span> 是梯度向量的长度；而 <span displaypfx="inline-" class="mathjax-container">\(\|\nabla\|\)</span> 作为“算子范数”在工程推导中很少直接使用，通常需要明确它作用的函数空间与范数定义。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/nabla.jpg"><img class="alignnone size-full wp-image-40609" src="https://blog.gmem.cc/wp-content/uploads/2026/03/nabla.jpg" alt="nabla" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">梯度</span></div>
<p>梯度（Gradient）把标量函数 <span displaypfx="inline-" class="mathjax-container">\(f:\mathbb{R}^n\to\mathbb{R}\)</span> 的局部变化率组织成向量：</p>
<span displaypfx="" class="mathjax-container">\[\nabla f(x)=\left(\frac{\partial f}{\partial x_1},\dots,\frac{\partial f}{\partial x_n}\right)^\top\]</span>
<p>它指向函数增长最快的方向（Steepest Ascent Direction），模长刻画该方向上的最大斜率。在优化里，梯度下降（Gradient Descent）沿 <span displaypfx="inline-" class="mathjax-container">\(-\nabla f\)</span> 走，是因为这是一阶近似下最快下降方向。</p>
<p>例： <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=x^2+2y^2\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\nabla f=(2x,4y)\)</span>，在点 <span displaypfx="inline-" class="mathjax-container">\((1,1)\)</span> 处梯度为 <span displaypfx="inline-" class="mathjax-container">\((2,4)\)</span>，表示沿 y 方向的增长更陡。</p>
<p>方向导数（Directional Derivative）把“沿某个方向的变化率”写成点积：若 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\)</span> 是单位方向向量，则</p>
<span displaypfx="" class="mathjax-container">\[D_{\mathbf{u}}f(x)=\nabla f(x)\cdot \mathbf{u}\]</span>
<p>符号先约定： <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 是当前点， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{u}\)</span> 是单位方向（<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{u}\|_2=1\)</span>）， <span displaypfx="inline-" class="mathjax-container">\(\varepsilon\)</span> 是沿该方向的步长（可正可负的小实数）。方向导数定义为</p>
<span displaypfx="" class="mathjax-container">\[D_{\mathbf{u}}f(x)=\lim_{\varepsilon\to 0}\frac{f(x+\varepsilon\mathbf{u})-f(x)}{\varepsilon}\]</span>
<p>对 <span displaypfx="inline-" class="mathjax-container">\(f(x+\varepsilon\mathbf{u})\)</span> 做一阶 Taylor 展开：</p>
<span displaypfx="" class="mathjax-container">\[f(x+\varepsilon\mathbf{u})=f(x)+\varepsilon\,\nabla f(x)\cdot\mathbf{u}+o(\varepsilon)\]</span>
<p>代回定义式：</p>
<span displaypfx="" class="mathjax-container">\[\frac{f(x+\varepsilon\mathbf{u})-f(x)}{\varepsilon}\]</span>
<span displaypfx="" class="mathjax-container">\[=\nabla f(x)\cdot\mathbf{u}+\frac{o(\varepsilon)}{\varepsilon}\]</span>
<p>令 <span displaypfx="inline-" class="mathjax-container">\(\varepsilon\to 0\)</span>，由于 <span displaypfx="inline-" class="mathjax-container">\(o(\varepsilon)/\varepsilon\to 0\)</span>，得到 <span displaypfx="inline-" class="mathjax-container">\(D_{\mathbf{u}}f(x)=\nabla f(x)\cdot\mathbf{u}\)</span>。</p>
<div class="blog_h3"><span class="graybg">散度</span></div>
<p>场（Field）是“把空间中每个点映射到一个量”的函数。标量场（Scalar Field）<span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span> 在每个点输出一个标量；向量场（Vector Field）<span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}(x)\)</span> 在每个点输出一个向量。梯度作用在标量场上，散度/旋度作用在向量场上。</p>
<p>散度（Divergence）作用在向量场 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}=(F_1,\dots,F_n)^\top:\mathbb{R}^n\to\mathbb{R}^n\)</span> 上。这里先把两个术语说清楚：</p>
<span displaypfx="" class="mathjax-container">\[J_{\mathbf{F}}(x)=\left[\frac{\partial F_i}{\partial x_j}\right]_{i,j=1}^n\]</span>
<p>上式是雅可比矩阵（Jacobian）：第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 行第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 列表示 <span displaypfx="inline-" class="mathjax-container">\(F_i\)</span> 对 <span displaypfx="inline-" class="mathjax-container">\(x_j\)</span> 的偏导。迹（Trace）是矩阵对角线元素之和，因此</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{tr}(J_{\mathbf{F}})=\sum_{i=1}^n \frac{\partial F_i}{\partial x_i}\]</span>
<p>而散度按定义正是这条和式，所以“散度 = Jacobian 的迹”：</p>
<span displaypfx="" class="mathjax-container">\[\nabla\cdot \mathbf{F}(x)=\mathrm{tr}(J_{\mathbf{F}}(x))=\sum_{i=1}^n \frac{\partial F_i}{\partial x_i}\]</span>
<p>几何/物理直觉：把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}\)</span> 想成“流体速度场（Velocity Field）”，散度衡量一个点附近是否像“源（Source）/汇（Sink）”——单位体积的净流出率。散度为正表示净流出，为负表示净流入。</p>
<p>例：二维场 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}(x,y)=(x,y)\)</span> 的 Jacobian 是 <span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix}1&amp;0\\0&amp;1\end{bmatrix}\)</span>，其迹为 <span displaypfx="inline-" class="mathjax-container">\(1+1=2\)</span>，所以散度也等于 2，在任意点都表现为均匀“发散”。</p>
<div class="blog_h3"><span class="graybg">旋度</span></div>
<p>旋度（Curl）衡量向量场的局部旋转（Local Rotation）。在三维中：</p>
<span displaypfx="" class="mathjax-container">\[\nabla\times \mathbf{F}=\left(\frac{\partial F_3}{\partial y}-\frac{\partial F_2}{\partial z},\ \frac{\partial F_1}{\partial z}-\frac{\partial F_3}{\partial x},\ \frac{\partial F_2}{\partial x}-\frac{\partial F_1}{\partial y}\right)\]</span>
<p>直觉上，可把它理解为“放一个很小的桨轮（Paddle Wheel）在该点附近，桨轮是否会被带着转”。保守场（Conservative Field）满足 <span displaypfx="inline-" class="mathjax-container">\(\nabla\times\mathbf{F}=\mathbf{0}\)</span>，这与“路径无关”/“存在势函数”是等价刻画。</p>
<p>例：二维旋转场 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}(x,y)=(-y,x,0)\)</span> 的旋度为 <span displaypfx="inline-" class="mathjax-container">\((0,0,2)\)</span>，表示绕 z 轴的均匀旋转趋势。</p>
<p>拉普拉斯算子（Laplacian）作用在标量场上，定义为梯度的散度：</p>
<span displaypfx="" class="mathjax-container">\[\nabla^2 f=\nabla\cdot(\nabla f)=\sum_{i=1}^n \frac{\partial^2 f}{\partial x_i^2}\]</span>
<p>它常出现在扩散（Diffusion）与平滑（Smoothing）问题中，也常被用作“曲率/粗糙度”的度量。例： <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=x^2+y^2\)</span> 则 <span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f=2+2=4\)</span>。</p>
<div class="blog_h2"><span class="graybg">Jacobian 矩阵</span></div>
<p>当函数的输出从一个标量转向一个向量时，梯度这个概念就不够用了。此时需要把“每个输出分量对每个输入变量的一阶变化率”统一收集起来，这个对象就是 Jacobian 矩阵（Jacobian Matrix）。它是一阶导数在向量值函数上的自然推广，也是 Hessian 的直接前置概念。</p>
<p>设向量值函数</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{F}:\mathbb{R}^n\to\mathbb{R}^m,\qquad \mathbf{F}(\mathbf{x})=\begin{bmatrix}F_1(\mathbf{x})\\ \vdots\\ F_m(\mathbf{x})\end{bmatrix}\]</span>
<p>其中输入 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x_1,\dots,x_n)^\top\)</span>，输出 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}(\mathbf{x})\)</span> 有 <span displaypfx="inline-" class="mathjax-container">\(m\)</span> 个分量。Jacobian 矩阵定义为：</p>
<span displaypfx="" class="mathjax-container">\[J_{\mathbf{F}}(\mathbf{x})=\left[\frac{\partial F_i}{\partial x_j}(\mathbf{x})\right]_{i=1,\dots,m;\,j=1,\dots,n}\]</span>
<p>按矩阵展开，就是一个 <span displaypfx="inline-" class="mathjax-container">\(m\times n\)</span> 矩阵：</p>
<span displaypfx="" class="mathjax-container">\[J_{\mathbf{F}}(\mathbf{x})= \begin{bmatrix} \frac{\partial F_1}{\partial x_1} &amp; \frac{\partial F_1}{\partial x_2} &amp; \cdots &amp; \frac{\partial F_1}{\partial x_n}\\ \frac{\partial F_2}{\partial x_1} &amp; \frac{\partial F_2}{\partial x_2} &amp; \cdots &amp; \frac{\partial F_2}{\partial x_n}\\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots\\ \frac{\partial F_m}{\partial x_1} &amp; \frac{\partial F_m}{\partial x_2} &amp; \cdots &amp; \frac{\partial F_m}{\partial x_n} \end{bmatrix}\]</span>
<p>这里第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 行第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 列的元素 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial F_i}{\partial x_j}\)</span> 表示：第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 个输入变量发生微小变化时，第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个输出分量会怎样一阶变化。按矩阵读法，<span style="background-color: #c0c0c0;">行对应输出分量，列对应输入变量</span>，因此 Jacobian 本质上是一张局部灵敏度表（Local Sensitivity Table）。</p>
<p>它描述的核心是函数在某个点附近的局部线性映射：输入空间里的一个小扰动向量 <span displaypfx="inline-" class="mathjax-container">\(d\mathbf{x}\)</span> 经过 Jacobian 作用后，变成输出空间中的一阶近似扰动 <span displaypfx="inline-" class="mathjax-container">\(d\mathbf{F}\)</span>。因此，Jacobian 就是“该点附近最能代表原函数的一阶线性算子”。</p>
<p>它与全微分的关系最直接。若在点 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 附近加入一个小扰动 <span displaypfx="inline-" class="mathjax-container">\(d\mathbf{x}\)</span>，则输出的一阶变化满足：</p>
<span displaypfx="" class="mathjax-container">\[d\mathbf{F}\approx J_{\mathbf{F}}(\mathbf{x})\,d\mathbf{x}\]</span>
<p>这条式子就是向量值函数的一阶线性化。Jacobian 在局部扮演的角色，类似于一元函数里的导数：它给出“最好的线性近似”。若输出是一维，即 <span displaypfx="inline-" class="mathjax-container">\(m=1\)</span>，Jacobian 就退化成一个 <span displaypfx="inline-" class="mathjax-container">\(1\times n\)</span> 的行向量；它与梯度本质上包含同一组偏导数，只是排布约定可能不同。</p>
<p>一个二维到二维的例子最容易看清。设</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{F}(x,y)=\begin{bmatrix}x^2y\\ x+y^2\end{bmatrix}\]</span>
<p>则第一行来自分量函数 <span displaypfx="inline-" class="mathjax-container">\(F_1(x,y)=x^2y\)</span>，第二行来自 <span displaypfx="inline-" class="mathjax-container">\(F_2(x,y)=x+y^2\)</span>。逐项求偏导可得：</p>
<span displaypfx="" class="mathjax-container">\[J_{\mathbf{F}}(x,y)= \begin{bmatrix} 2xy &amp; x^2\\ 1 &amp; 2y \end{bmatrix}\]</span>
<p>例如在点 <span displaypfx="inline-" class="mathjax-container">\((1,2)\)</span>，Jacobian 为</p>
<span displaypfx="" class="mathjax-container">\[J_{\mathbf{F}}(1,2)= \begin{bmatrix} 4 &amp; 1\\ 1 &amp; 4 \end{bmatrix}\]</span>
<p>这表示：在该点附近，若输入发生微小变化 <span displaypfx="inline-" class="mathjax-container">\((dx,dy)^\top\)</span>，则输出变化近似为</p>
<span displaypfx="" class="mathjax-container">\[d\mathbf{F}\approx \begin{bmatrix} 4 &amp; 1\\ 1 &amp; 4 \end{bmatrix} \begin{bmatrix} dx\\ dy \end{bmatrix}\]</span>
<p>第一行说明输出第一分量大致按 <span displaypfx="inline-" class="mathjax-container">\(4dx+dy\)</span> 变化，第二行说明输出第二分量大致按 <span displaypfx="inline-" class="mathjax-container">\(dx+4dy\)</span> 变化。Jacobian 因而可以被理解为局部灵敏度矩阵（Sensitivity Matrix）。</p>
<p>对标量函数 <span displaypfx="inline-" class="mathjax-container">\(f:\mathbb{R}^n\to\mathbb{R}\)</span>，梯度 <span displaypfx="inline-" class="mathjax-container">\(\nabla f:\mathbb{R}^n\to\mathbb{R}^n\)</span> 本身就是一个向量值函数，因此 Hessian 可以直接看成梯度映射的 Jacobian：</p>
<span displaypfx="" class="mathjax-container">\[\nabla^2 f(\mathbf{x})=J_{\nabla f}(\mathbf{x})\]</span>
<p>这就是把 Jacobian 放在 Hessian 前面的原因：先理解“向量值函数的一阶导数如何组织成矩阵”，再看“标量函数的梯度再求一次导”，Hessian 的结构就不会显得突兀。</p>
<p>在机器学习中，Jacobian 最常出现在三类地方：</p>
<ol>
<li>反向传播（Backpropagation）：本质上是在链式法则（Chain Rule）下逐层组合这些局部 Jacobian。前一层输出的微小变化如何传到后一层，正是由对应层的 Jacobian 决定。</li>
<li>向量场分析：散度（Divergence）等于 Jacobian 的迹（Trace）。</li>
<li>生成模型、正则化与鲁棒性分析：常关心 Jacobian 的谱范数（Spectral Norm）或 Frobenius 范数，以度量局部放大效应。</li>
</ol>
<p>若输出维度和输入维度都很大，显式构造完整 Jacobian 也会很贵，因此工程上常直接计算 Jacobian-Vector Product 或 Vector-Jacobian Product，而非把整块矩阵完全展开。</p>
<p>在神经网络语境里，Jacobian 到底“针对激活值还是针对权重”，取决于谁被当作自变量。若研究层与层之间的信号传播，常写成 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial h^{(l+1)}}{\partial h^{(l)}}\)</span>，这时它针对的是激活值（Activation）或层表示；若研究模型输出对输入的敏感度，可写成 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial y}{\partial x}\)</span>；若研究输出对参数的敏感度，也可以写成 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial y}{\partial \theta}\)</span>。因此，Jacobian 的本质是“一个向量怎样对另一个向量发生一阶变化”，并不预先限定变量一定是激活值还是权重。</p>
<div class="blog_h2"><span class="graybg">Hessian 矩阵</span></div>
<p>梯度（Gradient）回答的是“函数沿各坐标方向的一阶变化率”；Hessian 矩阵（Hessian Matrix）进一步回答的是“这些一阶变化率本身又在怎样变化”。这一点可以直接从“梯度是一个向量值函数”展开出来。对标量函数 <span displaypfx="inline-" class="mathjax-container">\(f:\mathbb{R}^n\to\mathbb{R}\)</span>，梯度写成</p>
<span displaypfx="" class="mathjax-container">\[\nabla f(\mathbf{x})=\begin{bmatrix}\frac{\partial f}{\partial x_1}\\ \frac{\partial f}{\partial x_2}\\ \vdots\\ \frac{\partial f}{\partial x_n}\end{bmatrix}\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(\nabla f\)</span> 已经核心是把输入向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 映射为另一个向量的函数。因此可以像对任何向量值函数那样，对它再求一次 Jacobian：</p>
<span displaypfx="" class="mathjax-container">\[J_{\nabla f}(\mathbf{x})=\frac{\partial (\nabla f)}{\partial \mathbf{x}}\]</span>
<p>把梯度各分量逐项代进去，Jacobian 的第 <span displaypfx="inline-" class="mathjax-container">\((i,j)\)</span> 个元素就是“梯度第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个分量对输入第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 个变量的偏导数”：</p>
<span displaypfx="" class="mathjax-container">\[\big[J_{\nabla f}(\mathbf{x})\big]_{ij}=\frac{\partial}{\partial x_j}\left(\frac{\partial f}{\partial x_i}\right)=\frac{\partial^2 f}{\partial x_j\partial x_i}\]</span>
<p>于是整块矩阵就是</p>
<span displaypfx="" class="mathjax-container">\[J_{\nabla f}(\mathbf{x})=\begin{bmatrix}\frac{\partial^2 f}{\partial x_1\partial x_1} &amp; \frac{\partial^2 f}{\partial x_2\partial x_1} &amp; \cdots &amp; \frac{\partial^2 f}{\partial x_n\partial x_1}\\ \frac{\partial^2 f}{\partial x_1\partial x_2} &amp; \frac{\partial^2 f}{\partial x_2\partial x_2} &amp; \cdots &amp; \frac{\partial^2 f}{\partial x_n\partial x_2}\\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots\\ \frac{\partial^2 f}{\partial x_1\partial x_n} &amp; \frac{\partial^2 f}{\partial x_2\partial x_n} &amp; \cdots &amp; \frac{\partial^2 f}{\partial x_n\partial x_n}\end{bmatrix}\]</span>
<p>这正是 Hessian：</p>
<span displaypfx="" class="mathjax-container">\[\nabla^2 f(\mathbf{x})=J_{\nabla f}(\mathbf{x})\]</span>
<p>这个等式的含义很直接：Hessian 并非凭空引入的另一种矩阵，而就是“梯度这个向量场对输入的 Jacobian”。</p>
<p>直接从二阶导角度看，Hessian 是多元函数的二阶导数对象，用来描述局部曲率（Curvature）、凹凸性以及临界点附近的二阶形状。</p>
<p>设标量函数 <span displaypfx="inline-" class="mathjax-container">\(f:\mathbb{R}^n\to\mathbb{R}\)</span>，输入向量为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}=(x_1,\dots,x_n)^\top\)</span>。Hessian 矩阵记作 <span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f(\mathbf{x})\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(H_f(\mathbf{x})\)</span>，定义为：</p>
<span displaypfx="" class="mathjax-container">\[\nabla^2 f(\mathbf{x})=\left[\frac{\partial^2 f}{\partial x_i\partial x_j}(\mathbf{x})\right]_{i,j=1}^{n}\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 和 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 都从 <span displaypfx="inline-" class="mathjax-container">\(1\)</span> 遍历到 <span displaypfx="inline-" class="mathjax-container">\(n\)</span>，因此 Hessian 会收集所有变量对 <span displaypfx="inline-" class="mathjax-container">\((x_i,x_j)\)</span> 的二阶偏导。之所以自然形成一个 <span displaypfx="inline-" class="mathjax-container">\(n\times n\)</span> 的“全组合”矩阵，是因为一阶导数 <span displaypfx="inline-" class="mathjax-container">\(\nabla f\)</span> 本身已经有 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个分量；再对这 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个分量分别对 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个输入变量各求一次导，就得到 <span displaypfx="inline-" class="mathjax-container">\(n\times n\)</span> 个二阶偏导项。前面展开的 <span displaypfx="inline-" class="mathjax-container">\(J_{\nabla f}(\mathbf{x})\)</span> 就是这块矩阵，因此这里不再重复写一遍。</p>
<p>把梯度记为 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(\mathbf{x})=(g_1,\dots,g_n)^\top\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(g_i=\frac{\partial f}{\partial x_i}\)</span>，则 Hessian 的第 <span displaypfx="inline-" class="mathjax-container">\((i,j)\)</span> 个元素可以直接写成 <span displaypfx="inline-" class="mathjax-container">\(H_{ij}=\frac{\partial g_i}{\partial x_j}\)</span>。这个记号把它的意义说得很清楚：它衡量“第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个方向上的斜率”会不会随着第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 个变量的变化而改变。</p>
<p>对角线元素 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial^2 f}{\partial x_i^2}\)</span> 描述沿单一坐标方向的纯二阶曲率，也就是该方向本身的弯曲强弱；非对角元素 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial^2 f}{\partial x_i\partial x_j}\)</span> 描述不同方向之间的局部耦合（Local Coupling）。当 <span displaypfx="inline-" class="mathjax-container">\(H_{ij}=0\)</span> 时，意味着在当前点附近，变量 <span displaypfx="inline-" class="mathjax-container">\(x_j\)</span> 的微小变化不会改变第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个方向上的一阶斜率；当 <span displaypfx="inline-" class="mathjax-container">\(H_{ij}\neq 0\)</span> 时，两个方向在局部二阶结构上发生耦合。</p>
<p>这种耦合会直接反映在等高线（Contour）形状上：若非对角项接近零，局部二次近似更接近与坐标轴对齐的“正椭圆碗”；若非对角项明显非零，等高线会发生倾斜，说明改变一个变量会连带改变另一个方向上的坡度。</p>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 足够光滑，满足二阶混合偏导连续，则由 Clairaut / Schwarz 定理可得</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial^2 f}{\partial x_i\partial x_j}=\frac{\partial^2 f}{\partial x_j\partial x_i}\]</span>
<p>因此 Hessian 矩阵是对称矩阵（Symmetric Matrix）。这点非常重要，因为一旦 Hessian 对称，就可以用特征值（Eigenvalue）来判断局部曲率：正特征值对应向上弯，负特征值对应向下弯，正负并存则意味着不同方向上的弯曲趋势相反。</p>
<p>Hessian 的几何意义可以通过二阶 Taylor 展开看得最清楚。对点 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\)</span> 附近的微小扰动 <span displaypfx="inline-" class="mathjax-container">\(\Delta \mathbf{x}\)</span>，有：</p>
<span displaypfx="" class="mathjax-container">\[f(\mathbf{x}+\Delta\mathbf{x})\approx f(\mathbf{x})+\nabla f(\mathbf{x})^\top \Delta\mathbf{x}+\frac{1}{2}\Delta\mathbf{x}^\top \nabla^2 f(\mathbf{x})\Delta\mathbf{x}\]</span>
<p>这里第一项 <span displaypfx="inline-" class="mathjax-container">\(f(\mathbf{x})\)</span> 是当前函数值，第二项 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(\mathbf{x})^\top \Delta\mathbf{x}\)</span> 是一阶线性变化，第三项 <span displaypfx="inline-" class="mathjax-container">\(\frac{1}{2}\Delta\mathbf{x}^\top \nabla^2 f(\mathbf{x})\Delta\mathbf{x}\)</span> 就是二阶曲率修正项。梯度告诉你“朝哪边走函数会立刻增减”，Hessian 则告诉你“地形本身是碗状、山丘状，还是马鞍状”。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/hessian-locality-preview.png"><img class="alignnone size-full" src="https://blog.gmem.cc/wp-content/uploads/2026/03/hessian-locality.png" alt="hessian-locality" width="2307" height="1169" /></a></p>
<p>二维情形最直观。设</p>
<span displaypfx="" class="mathjax-container">\[f(x_1,x_2)=x_1^2+3x_1x_2+2x_2^2\]</span>
<p>先求梯度：</p>
<span displaypfx="" class="mathjax-container">\[\nabla f(x_1,x_2)=\begin{bmatrix}2x_1+3x_2\\3x_1+4x_2\end{bmatrix}\]</span>
<p>再求二阶偏导，可得：</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial^2 f}{\partial x_1^2}=2,\qquad \frac{\partial^2 f}{\partial x_1\partial x_2}=3,\qquad \frac{\partial^2 f}{\partial x_2^2}=4\]</span>
<p>因此 Hessian 为：</p>
<span displaypfx="" class="mathjax-container">\[\nabla^2 f(x_1,x_2)=\begin{bmatrix}2 &amp; 3\\3 &amp; 4\end{bmatrix}\]</span>
<p>这个例子还有一个关键特征：Hessian 与 <span displaypfx="inline-" class="mathjax-container">\((x_1,x_2)\)</span> 无关，因此它说明该函数在整个空间里都是同一种二次曲面（Quadratic Surface）。对二次函数而言，Hessian 足以完整决定其曲率结构。</p>
<p>在极值判别里，Hessian 主要出现在临界点（Critical Point）附近。若某点 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}^*\)</span> 满足 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(\mathbf{x}^*)=\mathbf{0}\)</span>，则：</p>
<ul>
<li>若 <span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f(\mathbf{x}^*)\)</span> 正定（Positive Definite），即对任意非零向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 都有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}^\top \nabla^2 f(\mathbf{x}^*)\mathbf{v}&gt;0\)</span>，则该点是局部极小值（Local Minimum）。</li>
<li>若 <span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f(\mathbf{x}^*)\)</span> 负定（Negative Definite），即对任意非零向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}\)</span> 都有 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{v}^\top \nabla^2 f(\mathbf{x}^*)\mathbf{v}&lt;0\)</span>，则该点是局部极大值（Local Maximum）。</li>
<li>若 Hessian 不定（Indefinite），即存在方向使二次型为正，也存在方向使其为负，则该点是鞍点（Saddle Point）。</li>
<li>若 Hessian 只有半正定、半负定，或出现零特征值，则二阶信息不足以单独判定，还需要更高阶分析或结合函数结构进一步判断。</li>
</ul>
<p>这套判据和一维情形完全一致：一维里 <span displaypfx="inline-" class="mathjax-container">\(f''(x^*)&gt;0\)</span> 表示“碗底”， <span displaypfx="inline-" class="mathjax-container">\(f''(x^*)&lt;0\)</span> 表示“山顶”；Hessian 只是把这个二阶导概念推广到了多维空间。</p>
<p>在优化中，Hessian 的意义更直接。牛顿法（Newton's Method）用它近似局部曲面，并据此选择更合理的更新方向：</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{x}_{t+1}=\mathbf{x}_t-\big(\nabla^2 f(\mathbf{x}_t)\big)^{-1}\nabla f(\mathbf{x}_t)\]</span>
<p>与只看一阶斜率的梯度下降不同，牛顿法还利用了局部曲率信息：若某个方向很陡但也弯得很厉害，步长就应更谨慎；若某个方向很平缓，更新可以相对更大。因此，Hessian 会出现在牛顿法、拟牛顿法（BFGS / L-BFGS）以及很多二阶优化分析中。</p>
<p>在机器学习里，Hessian 还常用来讨论损失面的尖锐度（Sharpness）、参数可辨识性以及训练稳定性。但深度学习模型维度极高，完整 Hessian 的存储与求逆代价非常大：若参数维度为 <span displaypfx="inline-" class="mathjax-container">\(d\)</span>，Hessian 大小就是 <span displaypfx="inline-" class="mathjax-container">\(d\times d\)</span>。因此工程上更常用 Hessian 向量积（Hessian-Vector Product）、对角近似、低秩近似，或拟牛顿方法来间接利用二阶信息，而非显式构造整块矩阵。</p>
<p>在神经网络里，单独说 Hessian 时，默认通常指损失函数对参数向量 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的 Hessian，即 <span displaypfx="inline-" class="mathjax-container">\(\nabla_\theta^2 L(\theta)\)</span>。原因很直接：优化真正要更新的是权重，因此人们最关心的是“损失面对参数空间的局部曲率”。当然，Hessian 也可以对输入或中间激活值来求，例如 <span displaypfx="inline-" class="mathjax-container">\(\nabla_x^2 f(x)\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(\nabla_h^2 f(h)\)</span>，它们分别描述输入空间或表示空间中的局部弯曲；只是从工程语境看，这类用法通常并非默认含义。</p>
<div class="blog_h2"><span class="graybg">积分</span></div>
<div class="blog_h3"><span class="graybg">不定积分</span></div>
<p>不定积分（Indefinite Integral）也叫反导数、原函数。是“由变化率反推原函数（Antiderivative）”：已知 <span displaypfx="inline-" class="mathjax-container">\(f\)</span>，寻找所有满足 <span displaypfx="inline-" class="mathjax-container">\(F'(x)=f(x)\)</span> 的函数 <span displaypfx="inline-" class="mathjax-container">\(F\)</span>。</p>
<p><span style="background-color: #c0c0c0;">一句话强调：不定积分就是“已知导函数（导数），求原函数”的过程。</span></p>
<span displaypfx="" class="mathjax-container">\[\int f(x)\,dx=F(x)+C\]</span>
<div class="blog_h4"><span class="graybg">从变化率反推状态</span></div>
<p>把导数看作“瞬时变化率”最容易理解积分的方向。若 <span displaypfx="inline-" class="mathjax-container">\(s(t)\)</span> 是位置、<span displaypfx="inline-" class="mathjax-container">\(v(t)\)</span> 是速度，则 <span displaypfx="inline-" class="mathjax-container">\(s'(t)=v(t)\)</span>。当只知道 <span displaypfx="inline-" class="mathjax-container">\(v(t)\)</span> 时，要恢复 <span displaypfx="inline-" class="mathjax-container">\(s(t)\)</span> 就是在做积分。</p>
<span displaypfx="" class="mathjax-container">\[s'(t)=v(t)\ \Longrightarrow\ s(t)=\int v(t)\,dt\]</span>
<div class="blog_h4"><span class="graybg">为什么必须有 +C</span></div>
<p>因为微分会“抹掉常数项”。不同函数只要相差一个常数，导数就完全一样：</p>
<span displaypfx="" class="mathjax-container">\[\frac{d}{dx}(x^2)=\frac{d}{dx}(x^2+5)=\frac{d}{dx}(x^2-100)=2x\]</span>
<p>所以当你从 <span displaypfx="inline-" class="mathjax-container">\(f(x)=2x\)</span> 反推原函数时，只能确定主体是 <span displaypfx="inline-" class="mathjax-container">\(x^2\)</span>，无法确定常数偏移。这就是积分常数（Constant of Integration）<span displaypfx="inline-" class="mathjax-container">\(C\)</span> 的来源。若再给一个初值条件（Initial Condition），例如 <span displaypfx="inline-" class="mathjax-container">\(F(x_0)=y_0\)</span>，<span displaypfx="inline-" class="mathjax-container">\(C\)</span> 才会被唯一确定。</p>
<div class="blog_h4"><span class="graybg">几何图像：一族平移曲线</span></div>
<p><span displaypfx="inline-" class="mathjax-container">\(\int f(x)\,dx\)</span> 的结果对应一族函数 <span displaypfx="inline-" class="mathjax-container">\(\{F(x)+C\mid C\in\mathbb{R}\}\)</span>。它们形状完全相同，只是沿 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 轴上下平移；在同一个 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 处，这族曲线的切线斜率都等于 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span>。</p>
<div class="blog_h4"><span class="graybg">一个最小可算例</span></div>
<span displaypfx="" class="mathjax-container">\[\int 2x\,dx=x^2+C\]</span>
<p>验算： <span displaypfx="inline-" class="mathjax-container">\(\frac{d}{dx}(x^2+C)=2x\)</span>。这一步强调的是“求导与积分互为逆过程”，但逆过程会保留一个常数不确定性。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/indefinite-integral1.png"><img class="alignnone size-full wp-image-40773" src="https://blog.gmem.cc/wp-content/uploads/2026/03/indefinite-integral1.png" alt="indefinite-integral" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">微积分基本定理（Fundamental Theorem of Calculus）</span></div>
<p>不定积分与定积分的连接点是微积分基本定理（Fundamental Theorem of Calculus）。它包含两条互补结论：</p>
<ol>
<li>若 <span displaypfx="inline-" class="mathjax-container">\(F'(x)=f(x)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\int_a^b f(x)\,dx=F(b)-F(a)\)</span>。这告诉我们：定积分可以通过任意一个原函数在端点处相减来计算。</li>
<li>定义 <span displaypfx="inline-" class="mathjax-container">\(G(x)=\int_a^x f(t)\,dt\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(G'(x)=f(x)\)</span>。这告诉我们：把函数从 <span displaypfx="inline-" class="mathjax-container">\(a\)</span> 到 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 累积起来，得到的累积函数本身就是一个原函数。</li>
</ol>
<p><span style="background-color: #c0c0c0;">一句话强调：定积分就是原函数（不定积分）在区间两端的函数值“收尾相减”</span>，即 <span displaypfx="inline-" class="mathjax-container">\(\int_a^b f(x)\,dx=F(b)-F(a)\)</span>。</p>
<p>例： <span displaypfx="inline-" class="mathjax-container">\(f(x)=2x\)</span>，取原函数 <span displaypfx="inline-" class="mathjax-container">\(F(x)=x^2\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[\int_1^3 2x\,dx=F(3)-F(1)=9-1=8\]</span>
<div class="blog_h3"><span class="graybg">定积分</span></div>
<p>定积分（Definite Integral）可看成“带符号面积（Signed Area）”或“连续求和”。Riemann 和定义为：</p>
<span displaypfx="" class="mathjax-container">\[\int_a^b f(x)\,dx=\lim_{n\to\infty}\sum_{k=1}^{n}f(\xi_k)\Delta x_k\]</span>
<p>若上下界中出现 <span displaypfx="inline-" class="mathjax-container">\(\infty\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(-\infty\)</span>，它仍然属于定积分范畴，只是更准确地叫广义积分（Improper Integral）或广义定积分：本质上仍是在一个区间上求累积量，只是需要先把无穷区间截断，再用极限恢复。例如</p>
<span displaypfx="" class="mathjax-container">\[\int_a^{\infty} f(x)\,dx:=\lim_{R\to\infty}\int_a^R f(x)\,dx\]</span>
<p>因此“上下界无穷”核心是<span style="background-color: #c0c0c0;">定积分的特殊形式</span>。</p>
<p>在 AI 里，连续概率密度函数（Probability Density Function, PDF）的概率计算 <span displaypfx="inline-" class="mathjax-container">\(P(a\le X\le b)=\int_a^b p(x)\,dx\)</span> 本质上就是定积分。</p>
<div class="blog_h3"><span class="graybg">常用积分公式</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">被积函数</td>
<td style="text-align: center;">积分结果</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x^n\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{x^{n+1}}{n+1}+C\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(n\ne -1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{x}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\ln|x|+C\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\ne 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(e^x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(e^x+C\)</span></td>
<td>指数函数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(-\cos x+C\)</span></td>
<td>三角函数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\cos x\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin x+C\)</span></td>
<td>三角函数</td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{1+x^2}\)</span></td>
<td><span displaypfx="inline-" class="mathjax-container">\(\arctan x+C\)</span></td>
<td>反三角函数</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">多重积分</span></div>
<p>多重积分（Multiple Integrals）是把一维积分的“连续求和”推广到更高维区域上的积分运算。它积分的对象已经从线段上的小长度扩展到平面区域上的小面积、空间区域中的小体积，或者曲面上的小面片。因此，多重积分处理的是“在二维、三维或更一般区域上，把局部量连续累加成整体量”的问题。</p>
<p>它的阅读难点通常不在计算本身，而在于符号会很快遮住几何直觉。理解的关键仍然是把“积分”看成连续求和，只不过求和对象已经从一维区间扩展到了更高维区域。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/multiple-integral.jpg"><img class="alignnone size-full wp-image-40789" src="https://blog.gmem.cc/wp-content/uploads/2026/03/multiple-integral.jpg" alt="multiple-integral" width="100%" /></a></p>
<div class="blog_h4"><span class="graybg">从一维面积到三维体积</span></div>
<p>一重积分 <span displaypfx="inline-" class="mathjax-container">\(\int f(x)\,dx\)</span> 常被理解为曲线下的面积：在 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 轴上切出很多极窄的小条，每条小条的面积近似是“高度 <span displaypfx="inline-" class="mathjax-container">\(\times\)</span> 宽度”，也就是 <span displaypfx="inline-" class="mathjax-container">\(f(x)\,dx\)</span>，再把它们全部加起来。</p>
<p>双重积分把这个想法从“一条线”推广到“一块区域”。设 <span displaypfx="inline-" class="mathjax-container">\(D\)</span> 是平面上的一块区域，曲面高度由 <span displaypfx="inline-" class="mathjax-container">\(z=f(x,y)\)</span> 给出，那么</p>
<span displaypfx="" class="mathjax-container">\[\iint_D f(x,y)\,dx\,dy\]</span>
<p>它对应的几何图像是：在区域 <span displaypfx="inline-" class="mathjax-container">\(D\)</span> 的每个小块 <span displaypfx="inline-" class="mathjax-container">\(dx\,dy\)</span> 上立起一根很细的小柱子，柱高是 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)\)</span>。这些小柱子拼起来，形成曲面下方的一整块立体体积。于是双重积分最直观的几何意义就是：<span style="background-color: #c0c0c0;">把区域上方由高度函数堆出来的整块三维体积连续累加起来</span>。</p>
<p>再往上推广，三重积分</p>
<span displaypfx="" class="mathjax-container">\[\iiint_\Omega f(x,y,z)\,dV\]</span>
<p>表示在空间区域 <span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span> 内，对每个微小体积元 <span displaypfx="inline-" class="mathjax-container">\(dV\)</span> 的函数值做累加。此时它不一定是在“求一个更高维体积”，也可以是在整个空间体内部对某个量做总汇总，例如总质量、总能量、总代价或总概率权重。可以把它和一重积分放在同一条理解链上来看：速度函数在时间上的累积给出位移，密度函数在空间上的累积给出质量，能量密度（Energy Density）在区域或体积上的累积给出总能量。若 <span displaypfx="inline-" class="mathjax-container">\(\rho(x,y)\)</span> 是面密度，则 <span displaypfx="inline-" class="mathjax-container">\(\iint_D \rho(x,y)\,dA\)</span> 表示区域 <span displaypfx="inline-" class="mathjax-container">\(D\)</span> 上的总质量；若 <span displaypfx="inline-" class="mathjax-container">\(\rho(x,y,z)\)</span> 是体密度，则 <span displaypfx="inline-" class="mathjax-container">\(\iiint_\Omega \rho(x,y,z)\,dV\)</span> 表示空间区域 <span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span> 内的总质量。积分符号的重数，本质上对应的是累积区域的维度。</p>
<div class="blog_h4"><span class="graybg">高度函数到底表示什么</span></div>
<p>双重积分里最需要读懂的是 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)\)</span>。<span displaypfx="inline-" class="mathjax-container">\(f(x,y)\)</span> 可以表示真实高度，也可以表示任意随位置变化的量。你可以把它看成“每个点上放了多少东西”。积分的过程，就是把整块区域上的这些局部贡献全部收集起来。</p>
<ul>
<li>当 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=1\)</span> 时，每个位置的高度都恒为 1，所以积分值在数值上就等于区域 <span displaypfx="inline-" class="mathjax-container">\(D\)</span> 的面积。此时双重积分退化为“面积公式”。</li>
<li>当 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)\)</span> 是密度函数（Density Function）时，积分得到的是总质量、总电荷或总概率。函数值越大，说明该位置“堆得越多”，对总量贡献越大。</li>
<li>当 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)\)</span> 表示代价、风险、热量、响应强度等场量时，积分得到的是这类量在整个区域上的累积结果。</li>
</ul>
<p>因此，多重积分做的是一件很具体的事：把无穷多个微小局部量累加成一个整体量。</p>
<div class="blog_h4"><span class="graybg">带圈的积分号是什么意思</span></div>
<p>有时会看到带圈的双积分号 ∯。这个圈表示积分域是闭合的（Closed）：核心是一个完整包起来的曲面，例如球壳表面、气泡表面或任意封闭外壳。为了把这个“带圈”符号直接看出来，下面就直接写成在闭合曲面 <span displaypfx="inline-" class="mathjax-container">\(S\)</span> 上的积分。</p>
<p style="text-align: center; font-size: 1.15em;"><span style="text-align: center; font-size: 2em;">∯</span><sub>S</sub> <span displaypfx="inline-" class="mathjax-container">\(\mathbf{F}\cdot d\mathbf{S}\)</span></p>
<p>这里的含义通常核心是计算向量场（Vector Field）穿过闭合曲面的总通量（Flux）。直观地说，就是看有多少“流”从这个封闭外壳内部穿出，或者从外部流入。它和高斯散度定理（Gauss's Divergence Theorem）直接相关，因此在偏微分方程（PDE）、连续介质建模、计算流体以及物理信息神经网络（Physics-Informed Neural Networks, PINNs）中十分重要。</p>
<div class="blog_h4"><span class="graybg">多重积分和AI</span></div>
<p>在 AI 中，多重积分最常见的身份是<span style="background-color: #c0c0c0;">概率分布上的总量计算器</span>。如果 <span displaypfx="inline-" class="mathjax-container">\(p(x,y)\)</span> 是二维随机变量的概率密度，那么</p>
<span displaypfx="" class="mathjax-container">\[\iint p(x,y)\,dx\,dy=1\]</span>
<p>表示整张概率曲面下方的总体积必须等于 1。这句话的本质是：所有可能情况加起来，概率总和必须是 100%。</p>
<p>进一步，期望（Expectation）就是在这个概率地形上做加权平均。以一维为例，</p>
<span displaypfx="" class="mathjax-container">\[\mathbb{E}[X]=\int x\,p(x)\,dx\]</span>
<p>表示每个位置 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 都按其概率权重 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 参与平均；多维情形下则自然推广为多重积分。用几何语言说，期望就是这堆“概率质量”在各坐标方向上的重心位置。</p>
<p>高斯分布归一化、边缘分布（Marginal Distribution）、条件分布、变分推断（Variational Inference）、连续潜变量模型以及能量模型（Energy-Based Models）都离不开多重积分。很多时候模型真正要做的事，核心是在高维概率空间里累计、归一化、消去变量或计算期望。</p>
<div class="blog_h2"><span class="graybg">卷积（Convolution）</span></div>
<p>卷积（Convolution）把两个函数/序列组合成第三个函数/序列，最常见的语义是：<span style="background-color: #c0c0c0;">“一个信号在另一个信号的权重/响应下做累积叠加”</span>。它同时是信号处理（Signal Processing）、系统理论（Systems Theory）与 CNN 的基础运算。</p>
<div class="blog_h3"><span class="graybg">连续卷积（Continuous Convolution）</span></div>
<p>对连续函数 <span displaypfx="inline-" class="mathjax-container">\(f(t)\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(g(t)\)</span>，卷积定义为：</p>
<span displaypfx="" class="mathjax-container">\[(f*g)(t)=\int_{-\infty}^{+\infty} f(\tau)\,g(t-\tau)\,d\tau\]</span>
<p>经典记忆法：<span style="background-color: #c0c0c0;">翻转（Flip）→ 平移（Shift）→ 相乘（Multiply）→ 积分（Integrate）</span>。其中 <span displaypfx="inline-" class="mathjax-container">\(g(t-\tau)\)</span> 这一项等价于把 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 先时间反转再按 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 平移。</p>
<div class="blog_h3"><span class="graybg">离散卷积（Discrete Convolution）</span></div>
<p>对离散序列 <span displaypfx="inline-" class="mathjax-container">\(x[n]\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(h[n]\)</span>，卷积定义为：</p>
<span displaypfx="" class="mathjax-container">\[(x*h)[n]=\sum_{k=-\infty}^{+\infty} x[k]\,h[n-k]\]</span>
<p>当序列有限长度时，上式求和区间会自然收缩为有限项。二维卷积（2D Convolution）/图像滤波可以视为把求和从一维扩展到二维索引。</p>
<div class="blog_h3"><span class="graybg">因果性与单侧卷积（Causality）</span></div>
<p>工程系统常满足因果性（Causality）：系统在时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 的输出只依赖过去与当前输入，不依赖未来输入。若输入 <span displaypfx="inline-" class="mathjax-container">\(f(t)\)</span> 与系统的冲激响应（Impulse Response）<span displaypfx="inline-" class="mathjax-container">\(g(t)\)</span> 都是因果的（<span displaypfx="inline-" class="mathjax-container">\(t&lt;0\)</span> 时为 0），则卷积积分可写成单侧形式：</p>
<span displaypfx="" class="mathjax-container">\[(f*g)(t)=\int_{0}^{t} f(\tau)\,g(t-\tau)\,d\tau\]</span>
<p>这个形式更符合直觉：时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 的结果由 <span displaypfx="inline-" class="mathjax-container">\([0,t]\)</span> 区间内“所有过去输入”的贡献叠加而来。</p>
<div class="blog_h3"><span class="graybg">直觉例子：打点滴的累积药效</span></div>
<p>把卷积理解成“累积药效”通常更直观。设 <span displaypfx="inline-" class="mathjax-container">\(r(t)\)</span> 是单位时间的滴注速率（Infusion Rate），<span displaypfx="inline-" class="mathjax-container">\(h(t)\)</span> 是“单位剂量在体内的药效/浓度随时间衰减曲线”（可以把它理解为冲激响应）。在时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 的总药效/浓度 <span displaypfx="inline-" class="mathjax-container">\(c(t)\)</span> 可以写成：</p>
<span displaypfx="" class="mathjax-container">\[c(t)=(r*h)(t)=\int_{0}^{t} r(\tau)\,h(t-\tau)\,d\tau\]</span>
<p>解释：在过去每个时刻 <span displaypfx="inline-" class="mathjax-container">\(\tau\)</span> 滴入的一小部分药量 <span displaypfx="inline-" class="mathjax-container">\(r(\tau)\,d\tau\)</span>，到现在时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 已经“经过了” <span displaypfx="inline-" class="mathjax-container">\(t-\tau\)</span> 的代谢时间，因此它的残留贡献按 <span displaypfx="inline-" class="mathjax-container">\(h(t-\tau)\)</span> 衰减；把所有过去贡献叠加，就得到当前总效果。这正是卷积“用一个响应核去累积历史”的核心语义。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/convolution.jpg"><img class="alignnone size-full wp-image-40805" src="https://blog.gmem.cc/wp-content/uploads/2026/03/convolution.jpg" alt="convolution" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">卷积与互相关（Cross-Correlation）</span></div>
<p>互相关（Cross-Correlation）与卷积的形式非常接近，但没有“核翻转”（Kernel Flip）：一维离散互相关常写成 <span displaypfx="inline-" class="mathjax-container">\(\sum_k x[k]\,w[n+k]\)</span>（不同资料索引略有差异）。深度学习框架里多数“卷积层”实现的是互相关，而非严格数学卷积；由于卷积核参数是可学习的，翻不翻转并不会改变可表达的函数族，但在信号处理里二者语义不同，需注意约定。</p>
<div class="blog_h2"><span class="graybg">链式法则</span></div>
<p>链式法则（Chain Rule）是反向传播（Backpropagation）的核心：当计算图（Computation Graph）由一系列函数复合组成时，总导数等于沿路径的局部导数相乘。</p>
<p>在微分语言下更紧凑：若 <span displaypfx="inline-" class="mathjax-container">\(y=g(x)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(z=f(y)\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(dz=f'(y)\,dy\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(dy=g'(x)\,dx\)</span>，合并得 <span displaypfx="inline-" class="mathjax-container">\(dz=f'(g(x))g'(x)\,dx\)</span>。反向传播做的就是把这些局部“系数”从输出一路乘回输入。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/rule-of-chains.jpg"><img class="alignnone size-full wp-image-40809" src="https://blog.gmem.cc/wp-content/uploads/2026/03/rule-of-chains.jpg" alt="rule-of-chains" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">最小二乘法</span></div>
<p>最小二乘法（Least Squares）解决“拟合误差最小”的问题。给定样本矩阵 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 与目标 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span>，线性模型 <span displaypfx="inline-" class="mathjax-container">\(\hat{\mathbf{y}}=X\mathbf{w}\)</span> 的目标是：</p>
<span displaypfx="" class="mathjax-container">\[\min_{\mathbf{w}}\ \|X\mathbf{w}-\mathbf{y}\|_2^2\]</span>
<p>当 <span displaypfx="inline-" class="mathjax-container">\(X^\top X\)</span> 可逆时，闭式解满足正规方程（Normal Equations）：</p>
<span displaypfx="" class="mathjax-container">\[X^\top X\mathbf{w}=X^\top\mathbf{y},\quad \mathbf{w}^*=(X^\top X)^{-1}X^\top\mathbf{y}\]</span>
<p>几何直觉： <span displaypfx="inline-" class="mathjax-container">\(X\mathbf{w}\)</span> 只能落在 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 的列空间（Column Space）中，最小二乘解就是把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{y}\)</span> 正交投影（Orthogonal Projection）到这个空间上，剩余误差向量与列空间正交。</p>
<p>在 AI/统计实践中，若 <span displaypfx="inline-" class="mathjax-container">\(X^\top X\)</span> 病态或奇异，常用岭回归（Ridge Regression）：</p>
<span displaypfx="" class="mathjax-container">\[\min_{\mathbf{w}}\ \|X\mathbf{w}-\mathbf{y}\|_2^2+\lambda\|\mathbf{w}\|_2^2,\quad (X^\top X+\lambda I)\mathbf{w}=X^\top\mathbf{y}\]</span>
<p>它本质上是把二次目标做稳定化，降低方差并提升泛化。</p>
<div class="blog_h2"><span class="graybg">凸函数与凸优化</span></div>
<p>凸函数（Convex Function）是“碗状”的函数：任意两点连线上的函数值不超过端点函数值的线性插值。形式化定义：</p>
<span displaypfx="" class="mathjax-container">\[f(\lambda x_1+(1-\lambda)x_2)\le \lambda f(x_1)+(1-\lambda)f(x_2),\quad \lambda\in[0,1]\]</span>
<p>凸优化（Convex Optimization）之所以重要，是因为凸目标在凸可行域上没有“坏局部最小值”：任一局部最小值都是全局最小值。</p>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 二阶可导，则 Hessian 提供了最直接的局部判据：在一维中 <span displaypfx="inline-" class="mathjax-container">\(f''(x)\ge 0\)</span> 对应凸；在多维中，若对所有 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 都有 <span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f(x)\succeq 0\)</span>（半正定，Positive Semidefinite），则 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 是凸函数。若处处 <span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f(x)\succ 0\)</span>（正定，Positive Definite），则函数通常具有更强的严格凸性（Strict Convexity）。</p>
<p>损失函数的形状可以非常多样。需要区分两层含义：</p>
<ul>
<li>损失形式本身：例如 BCE/CE（对概率或对线性模型的 logits）是凸的，MSE 也是凸的。</li>
<li>对参数的整体目标：当把损失与深度网络的非线性参数化组合后，目标函数通常变成非凸（Non-convex），这核心是“网络映射让问题不凸”。</li>
</ul>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/loss-fn-convex.jpg"><img class="alignnone size-full wp-image-40813" src="https://blog.gmem.cc/wp-content/uploads/2026/03/loss-fn-convex.jpg" alt="loss-fn-convex" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">拉格朗日乘数法</span></div>
<p>拉格朗日乘数法（Lagrange Multiplier Method）处理约束优化（Constrained Optimization）：在满足约束的前提下最小化/最大化目标函数。常用写法是把约束写成函数形式：等式约束（Equality Constraints）<span displaypfx="inline-" class="mathjax-container">\(g_i(x)=0\)</span>，不等式约束（Inequality Constraints）<span displaypfx="inline-" class="mathjax-container">\(g_i(x)\le 0\)</span>。</p>
<p>对等式约束，构造拉格朗日函数（Lagrangian）：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(x,\lambda)=f(x)+\sum_{i=1}^{m}\lambda_i g_i(x)\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span> 是目标函数（Objective），<span displaypfx="inline-" class="mathjax-container">\(g_i(x)\)</span> 是约束函数（Constraint Function），<span displaypfx="inline-" class="mathjax-container">\(\lambda_i\)</span> 是拉格朗日乘子（Lagrange Multiplier）。新增部分 <span displaypfx="inline-" class="mathjax-container">\(\sum_i \lambda_i g_i(x)\)</span> 称为拉格朗日项（Lagrange Term），单个约束对应的项是 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i g_i(x)\)</span>。</p>
<p>在不同应用里乘子的记号可能不同：在优化理论里常写 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i\)</span>，在支持向量机（SVM）里常写 <span displaypfx="inline-" class="mathjax-container">\(\alpha_i\)</span>（每个样本约束对应一个乘子）。</p>
<p>把 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda)\)</span> 看作关于原变量 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 与乘子 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 的二元函数后，鞍点（Saddle Point）结构是约束被编码进目标函数后的直接结果。 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 的角色是压低总代价， <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 的角色是放大任何尚未满足的约束，因此两者天然形成极小极大（Min-Max）结构。</p>
<p>先看等式约束 <span displaypfx="inline-" class="mathjax-container">\(g(x)=0\)</span>。这里必须先把“为什么内层是最大化”说清楚：这核心是为了把约束编码成一个<span style="background-color: #c0c0c0;">可行点保留原目标、不可行点直接罚到 <span displaypfx="inline-" class="mathjax-container">\(+\infty\)</span></span> 的机制。因此，固定某个 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 后，内层写成 <span displaypfx="inline-" class="mathjax-container">\(\max_\lambda \, (f(x)+\lambda g(x))\)</span>。如果 <span displaypfx="inline-" class="mathjax-container">\(g(x)\neq 0\)</span>，由于 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 不受符号限制，最大化者总能把 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 取到与 <span displaypfx="inline-" class="mathjax-container">\(g(x)\)</span> 同号且绝对值任意大，使 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda)\to\infty\)</span>；只有当 <span displaypfx="inline-" class="mathjax-container">\(g(x)=0\)</span> 时，拉格朗日项才消失，内层最大值才退化为 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span>。因此 <span displaypfx="inline-" class="mathjax-container">\(\max_\lambda \mathcal{L}(x,\lambda)\)</span> 的作用，是把所有不满足等式约束的点直接排除掉。</p>
<p>不等式约束更容易看出这种“过滤”机制。若约束是 <span displaypfx="inline-" class="mathjax-container">\(g(x)\le 0\)</span> 且乘子满足 <span displaypfx="inline-" class="mathjax-container">\(\lambda\ge 0\)</span>，那么当 <span displaypfx="inline-" class="mathjax-container">\(g(x)&gt;0\)</span> 时，最大化者会把 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 推大，使 <span displaypfx="inline-" class="mathjax-container">\(\lambda g(x)\to\infty\)</span>；当 <span displaypfx="inline-" class="mathjax-container">\(g(x)\le 0\)</span> 时，继续增大 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 只会让值变小，因此最优选择是 <span displaypfx="inline-" class="mathjax-container">\(\lambda=0\)</span>。于是 <span displaypfx="inline-" class="mathjax-container">\(\max_{\lambda\ge 0}\mathcal{L}(x,\lambda)\)</span> 对可行点返回原始代价 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span>，对不可行点返回“无限罚款”。外层再对 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 做最小化，就等价于只在可行域内最小化 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span>。</p>
<span displaypfx="" class="mathjax-container">\[\min_x\ \max_\lambda\ \mathcal{L}(x,\lambda)\]</span>
<p>几何上，这正对应马鞍形曲面：沿 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 方向切开， <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span> 像一个向上开的“碗”，因为这里在做最小化；沿 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 方向切开， <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span> 像一个向下开的“拱”，因为这里在做最大化。鞍点 <span displaypfx="inline-" class="mathjax-container">\((x^*,\lambda^*)\)</span> 的含义是：固定 <span displaypfx="inline-" class="mathjax-container">\(\lambda=\lambda^*\)</span> 时， <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 已经不能再把值压低；固定 <span displaypfx="inline-" class="mathjax-container">\(x=x^*\)</span> 时， <span displaypfx="inline-" class="mathjax-container">\(\lambda^*\)</span> 也已经不能再把值抬高。原问题的最优解与约束的恰当作用强度，就在这个交点同时确定。</p>
<p>记号约定：上标星号（Asterisk）<span displaypfx="inline-" class="mathjax-container">\(^*\)</span> 通常表示“最优/最优点处的取值”，例如 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 是最优解， <span displaypfx="inline-" class="mathjax-container">\(\lambda^*\)</span> 是与之对应的最优乘子。</p>
<p>在鞍点 <span displaypfx="inline-" class="mathjax-container">\((x^*,\lambda^*)\)</span>，固定 <span displaypfx="inline-" class="mathjax-container">\(\lambda=\lambda^*\)</span> 时 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 使 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span> 最小；固定 <span displaypfx="inline-" class="mathjax-container">\(x=x^*\)</span> 时 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*\)</span> 使 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span> 最大，可用不等式写成：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(x^*,\lambda)\le \mathcal{L}(x^*,\lambda^*)\le \mathcal{L}(x,\lambda^*)\]</span>
<p>上面的鞍点不等式给出的是几何刻画；真正求解时，还需要把“这个点已经不能再降、也不能再升”的直观条件改写成可计算的方程。做法是检查拉格朗日函数（Lagrangian）<span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span> 对各个变量的一阶变化：若在候选点附近，沿某个允许方向还能继续把值压低（对 <span displaypfx="inline-" class="mathjax-container">\(x\)</span>）或继续把值抬高（对 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span>），那么该点就不可能是鞍点。</p>
<p>这就是一阶必要条件（First-Order Necessary Condition）的来源：若 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 是最优解，则一阶（线性）变化项必须已经消失，否则还存在继续改进的方向。这里“必要”不同于“充分”：满足一阶条件只说明它有可能是最优点，不说明它一定最优；要得到充分结论，还需要二阶条件、凸性（Convexity）或其他结构。</p>
<p>无约束情形最直接。在一维中，若 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 是可微且不在边界上的局部最小点，则向左或向右移动都不能让函数更小，因此斜率必须满足 <span displaypfx="inline-" class="mathjax-container">\(f'(x^*)=0\)</span>；多维里把“斜率”推广为梯度（Gradient），于是条件变为 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x^*)=0\)</span>。</p>
<p>把同样的思路移到等式约束上，求解目标就从“找原函数 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 的极小点”变成“找拉格朗日函数 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda)\)</span> 的鞍点”。对可导问题，一阶条件写成：</p>
<span displaypfx="" class="mathjax-container">\[\nabla_x \mathcal{L}(x^*,\lambda^*)=0,\quad g_i(x^*)=0\]</span>
<p>第一式表示：固定 <span displaypfx="inline-" class="mathjax-container">\(\lambda=\lambda^*\)</span> 后，已经找不到能继续降低 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span> 的 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 方向；第二式就是可行性（Feasibility）本身。又因为 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial \mathcal{L}}{\partial \lambda_i}=g_i(x)\)</span>，所以“对乘子求偏导为 0”本质上只是把约束 <span displaypfx="inline-" class="mathjax-container">\(g_i(x)=0\)</span> 原样写回。</p>
<p>不等式约束时，乘子必须满足 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i\ge 0\)</span>，因此鞍点结构相应写成：</p>
<span displaypfx="" class="mathjax-container">\[\min_x\ \max_{\lambda\ge 0}\ \mathcal{L}(x,\lambda)\]</span>
<p>此时除了驻点条件，还必须同时满足 KKT 条件（Karush–Kuhn–Tucker Conditions）。其中最关键的是互补松弛（Complementary Slackness）<span displaypfx="inline-" class="mathjax-container">\(\lambda_i g_i(x^*)=0\)</span>：每个约束在最优点只有两种状态——要么它是紧的（Active），即 <span displaypfx="inline-" class="mathjax-container">\(g_i(x^*)=0\)</span>；要么它不紧，此时对应乘子必须为 0，表示该约束在最优点处没有实际作用。</p>
<p>例（等式约束）：最小化 <span displaypfx="inline-" class="mathjax-container">\(f(x,y)=x^2+y^2\)</span>，约束 <span displaypfx="inline-" class="mathjax-container">\(x+y=1\)</span>。拉格朗日函数：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(x,y,\lambda)=x^2+y^2+\lambda(x+y-1)\]</span>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-lagrange.png"><img class="alignnone size-full wp-image-40821" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-lagrange.png" alt="plot-lagrange" width="100%" /></a></p>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(\lambda(x+y-1)\)</span> 是拉格朗日项（Lagrange Term）：它把等式约束 <span displaypfx="inline-" class="mathjax-container">\(x+y-1=0\)</span> 以乘子加权的形式并入目标函数。</p>
<p>令偏导为零： <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial \mathcal{L}}{\partial x}=2x+\lambda=0\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\frac{\partial \mathcal{L}}{\partial y}=2y+\lambda=0\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\frac{\partial \mathcal{L}}{\partial \lambda}=x+y-1=0\)</span>。注意 <span displaypfx="inline-" class="mathjax-container">\(\frac{\partial \mathcal{L}}{\partial \lambda}=0\)</span> 就是把约束 <span displaypfx="inline-" class="mathjax-container">\(x+y=1\)</span> 写回来；联立可得 <span displaypfx="inline-" class="mathjax-container">\(x=y=\frac{1}{2}\)</span>。几何上，这意味着最优点处目标函数等高线与约束曲线相切。</p>
<p>例（不等式约束）：最小化 <span displaypfx="inline-" class="mathjax-container">\(f(x)=x^2\)</span>，约束 <span displaypfx="inline-" class="mathjax-container">\(x\ge 1\)</span>。直觉上，无约束最小值在 <span displaypfx="inline-" class="mathjax-container">\(x=0\)</span>，但它不满足约束，所以最优点只能落在边界 <span displaypfx="inline-" class="mathjax-container">\(x=1\)</span>。</p>
<ol>
<li>把约束改写成标准形式：令 <span displaypfx="inline-" class="mathjax-container">\(g(x)=1-x\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(x\ge 1\Leftrightarrow g(x)\le 0\)</span>。</li>
<li>构造拉格朗日函数： <span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda)=f(x)+\lambda g(x)=x^2+\lambda(1-x)\)</span>。其中 <span displaypfx="inline-" class="mathjax-container">\(\lambda(1-x)\)</span> 是拉格朗日项（Lagrange Term），不等式情形要求 <span displaypfx="inline-" class="mathjax-container">\(\lambda\ge 0\)</span>。</li>
<li>写出 KKT 的核心条件：可行性（Feasibility）<span displaypfx="inline-" class="mathjax-container">\(1-x\le 0\)</span>；乘子非负 <span displaypfx="inline-" class="mathjax-container">\(\lambda\ge 0\)</span>；驻点（Stationarity）<span displaypfx="inline-" class="mathjax-container">\(\frac{d\mathcal{L}}{dx}=2x-\lambda=0\)</span>；互补松弛（Complementary Slackness）<span displaypfx="inline-" class="mathjax-container">\(\lambda(1-x)=0\)</span>。</li>
<li>解：由 <span displaypfx="inline-" class="mathjax-container">\(2x-\lambda=0\)</span> 得 <span displaypfx="inline-" class="mathjax-container">\(\lambda=2x\)</span>。互补松弛要求 <span displaypfx="inline-" class="mathjax-container">\(\lambda=0\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(x=1\)</span>。若 <span displaypfx="inline-" class="mathjax-container">\(\lambda=0\)</span> 则 <span displaypfx="inline-" class="mathjax-container">\(x=0\)</span>，但违反 <span displaypfx="inline-" class="mathjax-container">\(x\ge 1\)</span>；因此 <span displaypfx="inline-" class="mathjax-container">\(x^*=1\)</span>，进而 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*=2\)</span>。</li>
<li>解释：在最优点处 <span displaypfx="inline-" class="mathjax-container">\(1-x^*=0\)</span>，该约束是“紧的”（Active），互补松弛允许乘子 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*&gt;0\)</span>，它刻画了该约束在最优点处对解的影响强度。如果最优点落在可行域（Feasible Set）内部（约束不紧， <span displaypfx="inline-" class="mathjax-container">\(1-x^*&lt;0\)</span>），互补松弛会强制 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*=0\)</span>。</li>
</ol>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-lagrange-2.png"><img class="alignnone size-full wp-image-40825" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-lagrange-2.png" alt="plot-lagrange-2" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">对偶问题</span></div>
<p>对偶问题（Dual Problem）从原始问题（Primal Problem）导出下界函数，用于分析可行性、间隙与最优性。标准形式：</p>
<span displaypfx="" class="mathjax-container">\[\min_x\ f(x)\ \text{s.t.}\ g_i(x)\le 0,\ h_j(x)=0\]</span>
<span displaypfx="" class="mathjax-container">\[g(\lambda,\nu)=\inf_x\Big(f(x)+\sum_i \lambda_i g_i(x)+\sum_j \nu_j h_j(x)\Big),\ \lambda_i\ge 0\]</span>
<span displaypfx="" class="mathjax-container">\[\max_{\lambda,\nu}\ g(\lambda,\nu)\ \text{s.t.}\ \lambda\ge 0\]</span>
<p>把括号中的表达式记为拉格朗日函数（Lagrangian）<span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda,\nu)=f(x)+\sum_i \lambda_i g_i(x)+\sum_j \nu_j h_j(x)\)</span>，则对偶函数（Dual Function）就是 <span displaypfx="inline-" class="mathjax-container">\(g(\lambda,\nu)=\inf_x \mathcal{L}(x,\lambda,\nu)\)</span>：固定乘子后先对原变量求下确界，把它“消去”，再对乘子最大化这个下界。</p>
<div class="blog_h4"><span class="graybg">例：SVM 对偶函数是怎么把变量“消掉”的</span></div>
<p>SVM 的对偶函数（Dual Function）来自一个标准过程：先写出原始问题（Primal Problem）的拉格朗日函数（Lagrangian），再对原变量取下确界（Infimum），把优化问题改写为只依赖乘子变量的形式。在线性支持向量机（Support Vector Machine, SVM）里，这个过程最清楚，因为 <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\alpha}\)</span> 的出现既解释了“为什么叫对偶”，也把“把原变量消掉”变成了可逐步计算的代换。</p>
<p>考虑硬间隔（Hard-margin）线性 SVM。原始问题是：</p>
<span displaypfx="" class="mathjax-container">\[\min_{\mathbf{w},b}\ \frac{1}{2}\|\mathbf{w}\|_2^2\quad \text{s.t.}\quad y_i(\mathbf{w}^\top \mathbf{x}_i+b)-1\ge 0,\ i=1,\dots,n\]</span>
<p>把约束改写成标准不等式形式：</p>
<span displaypfx="" class="mathjax-container">\[g_i(\mathbf{w},b)=1-y_i(\mathbf{w}^\top \mathbf{x}_i+b)\le 0\]</span>
<p>于是拉格朗日函数为：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(\mathbf{w},b,\boldsymbol{\alpha})=\frac{1}{2}\|\mathbf{w}\|_2^2+\sum_{i=1}^{n}\alpha_i\big(1-y_i(\mathbf{w}^\top \mathbf{x}_i+b)\big),\quad \alpha_i\ge 0\]</span>
<p>对偶函数（Dual Function）的定义是：固定乘子 <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\alpha}\)</span>，对原变量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w},b\)</span> 取下确界：</p>
<span displaypfx="" class="mathjax-container">\[g(\boldsymbol{\alpha})=\inf_{\mathbf{w},b}\mathcal{L}(\mathbf{w},b,\boldsymbol{\alpha})\]</span>
<p>这里的关键结构已经出现了：原始问题直接优化 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w},b\)</span>，而对偶函数先把 <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\alpha}\)</span> 固定住，把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w},b\)</span> 当成待消去变量。随后得到的最大化问题，只剩乘子变量 <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\alpha}\)</span>。这就是“对偶”的来源：<span style="background-color: #c0c0c0;">同一个最优化问题，被改写成了另一组变量上的伴随优化问题</span>。</p>
<p>现在把 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w},b\)</span> 完整消掉。先求驻点条件（Stationarity Conditions）。对 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 求偏导：</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial \mathcal{L}}{\partial \mathbf{w}}=\mathbf{w}-\sum_{i=1}^{n}\alpha_i y_i \mathbf{x}_i=\mathbf{0}\]</span>
<p>因此</p>
<span displaypfx="" class="mathjax-container">\[\mathbf{w}=\sum_{i=1}^{n}\alpha_i y_i \mathbf{x}_i\]</span>
<p>对 <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 求偏导：</p>
<span displaypfx="" class="mathjax-container">\[\frac{\partial \mathcal{L}}{\partial b}=-\sum_{i=1}^{n}\alpha_i y_i=0\]</span>
<p>因此</p>
<span displaypfx="" class="mathjax-container">\[\sum_{i=1}^{n}\alpha_i y_i=0\]</span>
<p>把这些结果代回拉格朗日函数之前，先把它展开成便于逐项代换的形式：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(\mathbf{w},b,\boldsymbol{\alpha})=\frac{1}{2}\mathbf{w}^\top\mathbf{w}+\sum_{i=1}^{n}\alpha_i-\sum_{i=1}^{n}\alpha_i y_i\,\mathbf{w}^\top\mathbf{x}_i-b\sum_{i=1}^{n}\alpha_i y_i\]</span>
<p>第一项代入 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}=\sum_{i=1}^{n}\alpha_i y_i \mathbf{x}_i\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[\frac{1}{2}\mathbf{w}^\top\mathbf{w}=\frac{1}{2}\Big(\sum_{i=1}^{n}\alpha_i y_i \mathbf{x}_i\Big)^\top\Big(\sum_{j=1}^{n}\alpha_j y_j \mathbf{x}_j\Big)\]</span>
<span displaypfx="" class="mathjax-container">\[=\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j\,\mathbf{x}_i^\top\mathbf{x}_j\]</span>
<p>第二项保持不变：</p>
<span displaypfx="" class="mathjax-container">\[\sum_{i=1}^{n}\alpha_i\]</span>
<p>第三项代入同一个 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 表达式：</p>
<span displaypfx="" class="mathjax-container">\[-\sum_{i=1}^{n}\alpha_i y_i\,\mathbf{w}^\top\mathbf{x}_i=-\sum_{i=1}^{n}\alpha_i y_i\Big(\sum_{j=1}^{n}\alpha_j y_j \mathbf{x}_j\Big)^\top\mathbf{x}_i\]</span>
<span displaypfx="" class="mathjax-container">\[=-\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j\,\mathbf{x}_j^\top\mathbf{x}_i\]</span>
<span displaypfx="" class="mathjax-container">\[=-\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j\,\mathbf{x}_i^\top\mathbf{x}_j\]</span>
<p>最后一项利用 <span displaypfx="inline-" class="mathjax-container">\(\sum_{i=1}^{n}\alpha_i y_i=0\)</span> 直接消失：</p>
<span displaypfx="" class="mathjax-container">\[-b\sum_{i=1}^{n}\alpha_i y_i=0\]</span>
<p>因此</p>
<span displaypfx="" class="mathjax-container">\[g(\boldsymbol{\alpha})=\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j\,\mathbf{x}_i^\top\mathbf{x}_j+\sum_{i=1}^{n}\alpha_i-\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j\,\mathbf{x}_i^\top\mathbf{x}_j\]</span>
<span displaypfx="" class="mathjax-container">\[=\sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j\,\mathbf{x}_i^\top\mathbf{x}_j\]</span>
<p>于是对偶问题（Dual Problem）就是：</p>
<span displaypfx="" class="mathjax-container">\[\max_{\boldsymbol{\alpha}}\ g(\boldsymbol{\alpha})\quad \text{s.t.}\quad \alpha_i\ge 0,\ \sum_{i=1}^{n}\alpha_i y_i=0\]</span>
<p>此时“对偶”二字的含义就精确了：原始问题在参数空间里直接求 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w},b\)</span>，对偶问题则在乘子空间里求 <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\alpha}\)</span>；两者来自同一个拉格朗日结构，描述的是同一个最优解的两种表示。对 SVM 而言，更重要的结构变化是：数据 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_i\)</span> 不再单独出现，而只通过内积（Inner Product）<span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}_i^\top\mathbf{x}_j\)</span> 进入目标函数，这正是核技巧（Kernel Trick）的入口。</p>
<p>若问题是凸的且满足 Slater 条件，则强对偶（Strong Duality）成立，可以用鞍点形式表达“先最小化再最大化”与“先最大化再最小化”等价：</p>
<span displaypfx="" class="mathjax-container">\[\min_x\max_{\lambda\ge 0,\nu}\mathcal{L}(x,\lambda,\nu)=\max_{\lambda\ge 0,\nu}\min_x\mathcal{L}(x,\lambda,\nu)\]</span>
<p>对偶函数之所以是“下界”，来自一个简单但关键的不等式：对任意可行解 <span displaypfx="inline-" class="mathjax-container">\(x\)</span>（满足所有约束）与任意 <span displaypfx="inline-" class="mathjax-container">\(\lambda\ge 0\)</span>，都有</p>
<span displaypfx="" class="mathjax-container">\[f(x)\ge f(x)+\sum_i \lambda_i g_i(x)+\sum_j \nu_j h_j(x)\ge \inf_{x'}\Big(f(x')+\sum_i \lambda_i g_i(x')+\sum_j \nu_j h_j(x')\Big)=g(\lambda,\nu)\]</span>
<p>因此对任何 <span displaypfx="inline-" class="mathjax-container">\((\lambda,\nu)\)</span>，都有 <span displaypfx="inline-" class="mathjax-container">\(g(\lambda,\nu)\le p^*\)</span>（原始最优值），这就是弱对偶（Weak Duality）。</p>
<p>弱对偶（Weak Duality）总成立，因此对偶问题给出的值永远不会高于原始问题的最优值。但弱对偶只保证“对偶值是下界”，并不保证这个下界恰好贴住原始最优值。若两者之间还差一截，这个差距就叫对偶间隙（Duality Gap）。</p>
<p>强对偶（Strong Duality）则更进一步：它要求原始最优值与对偶最优值完全相等，也就是对偶问题不仅给出一个保守下界，还精确刻画了原问题的最优值。对很多凸优化问题而言，Slater 条件正是让这种“下界刚好贴住最优值”的关键保证。</p>
<p>从直观上看，Slater 条件要求可行域内部真的存在一个严格可行点。这意味着约束系统核心是有真实的内部空间。可行域一旦有内部，拉格朗日乘子就更容易稳定地描述“目标函数下降趋势”和“约束反作用力”之间的平衡，因此原始问题与对偶问题之间更不容易出现缝隙。在凸优化里，这就是为什么 Slater 条件常被看作强对偶成立的重要通行证。</p>
<p>直观上，对偶变量（Dual Variables）可以看作约束的“影子价格（Shadow Price）”：如果把约束放宽一点点，最优目标值会如何变化。在很多问题中（例如支持向量机（SVM）），对偶化会把优化变量从“模型参数”转成“约束乘子”，并把数据依赖压缩为内积，从而自然导出核技巧（Kernel Trick）。</p>
<div class="blog_h4"><span class="graybg">影子价格（Shadow Price）</span></div>
<p>对偶变量（Dual Variable）常被称为影子价格（Shadow Price），因为它衡量的是：<span style="background-color: #c0c0c0;">如果把某条约束稍微放宽一点，最优目标值会改善多少</span>。这里的“价格”核心是“约束资源有多值钱”的边际刻度。</p>
<p>可以把约束想成一种稀缺资源。例如训练时有显存限制、预算限制、风险限制或几何边界限制；如果某条约束非常紧，那么它就像一个卡脖子的瓶颈。此时只要把这条约束稍微放宽一点，最优目标值就可能明显改善，于是它对应的对偶变量就会比较大。反过来，如果某条约束本来就很松，放宽它也几乎没有收益，那么它对应的对偶变量通常就是 0 或接近 0。</p>
<p>在数学上，这个直觉可以写成一种局部敏感度关系。若把约束写成</p>
<span displaypfx="" class="mathjax-container">\[g_i(x)\le b_i\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(b_i\)</span> 表示第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 条约束允许的“资源上限”或“边界位置”，那么对应的最优值函数可以记为 <span displaypfx="inline-" class="mathjax-container">\(p^*(b)\)</span>。在适当条件下，对偶变量 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*\)</span> 表示最优值对 <span displaypfx="inline-" class="mathjax-container">\(b_i\)</span> 的边际变化率，也就是“把第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 条约束放宽一点，最优值会朝什么方向变化、变化多快”。</p>
<p>在最小化问题中，若某条约束对应的 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*\)</span> 很大，通常表示这条约束非常关键：它一旦被放宽，最优目标值会明显下降；若 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*=0\)</span>，则说明该约束在当前最优点并没有真正起作用，放宽它也不会立刻带来收益。这与前面的互补松弛完全一致：<span style="background-color: #c0c0c0;">只有真正卡住最优解的约束，才会拥有非零影子价格</span>。</p>
<p>因此，影子价格提供了一个非常有用的解释视角：原始变量告诉我们“最优解长什么样”，而对偶变量告诉我们“哪些约束最贵、最紧、最值得被放宽”。在优化理论、经济学和机器学习里，对偶变量因此不仅是求解工具，也是理解模型结构的重要语言。</p>
<div class="blog_h4"><span class="graybg">Slater 条件</span></div>
<p>Slater 条件（Slater's Condition）是凸优化（Convex Optimization）里最常见的正则性条件（Regularity Condition）之一。它的作用核心是保证对偶理论能够“工作得很干净”：在满足它时，很多凸问题会满足强对偶（Strong Duality），也就是原始问题最优值与对偶问题最优值相等；同时，KKT 条件也更容易从“必要条件”提升为判定最优性的核心条件。</p>
<p>对标准凸优化问题</p>
<span displaypfx="" class="mathjax-container">\[ \min_x f(x)\quad \text{s.t.}\quad g_i(x)\le 0,\ h_j(x)=0 \]</span>
<p>如果 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span> 和每个 <span displaypfx="inline-" class="mathjax-container">\(g_i(x)\)</span> 都是凸函数（Convex Function），每个 <span displaypfx="inline-" class="mathjax-container">\(h_j(x)\)</span> 都是仿射函数（Affine Function），那么 Slater 条件要求：<span style="background-color: #c0c0c0;">至少存在一个严格可行点（Strictly Feasible Point）</span> <span displaypfx="inline-" class="mathjax-container">\(\tilde{x}\)</span>，使得所有不等式约束都被“严格满足”，也就是</p>
<span displaypfx="" class="mathjax-container">\[ g_i(\tilde{x})&lt;0,\ \forall i,\qquad h_j(\tilde{x})=0,\ \forall j \]</span>
<p>这里“严格满足”四个字最关键。普通可行点只要求 <span displaypfx="inline-" class="mathjax-container">\(g_i(x)\le 0\)</span>，也就是允许刚好压在边界上；而 Slater 条件要求存在某个点，能让所有不等式约束都留出一点余量，也就是完全处在可行域内部，而非贴着边界。</p>
<p>这个条件可以用一个非常直观的图像来理解。把不等式约束围成的可行域想成一个房间：</p>
<ul>
<li>如果房间内部真的有空间，存在一个点站在房间里，不碰任何墙，这就是满足 Slater 条件。</li>
<li>如果所谓“可行域”其实只是几面墙交出来的一条线、一个角、甚至一个点，根本没有真正的内部空间，那么 Slater 条件通常就不满足。</li>
</ul>
<p>因此，Slater 条件本质上是在说：<span style="background-color: #c0c0c0;">这个凸约束系统不能只是勉强拼出一个边界碎片，而要有真正的内部</span>。一旦内部存在，原始问题和对偶问题之间的间隙通常就会消失，拉格朗日乘子和 KKT 条件也会变得更稳定、更有解释力。</p>
<p>一个简单例子可以把它说清楚。考虑约束</p>
<span displaypfx="" class="mathjax-container">\[x\ge 0\]</span>
<p>写成标准形式是 <span displaypfx="inline-" class="mathjax-container">\(g(x)=-x\le 0\)</span>。这个约束满足 Slater 条件，因为取 <span displaypfx="inline-" class="mathjax-container">\(\tilde{x}=1\)</span> 时，有 <span displaypfx="inline-" class="mathjax-container">\(g(1)=-1&lt;0\)</span>。这说明可行域 <span displaypfx="inline-" class="mathjax-container">\([0,+\infty)\)</span> 不仅边界点 <span displaypfx="inline-" class="mathjax-container">\(x=0\)</span>，还真正包含内部区域。</p>
<p>再看一个不满足 Slater 条件的例子：</p>
<span displaypfx="" class="mathjax-container">\[x^2\le 0\]</span>
<p>由于 <span displaypfx="inline-" class="mathjax-container">\(x^2\)</span> 永远不小于 0，这个约束唯一允许的点只有 <span displaypfx="inline-" class="mathjax-container">\(x=0\)</span>。可行域虽然非空，但没有任何点能让 <span displaypfx="inline-" class="mathjax-container">\(x^2&lt;0\)</span> 成立，所以不存在严格可行点，Slater 条件不成立。这样的约束系统只有边界、没有内部。</p>
<p>在机器学习常见的凸问题里，Slater 条件之所以频繁出现，是因为它几乎就是“强对偶成立的通行证”。例如在线性规划、逻辑回归的某些约束变体、支持向量机（SVM）的凸二次规划中，只要能找到一个严格可行点，就通常可以放心地从原始问题走到对偶问题，再用 KKT 条件解释最优解结构。反过来，如果没有 Slater 条件，就可能出现对偶间隙（Duality Gap），也就是对偶最优值严格小于原始最优值，此时只看对偶或只看 KKT 就不一定足够。</p>
<div class="blog_h4"><span class="graybg">概念速查</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">概念</td>
<td style="text-align: center;">它回答的问题</td>
<td style="text-align: center;">最核心的一句话</td>
<td style="text-align: center;">在这一章里的作用</td>
</tr>
</thead>
<tbody>
<tr>
<td>弱对偶（Weak Duality）</td>
<td>对偶问题和原始问题之间至少有什么关系</td>
<td>对偶最优值永远不会高于原始最优值；它天然是一个下界</td>
<td>先建立“对偶为什么有意义”的最低保证</td>
</tr>
<tr>
<td>对偶间隙（Duality Gap）</td>
<td>为什么有时对偶值还不同于原始最优值</td>
<td>如果对偶下界还没贴住原始最优值，两者之间的差就是对偶间隙</td>
<td>解释为什么“有对偶”不同于“对偶已经足够”</td>
</tr>
<tr>
<td>强对偶（Strong Duality）</td>
<td>什么时候对偶问题就足以精确刻画原问题</td>
<td>原始最优值与对偶最优值完全相等，对偶不再只是保守下界</td>
<td>为从原始问题转到对偶问题提供理论正当性</td>
</tr>
<tr>
<td>Slater 条件（Slater's Condition）</td>
<td>凸优化里什么条件有助于强对偶成立</td>
<td>只要可行域内部存在严格可行点，很多凸问题就能消除对偶间隙</td>
<td>说明为什么强对偶和 KKT 在凸问题里经常可用</td>
</tr>
<tr>
<td>影子价格（Shadow Price）</td>
<td>对偶变量到底在解释什么</td>
<td>它衡量“把某条约束放宽一点，最优值会改善多少”</td>
<td>赋予拉格朗日乘子清晰的经济 / 几何解释</td>
</tr>
<tr>
<td>KKT 条件</td>
<td>最优解在约束下必须满足哪些平衡关系</td>
<td>目标函数的下降趋势与约束施加的反作用力在最优点平衡</td>
<td>把可行性、乘子、驻点与互补松弛统一成最优性条件</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">KKT 条件</span></div>
<div class="blog_h4"><span class="graybg">背景和定义</span></div>
<p>KKT 条件（Karush–Kuhn–Tucker Conditions）讨论的是<span style="background-color: #c0c0c0;">带约束优化问题在最优点必须满足什么条件</span>。无约束优化里，常见做法是令梯度（Gradient）为 0；但一旦问题带有不等式约束或等式约束，只看 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x)=0\)</span> 就不够了，因为最优点很可能被约束“顶”在边界上，而非落在自由空间里的普通驻点。</p>
<p>标准形式写作：</p>
<span displaypfx="" class="mathjax-container">\[\min_x f(x)\quad \text{s.t.}\quad g_i(x)\le 0,\ h_j(x)=0\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span> 是目标函数（Objective Function），表示希望最小化的量；<span displaypfx="inline-" class="mathjax-container">\(x\)</span> 是优化变量（Optimization Variable）；<span displaypfx="inline-" class="mathjax-container">\(g_i(x)\le 0\)</span> 是第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个不等式约束（Inequality Constraint）；<span displaypfx="inline-" class="mathjax-container">\(h_j(x)=0\)</span> 是第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 个等式约束（Equality Constraint）。KKT 条件给出的就是：当 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 真的是一个最优解时，它与对应的拉格朗日乘子（Lagrange Multipliers）之间必须满足一组相互配合的条件。</p>
<p>在凸优化（Convex Optimization）里，如果问题满足适当的正则性条件，例如 Slater 条件（Slater's Condition），KKT 条件往往不只是必要条件，还可以成为判定最优性的核心工具。在线性规划、二次规划、支持向量机（Support Vector Machine, SVM）和许多机器学习训练问题中，KKT 条件都直接参与求解过程。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/kkt-paraboloid-plane.png"><img class="alignnone size-full wp-image-41393" src="https://blog.gmem.cc/wp-content/uploads/2026/03/kkt-paraboloid-plane.png" alt="kkt-paraboloid-plane" width="2107" height="1134" /></a></p>
<div class="blog_h4"><span class="graybg">图解：四组条件如何逐条理解</span></div>
<p>上图使用的是活跃边界 <span displaypfx="inline-" class="mathjax-container">\(g(x)=1-x_1-x_2=0\)</span>。边界 <span displaypfx="inline-" class="mathjax-container">\(x_1+x_2=1\)</span> 的切向方向可取 <span displaypfx="inline-" class="mathjax-container">\((1,-1)\)</span>；与它垂直的向量都是法向量（Normal Vector），例如 <span displaypfx="inline-" class="mathjax-container">\((1,1)\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\((-1,-1)\)</span>。如果把约束写成函数 <span displaypfx="inline-" class="mathjax-container">\(g(x)=1-x_1-x_2\)</span>，那么梯度 <span displaypfx="inline-" class="mathjax-container">\(\nabla g(x)=(-1,-1)\)</span> 就是一条法向量；它指向 <span displaypfx="inline-" class="mathjax-container">\(g(x)\)</span> 增大的方向，也就是不可行侧。</p>
<p>图中的橙色箭头对应驻点条件（Stationarity）里真正参与平衡的两个向量：目标梯度 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x^*)\)</span> 与乘子加权后的约束法向量 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*\nabla g(x^*)\)</span>。它们在最优点首尾相接后得到 0，于是 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x^*)+\lambda^*\nabla g(x^*)=0\)</span> 核心是边界最优点上的几何平衡：</p>
<ul>
<li><span style="background-color: #c0c0c0;">原始可行性（Primal Feasibility）</span>：解必须落在可行域内。对这张图而言，可行域是半空间 <span displaypfx="inline-" class="mathjax-container">\(x_1+x_2\ge 1\)</span>，最优点 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 落在它的活跃边界 <span displaypfx="inline-" class="mathjax-container">\(x_1+x_2=1\)</span> 上。</li>
<li><span style="background-color: #c0c0c0;">对偶可行性（Dual Feasibility）</span>：不等式约束的乘子必须非负，即 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*\ge 0\)</span>。图中的计算给出 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*=0.65\)</span>，表示这条边界在最优点处确实对目标下降施加了正的“反作用”。</li>
<li><span style="background-color: #c0c0c0;">驻点条件（Stationarity）</span>：沿边界的切向方向已经不能继续下降，因此目标梯度不再含有切向分量，只能落在法向空间里。单个活跃约束时，这就变成 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x^*)=-\lambda^*\nabla g(x^*)\)</span>。图中的两根橙色箭头正是这两个大小相等、方向相反的向量。</li>
<li><span style="background-color: #c0c0c0;">互补松弛（Complementary Slackness）</span>：约束若不接触最优点，就不会产生乘子；约束一旦卡在最优点上，对应乘子才会变成正值。当前图像展示的是活跃边界情形，所以 <span displaypfx="inline-" class="mathjax-container">\(g(x^*)=0\)</span> 且 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*&gt;0\)</span> 同时成立。</li>
</ul>
<p>法向量之所以关键，是因为它刻画了“离开边界最快”的方向；切向方向则刻画了“沿边界滑动”的方向。边界最优点的本质结论是：<span style="background-color: #c0c0c0;">目标函数想继续下降的那一部分趋势，已经完全被约束边界的法向作用抵消；沿边界本身则不存在进一步下降方向</span>。</p>
<div class="blog_h4"><span class="graybg">具像化描述</span></div>
<p>可以把 KKT 条件想成一个“遛狗”问题。优化目标是：狗想尽可能往远处跑；约束条件是：主人手里只有一根 5 米长的狗绳，因此狗的活动范围不能超过这条绳子的长度。不等式约束 <span displaypfx="inline-" class="mathjax-container">\(g_i(x)\le 0\)</span> 的作用，就像在说“不能超过这根绳子允许的极限”；等式约束 <span displaypfx="inline-" class="mathjax-container">\(h_j(x)=0\)</span> 则对应那些必须被精确满足的固定条件。</p>
<p>这个比喻里最重要的是区分“绳子是否真正起作用”。如果狗最后只跑到 3 米处就停下，例如已经闻到味道、找到目标，或者在那里已经达到最优状态，那么绳子仍然是松的，还留有 2 米余量。这时约束虽然存在，但它没有真正限制住解。相反，如果狗拼命往前冲，最后正好跑到 5 米极限，绳子就会被拉紧；此时狗还想继续前进，但被约束挡住了。KKT 条件刻画的正是这种“<span style="background-color: #c0c0c0;">目标继续改进的趋势，与约束施加的阻拦作用，在最优点达到平衡</span>”的状态。</p>
<p>其中最形象的一条就是互补松弛（Complementary Slackness）。它表达的是：每一个不等式约束在最优点都只有两种状态。</p>
<ul>
<li>如果某个约束正好卡在边界上，即 <span displaypfx="inline-" class="mathjax-container">\(g_i(x^*)=0\)</span>，就像狗刚好把 5 米狗绳拉到极限，此时这条绳子真的“顶住了”最优解，它对应的乘子 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*\)</span> 可以大于 0。</li>
<li>如果某个约束离边界还有余量，即 <span displaypfx="inline-" class="mathjax-container">\(g_i(x^*)&lt;0\)</span>，就像狗只跑到 3 米处，绳子仍然松弛，那么它对应的乘子必须是 0，也就是 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*=0\)</span>。</li>
</ul>
<p>因此，乘子 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*\)</span> 可以直观理解为绳子的<span style="background-color: #c0c0c0;">拉力</span>，也就是约束对最优解施加的压力。在优化语言里，这个量也常被解释为影子价格（Shadow Price）：如果把这条约束稍微放宽一点，最优目标值会改善多少。拉力不为 0，说明这条约束正在真正影响解；拉力为 0，说明这条约束虽然存在，但在最优点处并没有发挥作用。</p>
<div class="blog_h4"><span class="graybg">公式逐元素解释</span></div>
<p>把原问题写成统一形式后，先定义拉格朗日函数（Lagrangian）：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(x,\lambda,\nu)=f(x)+\sum_i \lambda_i g_i(x)+\sum_j \nu_j h_j(x)\]</span>
<p>这个式子里的每个元素都有明确含义：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span>：拉格朗日函数，把目标函数和约束统一写进一个式子里。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(x\)</span>：原始变量（Primal Variable），也就是模型真正要优化的参数。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(f(x)\)</span>：目标函数，表示希望最小化的代价、损失或能量。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(g_i(x)\)</span>：第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个不等式约束函数；要求它满足 <span displaypfx="inline-" class="mathjax-container">\(g_i(x)\le 0\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(h_j(x)\)</span>：第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 个等式约束函数；要求它满足 <span displaypfx="inline-" class="mathjax-container">\(h_j(x)=0\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\lambda_i\)</span>：第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个不等式约束对应的拉格朗日乘子；它衡量该约束施加的“压力”或“拉力”大小，也可理解为对应约束资源的影子价格。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\nu_j\)</span>：第 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 个等式约束对应的拉格朗日乘子。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\sum_i\)</span> 和 <span displaypfx="inline-" class="mathjax-container">\(\sum_j\)</span>：分别表示把所有不等式约束和所有等式约束的影响累加起来。</li>
</ul>
<p>在此基础上，KKT 条件通常写成四组：</p>
<span displaypfx="" class="mathjax-container">\[\text{Primal feasibility: } g_i(x^*)\le 0,\ h_j(x^*)=0\]</span>
<span displaypfx="" class="mathjax-container">\[\text{Dual feasibility: } \lambda_i^*\ge 0\]</span>
<span displaypfx="" class="mathjax-container">\[\text{Stationarity: } \nabla f(x^*)+\sum_i \lambda_i^*\nabla g_i(x^*)+\sum_j \nu_j^*\nabla h_j(x^*)=0\]</span>
<span displaypfx="" class="mathjax-container">\[\text{Complementary slackness: } \lambda_i^* g_i(x^*)=0\]</span>
<p>这四组条件可以逐条理解：</p>
<ul>
<li><span style="background-color: #c0c0c0;">原始可行性（Primal Feasibility）</span>：最优解 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 首先必须是合法的，不能跑到可行域之外。所有不等式约束都要满足 <span displaypfx="inline-" class="mathjax-container">\(g_i(x^*)\le 0\)</span>，所有等式约束都要精确满足 <span displaypfx="inline-" class="mathjax-container">\(h_j(x^*)=0\)</span>。</li>
<li><span style="background-color: #c0c0c0;">对偶可行性（Dual Feasibility）</span>：不等式约束的乘子必须非负，即 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*\ge 0\)</span>。这保证了它们表达的是“阻止变量越界的压力”，而非把解往不可行方向拉过去的反向力量。</li>
<li><span style="background-color: #c0c0c0;">驻点条件（Stationarity）</span>：在最优点处，目标函数的梯度 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x^*)\)</span> 与所有约束梯度加权后的合力必须平衡为 0。这里 <span displaypfx="inline-" class="mathjax-container">\(\nabla f(x^*)\)</span> 表示目标函数在 <span displaypfx="inline-" class="mathjax-container">\(x^*\)</span> 处最陡上升方向；<span displaypfx="inline-" class="mathjax-container">\(\nabla g_i(x^*)\)</span> 和 <span displaypfx="inline-" class="mathjax-container">\(\nabla h_j(x^*)\)</span> 分别表示约束边界的法向方向；乘子 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\nu_j^*\)</span> 则控制这些方向各自施加多少“反作用力”。这条式子本质上是在说：最优点处已经不存在任何仍然可行且还能继续下降的方向。</li>
<li><span style="background-color: #c0c0c0;">互补松弛（Complementary Slackness）</span>：每个不等式约束都满足 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^* g_i(x^*)=0\)</span>。因为这是两个量的乘积等于 0，所以只能出现两种情况：要么 <span displaypfx="inline-" class="mathjax-container">\(g_i(x^*)=0\)</span>，说明约束正好顶在边界上；要么 <span displaypfx="inline-" class="mathjax-container">\(\lambda_i^*=0\)</span>，说明这条约束在最优点没有施加压力。它精确区分了“活跃约束（Active Constraint）”和“不活跃约束（Inactive Constraint）”。</li>
</ul>
<p>一个一维例子可以把这些符号落到实处。考虑：</p>
<span displaypfx="" class="mathjax-container">\[\min_x\ (x+1)^2\quad \text{s.t.}\quad x\ge 0\]</span>
<p>把约束写成标准形式 <span displaypfx="inline-" class="mathjax-container">\(g(x)=-x\le 0\)</span>，于是拉格朗日函数是：</p>
<span displaypfx="" class="mathjax-container">\[\mathcal{L}(x,\lambda)=(x+1)^2+\lambda(-x)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\((x+1)^2\)</span> 是目标函数；<span displaypfx="inline-" class="mathjax-container">\(-x\le 0\)</span> 是不等式约束；<span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 是这条约束对应的乘子。KKT 条件变成：</p>
<span displaypfx="" class="mathjax-container">\[x\ge 0,\quad \lambda\ge 0,\quad 2(x+1)-\lambda=0,\quad \lambda x=0\]</span>
<p>这四项分别表示：解必须在 <span displaypfx="inline-" class="mathjax-container">\(x\ge 0\)</span> 的合法区域内；乘子必须非负；目标函数与约束施加的作用力在最优点平衡；约束要么卡住解、要么不施加压力。无约束时， <span displaypfx="inline-" class="mathjax-container">\((x+1)^2\)</span> 的最低点在 <span displaypfx="inline-" class="mathjax-container">\(x=-1\)</span>，但这不满足 <span displaypfx="inline-" class="mathjax-container">\(x\ge 0\)</span>，所以真正最优点被“推”到边界 <span displaypfx="inline-" class="mathjax-container">\(x^*=0\)</span>；再代入驻点条件 <span displaypfx="inline-" class="mathjax-container">\(2(x+1)-\lambda=0\)</span>，得到 <span displaypfx="inline-" class="mathjax-container">\(\lambda^*=2\)</span>。这正对应“边界在最优点处确实对解施加了压力”。</p>
<p>如果把目标函数换成 <span displaypfx="inline-" class="mathjax-container">\(\min_x (x-2)^2\ \text{s.t.}\ x\ge 0\)</span>，无约束最优点就是 <span displaypfx="inline-" class="mathjax-container">\(x=2\)</span>，它本来就在可行域内部，因此约束没有真正碰到最优点。此时 KKT 会给出 <span displaypfx="inline-" class="mathjax-container">\(x^*=2\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\lambda^*=0\)</span>。这就是互补松弛最直观的含义：<span style="background-color: #c0c0c0;">边界没有碰到解，压力就自动消失；边界一旦碰到解，乘子就会变成非零</span>。</p>
<div class="blog_h1"><span class="graybg">概率论与统计</span></div>
<p>概率论与统计处理两类问题：第一类是<span style="background-color: #c0c0c0;">在不确定性下如何描述事件、变量与数据生成过程</span>；第二类是<span style="background-color: #c0c0c0;">在只观察到有限样本时，如何反推总体规律与模型参数</span>。在 AI 中，分类概率、回归噪声、采样、似然训练、置信评估与后验推断都建立在这套语言之上。</p>
<div class="blog_h2"><span class="graybg">基础概念</span></div>
<p>在进入公式前，先区分几个最常混淆的基础对象。概率论核心是先规定<span style="background-color: #c0c0c0;">随机试验的结果空间、结果上的事件，以及把结果映射成数的随机变量</span>，之后才谈分布、期望和统计推断。</p>
<ul>
<li>样本空间（Sample Space）<span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span>：一次随机试验所有可能结果的集合，其中希腊字母 <span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span> 只是“全部可能结果”的记号。掷骰子时 <span displaypfx="inline-" class="mathjax-container">\(\Omega=\{1,2,3,4,5,6\}\)</span>，表示所有可能点数组成的集合。</li>
<li>事件（Event）：样本空间的子集，表示“哪些结果算作某件事发生”。例如“点数为偶数”对应集合 <span displaypfx="inline-" class="mathjax-container">\(\{2,4,6\}\)</span>；这句话的意思是，只要试验结果落在这个集合里，就说该事件发生。</li>
<li>随机变量（Random Variable）<span displaypfx="inline-" class="mathjax-container">\(X\)</span>：把随机结果映射为数的函数，可写作 <span displaypfx="inline-" class="mathjax-container">\(X:\Omega\to\mathbb{R}\)</span>。这里 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 是这个函数的名字， <span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span> 是输入端的样本空间，箭头 <span displaypfx="inline-" class="mathjax-container">\(\to\)</span> 表示“映射到”， <span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span> 表示实数集合。每个随机结果都会被 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 变成一个实数。掷骰子时最自然的随机变量就是“点数本身”；在机器学习里，输入 <span displaypfx="inline-" class="mathjax-container">\(X\)</span>、标签 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span>、噪声 <span displaypfx="inline-" class="mathjax-container">\(\epsilon\)</span> 都是随机变量。</li>
<li>概率分布（Probability Distribution）：描述随机变量取不同值的概率规律。离散情形常写作 <span displaypfx="inline-" class="mathjax-container">\(P(X=x)\)</span>，意思是“随机变量 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 恰好取值 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 的概率”；连续情形常写作密度 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span>，它核心是概率密度函数（Probability Density Function, PDF），需要在区间上积分才得到概率。</li>
<li>期望（Expectation）<span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]\)</span>：按概率加权的平均，回答“长期来看这个随机变量的典型水平在哪里”。这里 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}\)</span> 是 expectation 的标准记号，方括号中的 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 表示“对哪个随机变量取期望”。</li>
<li>方差（Variance）<span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(X)\)</span>：围绕期望的波动强度，回答“它通常偏离平均水平多大”。其中 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}\)</span> 是 variance 的记号，括号里的 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 表示“考察哪个随机变量的波动”。</li>
<li>参数（Parameter）与统计量（Statistic）：参数描述总体，例如高斯分布中的 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span> 表示均值（Mean）， <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 表示方差（Variance）；统计量则由样本计算出来，例如 <span displaypfx="inline-" class="mathjax-container">\(\bar{x}\)</span> 表示样本均值（Sample Mean），上面的横线读作“x bar”，意思是“样本中所有 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 的平均值”。统计学习的核心任务之一，就是用统计量去估计未知参数。</li>
</ul>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/probability.jpg"><img class="alignnone size-full wp-image-40841" src="https://blog.gmem.cc/wp-content/uploads/2026/03/probability.jpg" alt="probability" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">似然和概率</span></div>
<p>概率（Probability）与似然（Likelihood）都可以写成 <span displaypfx="inline-" class="mathjax-container">\(p(x|\theta)\)</span> 这样的形式，但它们把“谁是已知、谁是待判断对象”放在不同位置。概率把参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 视为已知、把数据 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 视为随机结果；似然则把数据 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 固定下来，把参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 当作待比较对象。</p>
<p>也正因为公式形式相同，二者很容易混淆；真正的区别不在写法，而在它们回答的是相反方向的问题。条件分布 <span displaypfx="inline-" class="mathjax-container">\(p(x|\theta)\)</span> 在统计里经常同时出现在两种语境中：当参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 固定、数据 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 变化时，它表示“在这个模型下观察到不同数据的概率有多大”；当数据 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 固定、参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 变化时，它表示“哪些参数更能解释这份已经观察到的数据”。</p>
<p>因此，概率的读法是<span style="background-color: #c0c0c0;">参数已知，看数据</span>。例如抛硬币模型里，若已知正面概率 <span displaypfx="inline-" class="mathjax-container">\(\theta=0.7\)</span>，那么 10 次里出现 8 次正面的概率是</p>
<span displaypfx="" class="mathjax-container">\[P(X=8|\theta=0.7)={10 \choose 8}0.7^8 0.3^2\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\({10 \choose 8}\)</span> 表示组合数（Binomial Coefficient）：从 10 次试验里选出 8 次作为正面的不同选法一共有多少种。它负责计数“8 次正面可以出现在哪 8 个位置上”，并非额外的概率项。</p>
<p>而 <span displaypfx="inline-" class="mathjax-container">\(0.7^8 0.3^2\)</span> 来自独立重复试验的乘法法则：如果每次抛掷相互独立，且正面概率是 <span displaypfx="inline-" class="mathjax-container">\(0.7\)</span>、反面概率是 <span displaypfx="inline-" class="mathjax-container">\(0.3\)</span>，那么任意一个“8 次正面、2 次反面”的具体序列，其概率都是 8 个 <span displaypfx="inline-" class="mathjax-container">\(0.7\)</span> 与 2 个 <span displaypfx="inline-" class="mathjax-container">\(0.3\)</span> 的乘积，也就是 <span displaypfx="inline-" class="mathjax-container">\(0.7^8 0.3^2\)</span>。</p>
<p>这里被当作变量的是结果 <span displaypfx="inline-" class="mathjax-container">\(X\)</span>；问题是“给定参数，这样的数据是否常见”。这就是通常意义上的概率或概率密度。</p>
<p>似然的读法正好反过来：<span style="background-color: #c0c0c0;">数据已知，看参数</span>。假设现在已经观察到 10 次抛硬币里有 8 次正面，这组数据不再变化；真正变化的是候选参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>。于是同一个模型被改写为似然函数（Likelihood Function）：</p>
<span displaypfx="" class="mathjax-container">\[L(\theta|X=8)=P(X=8|\theta)={10 \choose 8}\theta^8(1-\theta)^2\]</span>
<p>此时 <span displaypfx="inline-" class="mathjax-container">\(L(\theta|x)\)</span> 核心是一个关于 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的评分函数：哪个 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 让已观察到的数据 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 更容易出现，哪个 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的似然就更大。最大似然估计（Maximum Likelihood Estimation, MLE）做的正是这件事：寻找使 <span displaypfx="inline-" class="mathjax-container">\(L(\theta|x)\)</span> 最大的参数。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/likelihood.png"><img class="alignnone size-full wp-image-40879" src="https://blog.gmem.cc/wp-content/uploads/2026/03/likelihood.png" alt="likelihood" width="100%" /></a></p>
<p>这里有一个必须严格区分的点：<span style="background-color: #c0c0c0;">似然并非参数的概率分布</span>。对固定数据来说， <span displaypfx="inline-" class="mathjax-container">\(L(\theta|x)\)</span> 不要求对 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 积分为 1，也不能直接解释为 <span displaypfx="inline-" class="mathjax-container">\(P(\theta|x)\)</span>。只有在贝叶斯框架里，把似然与先验（Prior） <span displaypfx="inline-" class="mathjax-container">\(p(\theta)\)</span> 相乘并做归一化之后，才得到参数的后验概率（Posterior）：</p>
<span displaypfx="" class="mathjax-container">\[p(\theta|x)=\frac{p(x|\theta)p(\theta)}{p(x)}\]</span>
<p>所以可以把三者关系记成一条清晰的链： <span displaypfx="inline-" class="mathjax-container">\(p(x|\theta)\)</span> 作为“关于 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 的函数”时是概率模型；作为“关于 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的函数”时是似然函数；再结合先验并归一化后，才变成参数的后验概率。很多机器学习教材里说“最小化交叉熵等价于最大化对数似然”，本质上就是固定数据后，在参数空间里寻找最能解释样本的模型。</p>
<div class="blog_h3"><span class="graybg">机器学习视角</span></div>
<p>在机器学习模型里，这种“同一个式子，换个视角名字就变”的现象非常常见。设模型写成 <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y|x)\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 是输入或上下文， <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 是真实标签或真实 token， <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 是模型参数。</p>
<p>当参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 固定、把输出 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 当作随机变量时， <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y|x)\)</span> 是概率模型：它回答“在这个模型已经定好的前提下，不同输出有多可能”。例如语言模型会对整个词表输出一个条件概率分布，其中 <span displaypfx="inline-" class="mathjax-container">\(c_t\)</span> 表示第 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 个位置之前的上下文（context）， <span displaypfx="inline-" class="mathjax-container">\(y_t\)</span> 表示该位置真实出现的 token，因此 <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y_t|c_t)\)</span> 就是“在上下文 <span displaypfx="inline-" class="mathjax-container">\(c_t\)</span> 下，模型给真实 token <span displaypfx="inline-" class="mathjax-container">\(y_t\)</span> 分配的概率”。</p>
<p>当观测到的 <span displaypfx="inline-" class="mathjax-container">\((x,y)\)</span> 固定、把参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 当作变量时，同一个式子 <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y|x)\)</span> 就变成似然：它回答“哪些参数更能让这条已经看到的数据显得合理”。于是训练时最大化似然，就等价于最小化负对数似然：</p>
<span displaypfx="" class="mathjax-container">\[-\log p_\theta(y|x)\]</span>
<p>因此可以把这个困惑直接拆开：<span style="background-color: #c0c0c0;">固定参数看输出，它是概率；固定输出看参数，它是似然；对它取负对数后，它就是训练里使用的损失项</span>。在语言建模里，对一个具体 token 而言，给定当前模型参数后， <span displaypfx="inline-" class="mathjax-container">\(-\log p_\theta(y_t|c_t)\)</span> 既可以看成该 token 的负对数概率，也可以在训练语境下看成该 token 对参数的负对数似然；两者是同一个数值对象，只是观察角度不同。</p>
<div class="blog_h2"><span class="graybg">基本概率</span></div>
<p>概率（Probability）描述不确定事件发生的可能性。设样本空间（Sample Space）为 <span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span>，事件（Event）为 <span displaypfx="inline-" class="mathjax-container">\(A\subseteq\Omega\)</span>，则概率公理要求 <span displaypfx="inline-" class="mathjax-container">\(P(A)\in[0,1]\)</span>、<span displaypfx="inline-" class="mathjax-container">\(P(\Omega)=1\)</span>，以及互斥事件可加。这里“互斥事件可加”的意思是：如果两个事件不能同时发生，即 <span displaypfx="inline-" class="mathjax-container">\(A\cap B=\{\}\)</span>，那么“<span displaypfx="inline-" class="mathjax-container">\(A\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 发生”的概率就是两者概率直接相加：</p>
<span displaypfx="" class="mathjax-container">\[P(A\cup B)=P(A)+P(B),\quad A\cap B=\{\}\]</span>
<p>之所以能直接相加，是因为两者没有重叠部分，不会重复计数。若有重叠，则不能直接相加，而要减去交集 <span displaypfx="inline-" class="mathjax-container">\(P(A\cap B)\)</span>。</p>
<p>最小例子：掷一枚公平六面骰。样本空间是 <span displaypfx="inline-" class="mathjax-container">\(\Omega=\{1,2,3,4,5,6\}\)</span>。若事件 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 表示“点数为 1”，事件 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 表示“点数为 2”，则它们互斥，因此 <span displaypfx="inline-" class="mathjax-container">\(P(A\cup B)=1/6+1/6=1/3\)</span>。再看一个非互斥例子：若事件 <span displaypfx="inline-" class="mathjax-container">\(C\)</span> 表示“点数为偶数”，则 <span displaypfx="inline-" class="mathjax-container">\(C=\{2,4,6\}\)</span>，因此 <span displaypfx="inline-" class="mathjax-container">\(P(C)=3/6=1/2\)</span>。</p>
<div class="blog_h3"><span class="graybg">联合概率</span></div>
<p>联合概率（Joint Probability）表示多个事件同时发生的概率，即 <span displaypfx="inline-" class="mathjax-container">\(P(A,B)=P(A\cap B)\)</span>。它回答的是“这些条件一起成立的可能性有多大”。</p>
<span displaypfx="" class="mathjax-container">\[P(A,B)=P(A\cap B)\]</span>
<p>仍用骰子例子：令 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 表示“点数为偶数”，<span displaypfx="inline-" class="mathjax-container">\(B\)</span> 表示“点数至少为 4”，则 <span displaypfx="inline-" class="mathjax-container">\(A\cap B=\{4,6\}\)</span>，所以 <span displaypfx="inline-" class="mathjax-container">\(P(A,B)=2/6=1/3\)</span>。在机器学习里，联合分布 <span displaypfx="inline-" class="mathjax-container">\(p(x,y)\)</span> 表示“输入 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 与标签 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 一起出现”的总体规律。</p>
<div class="blog_h3"><span class="graybg">独立性与乘法法则</span></div>
<p>独立（Independence）表示一个事件是否发生，不会改变另一个事件发生的概率。若事件 <span displaypfx="inline-" class="mathjax-container">\(A,B\)</span> 相互独立，则它们同时发生的概率可直接写成概率乘积：</p>
<span displaypfx="" class="mathjax-container">\[P(A\cap B)=P(A)P(B)\]</span>
<p>更一般地，若 <span displaypfx="inline-" class="mathjax-container">\(A_1,\dots,A_n\)</span> 相互独立，则</p>
<span displaypfx="" class="mathjax-container">\[P\!\left(\bigcap_{i=1}^{n}A_i\right)=\prod_{i=1}^{n}P(A_i)\]</span>
<p>例：掷一枚公平硬币并同时掷一枚公平骰子。令 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 表示“硬币为正面”，<span displaypfx="inline-" class="mathjax-container">\(B\)</span> 表示“骰子为偶数”，则 <span displaypfx="inline-" class="mathjax-container">\(P(A)=1/2\)</span>、<span displaypfx="inline-" class="mathjax-container">\(P(B)=1/2\)</span>，且二者独立，因此 <span displaypfx="inline-" class="mathjax-container">\(P(A\cap B)=1/2\times 1/2=1/4\)</span>。</p>
<p>独立时还可等价写成 <span displaypfx="inline-" class="mathjax-container">\(P(A|B)=P(A)\)</span>：知道 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 发生，并不会改变对 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的判断。</p>
<p>要注意：互斥（Mutually Exclusive）和独立（Independent）并非一回事。互斥表示不能同时发生；独立表示是否发生彼此无关。对非零概率事件而言，互斥通常意味着<span style="background-color: #c0c0c0;">不独立</span>，因为一旦知道 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 发生，就立刻知道 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 不可能发生。</p>
<div class="blog_h3"><span class="graybg">条件概率</span></div>
<p>条件概率（Conditional Probability）表示“已知 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 发生时，<span displaypfx="inline-" class="mathjax-container">\(A\)</span> 发生的概率”：</p>
<span displaypfx="" class="mathjax-container">\[P(A|B)=\frac{P(A,B)}{P(B)},\quad P(B)&gt;0\]</span>
<p>关键点核心是<span style="background-color: #c0c0c0;">样本空间被缩小了</span>。在上面的骰子例子中，已知 <span displaypfx="inline-" class="mathjax-container">\(B\)</span>（点数至少为 4）后，只剩 <span displaypfx="inline-" class="mathjax-container">\(\{4,5,6\}\)</span> 三种可能，其中偶数是 <span displaypfx="inline-" class="mathjax-container">\(\{4,6\}\)</span>，所以 <span displaypfx="inline-" class="mathjax-container">\(P(A|B)=2/3\)</span>，明显不同于原来的 <span displaypfx="inline-" class="mathjax-container">\(P(A)=1/2\)</span>。</p>
<p>在建模中，几乎所有监督学习目标都可写成条件概率最大化，例如分类模型学习的是 <span displaypfx="inline-" class="mathjax-container">\(P(y|x)\)</span>：给定特征 <span displaypfx="inline-" class="mathjax-container">\(x\)</span>，标签 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 的概率有多大。</p>
<div class="blog_h3"><span class="graybg">边缘概率</span></div>
<p>边缘概率（Marginal Probability）是把不关心的变量“求和/积分掉”后得到的概率：</p>
<span displaypfx="" class="mathjax-container">\[P(A)=\sum_b P(A,b),\quad p(x)=\int p(x,z)\,dz\]</span>
<p>这两个公式的意思完全一致，只是分别对应离散情形与连续情形。 <span displaypfx="inline-" class="mathjax-container">\(P(A,b)\)</span> 表示“<span displaypfx="inline-" class="mathjax-container">\(A\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 同时发生”的联合概率；若现在只关心 <span displaypfx="inline-" class="mathjax-container">\(A\)</span>，就必须把所有可能的 <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 都加起来。连续情形下同理： <span displaypfx="inline-" class="mathjax-container">\(p(x,z)\)</span> 是关于 <span displaypfx="inline-" class="mathjax-container">\((x,z)\)</span> 的联合密度，若只关心 <span displaypfx="inline-" class="mathjax-container">\(x\)</span>，就把所有 <span displaypfx="inline-" class="mathjax-container">\(z\)</span> 的可能性沿该维度积分掉，得到 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span>。</p>
<p>几何上，可以把边缘化（Marginalization）理解为<span style="background-color: #c0c0c0;">把高维分布沿某个方向压扁后得到的投影</span>。设二维联合分布的两个维度分别是身高与体重，平面上的每个位置都对应一个联合概率密度 <span displaypfx="inline-" class="mathjax-container">\(p(\text{height},\text{weight})\)</span>。如果现在根本不关心体重，只想知道身高的总体分布，那么就把每个固定身高处、沿着体重方向的所有概率质量全部累加起来；累加后的结果就是该身高对应的边缘密度 <span displaypfx="inline-" class="mathjax-container">\(p(\text{height})\)</span>。</p>
<p>因此，求和符号 <span displaypfx="inline-" class="mathjax-container">\(\sum_b P(A,b)\)</span> 或积分符号 <span displaypfx="inline-" class="mathjax-container">\(\int p(x,z)\,dz\)</span> 的几何含义，核心是<span style="background-color: #c0c0c0;">把那个维度上的所有可能性叠加到剩余维度上</span>。它像从侧面看一个三维物体的投影：原来的结构仍然在，但你只保留了当前关心的坐标轴信息。</p>
<p>在 AI 中，边缘概率几乎总伴随着隐藏变量（Latent Variable）。例如主题模型里 <span displaypfx="inline-" class="mathjax-container">\(z\)</span> 可以表示隐藏主题（Hidden Topic），<span displaypfx="inline-" class="mathjax-container">\(x\)</span> 表示某个词；若只关心词出现的总体概率，就要把主题变量消去，得到 <span displaypfx="inline-" class="mathjax-container">\(p(x)=\sum_z p(x,z)\)</span>。很多推断算法的难点，本质上就是这个“沿隐藏维度求和/积分”的步骤代价很高。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/marginzation.jpg"><img class="alignnone size-full wp-image-40833" src="https://blog.gmem.cc/wp-content/uploads/2026/03/marginzation.jpg" alt="marginzation" width="100%" /></a></p>
<div class="blog_h3"><span class="graybg">补事件</span></div>
<p>补事件（Complementary Event）满足</p>
<span displaypfx="" class="mathjax-container">\[P(A^c)=1-P(A)\]</span>
<p>它表示“<span displaypfx="inline-" class="mathjax-container">\(A\)</span> 不发生”的概率等于总概率 1 减去 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 发生的概率。</p>
<div class="blog_h3"><span class="graybg">全概率公式</span></div>
<p>第二，若 <span displaypfx="inline-" class="mathjax-container">\(A_1,\dots,A_n\)</span> 把样本空间划分为互斥且完备的几部分（即两两互斥，且并集为 <span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span>），则全概率公式（Law of Total Probability）为</p>
<span displaypfx="" class="mathjax-container">\[P(B)=\sum_{i=1}^{n}P(B|A_i)P(A_i)\]</span>
<p>它的含义是：事件 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 的总概率，可以拆成“先落入哪一种原因 <span displaypfx="inline-" class="mathjax-container">\(A_i\)</span>，再在该原因下发生 <span displaypfx="inline-" class="mathjax-container">\(B\)</span>”的加权和。贝叶斯公式中的分母 <span displaypfx="inline-" class="mathjax-container">\(P(B)\)</span>，很多时候就是用全概率公式展开出来的。</p>
<div class="blog_h2"><span class="graybg">贝叶斯定理</span></div>
<p>贝叶斯定理（Bayes' Theorem）把“从原因到结果”的概率反转为“从结果反推原因”：</p>
<span displaypfx="" class="mathjax-container">\[P(A|B)=\frac{P(B|A)\,P(A)}{P(B)}\]</span>
<p>把式子写出来并不难，真正容易混淆的是每一项到底在说什么。下面直接用一个具体场景来解释：设 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 表示“患者真的患病”，<span displaypfx="inline-" class="mathjax-container">\(B\)</span> 表示“检测结果为阳性”。已知患病率为 1%，检测的灵敏度（Sensitivity）为 99%，假阳性率（False Positive Rate）为 5%。则：</p>
<ul>
<li>先验（Prior） <span displaypfx="inline-" class="mathjax-container">\(P(A)\)</span>：在还没看到这次检测结果前，对“此人患病”的原始判断。在这个例子里，先验就是总体患病率 <span displaypfx="inline-" class="mathjax-container">\(P(A)=0.01\)</span>。</li>
<li>似然（Likelihood） <span displaypfx="inline-" class="mathjax-container">\(P(B|A)\)</span>：如果一个人确实患病，那么检测为阳性的概率有多大。在这个例子里，检测灵敏度是 99%，因此 <span displaypfx="inline-" class="mathjax-container">\(P(B|A)=0.99\)</span>。</li>
<li>证据（Evidence） <span displaypfx="inline-" class="mathjax-container">\(P(B)\)</span>：不管一个人是否患病，检测结果为阳性在总体上出现的概率。它等于“真阳性 + 假阳性”的总和： <span displaypfx="inline-" class="mathjax-container">\(P(B)=0.99\times 0.01 + 0.05\times 0.99 = 0.0594\)</span>。</li>
<li>后验（Posterior） <span displaypfx="inline-" class="mathjax-container">\(P(A|B)\)</span>：在已经看到“检测阳性”这个证据之后，此人真正患病的更新后概率。代入上面的数值，有</li>
</ul>
<span displaypfx="" class="mathjax-container">\[P(\text{disease}|+) = \frac{0.99\times 0.01}{0.99\times 0.01 + 0.05\times 0.99} = \frac{1}{6} \approx 16.7\%\]</span>
<p>因此，贝叶斯定理描述的是一个非常具体的更新过程：<span style="background-color: #c0c0c0;">先从原始信念出发，用证据对它重新加权，再归一化，得到更新后的信念</span>。它常被概括成：<span style="background-color: #c0c0c0;">后验 = 似然 × 先验 ÷ 证据</span>。</p>
<p>这个例子最重要的结论是：检测阳性后，真实患病概率只有约 16.7%。原因在于先验患病率本来就很低；假阳性虽然比例不高，但基数更大。<span style="background-color: #c0c0c0;">证据不会凭空决定结论，证据必须结合基线发生率一起解释</span>。在 AI 里，这就是“看到证据后更新信念”的统一公式：朴素贝叶斯分类、贝叶斯滤波、概率图模型都在做这件事。</p>
<div class="blog_h3"><span class="graybg">机器学习视角</span></div>
<p>从机器学习视角看，贝叶斯定理的价值在于它清楚地区分了<span style="background-color: #c0c0c0;">只看数据解释能力</span>与<span style="background-color: #c0c0c0;">把数据证据和先验知识合并起来</span>这两件事。前者对应似然（Likelihood）与最大似然估计（MLE），后者对应后验（Posterior）与最大后验估计（MAP）。</p>
<p>仍用上面的患病率例子。假设观测数据已经固定为“检测结果阳性”，把候选状态写成 <span displaypfx="inline-" class="mathjax-container">\(\theta\in\{\text{患病},\text{未患病}\}\)</span>。若只比较似然，则两个候选状态的评分分别是：</p>
<span displaypfx="" class="mathjax-container">\[L(\theta=\text{患病})=P(+|\text{患病})=0.99\]</span>
<span displaypfx="" class="mathjax-container">\[L(\theta=\text{未患病})=P(+|\text{未患病})=0.05\]</span>
<p>此时，按似然大小排序， <span displaypfx="inline-" class="mathjax-container">\(\theta=\text{患病}\)</span> 的确更优。这正是 MLE 式思路的核心：固定数据，寻找最能解释这份数据的候选参数或候选假设。但这里必须严格区分两件事：<span style="background-color: #c0c0c0;">“似然更大”只表示这个假设更能解释当前观测，不同于“它的后验概率就是 99%”</span>。因为似然没有把总体患病率只有 1% 这一先验事实算进去。</p>
<p>若进一步引入先验 <span displaypfx="inline-" class="mathjax-container">\(P(\text{患病})=0.01\)</span>、<span displaypfx="inline-" class="mathjax-container">\(P(\text{未患病})=0.99\)</span>，就得到后验比较：</p>
<span displaypfx="" class="mathjax-container">\[P(\text{患病}|+)\propto P(+|\text{患病})P(\text{患病})=0.99\times 0.01\]</span>
<span displaypfx="" class="mathjax-container">\[P(\text{未患病}|+)\propto P(+|\text{未患病})P(\text{未患病})=0.05\times 0.99\]</span>
<p>归一化之后， <span displaypfx="inline-" class="mathjax-container">\(P(\text{患病}|+)\approx 16.7\%\)</span>。这就是 MAP / 贝叶斯决策与单纯 MLE 的差别：后验判断不仅问“谁更能解释这份数据”，还问“谁在看到数据之前本来就更常见”。在类别极不平衡、小样本、先验知识明确或误判成本不对称的问题里，这个差别往往是决定性的。</p>
<p>朴素贝叶斯（Naive Bayes）正是把这套思路直接写成分类器。给定特征向量 <span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{x}\)</span> 和类别 <span displaypfx="inline-" class="mathjax-container">\(y\)</span>，它比较的是后验概率</p>
<span displaypfx="" class="mathjax-container">\[p(y|\boldsymbol{x})\propto p(y)\,p(\boldsymbol{x}|y)\]</span>
<p>再在条件独立假设下展开成</p>
<span displaypfx="" class="mathjax-container">\[p(y|\boldsymbol{x})\propto p(y)\prod_{j=1}^{d}p(x_j|y)\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(p(y)\)</span> 是类别先验，负责表达“哪类样本本来就更常见”； <span displaypfx="inline-" class="mathjax-container">\(p(x_j|y)\)</span> 是条件似然，负责表达“若类别固定，这个特征出现得是否合理”。训练阶段通常先从数据中估计这些概率；最简单的做法是 MLE，即直接用频数比估计先验和条件概率。若再加入拉普拉斯平滑（Laplace Smoothing）或更一般的共轭先验（Conjugate Prior），则更接近 MAP 估计。预测阶段再把先验与似然相乘并归一化，得到后验分数最高的类别。</p>
<p>因此，从机器学习角度看，贝叶斯定理不仅概率论中的一条恒等式，还一个完整的建模分工：<span style="background-color: #c0c0c0;">似然负责解释数据，先验负责表达归纳偏置，后验负责把两者合成为最终判断</span>。后面的 MLE、MAP 与朴素贝叶斯，只是这套分工在不同任务上的具体实现。</p>
<div class="blog_h2"><span class="graybg">概率分布</span></div>
<p>这里的“分布（Distribution）”指随机变量取值的不确定性如何在取值空间上分配。严格地说，概率分布（Probability Distribution）是一种概率测度（Probability Measure），它为每个事件 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 赋予概率 <span displaypfx="inline-" class="mathjax-container">\(P(A)\)</span>。</p>
<p>对一维实值随机变量 <span displaypfx="inline-" class="mathjax-container">\(X\)</span>，分布最常用的统一表述是累积分布函数（Cumulative Distribution Function, CDF）<span displaypfx="inline-" class="mathjax-container">\(F(x)=P(X\le x)\)</span>。离散与连续的差别，主要体现在如何从 <span displaypfx="inline-" class="mathjax-container">\(F\)</span> 得到“点上/区间上”的概率。</p>
<p>不同任务对应不同的数据分布假设（Distribution Assumption）。分布选得对，建模与推断会更稳定；分布假设错得太远，参数估计、置信区间乃至损失函数解释都会失真。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot_six_basic_dist.png"><img class="alignnone size-full wp-image-40921" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot_six_basic_dist.png" alt="plot_six_basic_dist" width="1848" height="1473" /></a></p>
<div class="blog_h3"><span class="graybg">概率密度/概率质量函数</span></div>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 是离散型随机变量，其概率质量函数（Probability Mass Function, PMF）为 <span displaypfx="inline-" class="mathjax-container">\(p(x)=P(X=x)\)</span>，并满足 <span displaypfx="inline-" class="mathjax-container">\(\sum_x p(x)=1\)</span>。</p>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 是连续型随机变量，其概率密度函数（Probability Density Function, PDF）为 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span>，满足 <span displaypfx="inline-" class="mathjax-container">\(p(x)\ge 0\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\int_{-\infty}^{+\infty} p(x)\,dx=1\)</span>；区间概率由积分给出：<span displaypfx="inline-" class="mathjax-container">\(P(a\le X\le b)=\int_a^b p(x)\,dx\)</span>。因此 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 本身并非“点上概率”。</p>
<p>两者都可写成同一 CDF 关系：连续情形 <span displaypfx="inline-" class="mathjax-container">\(F(x)=\int_{-\infty}^{x} p(t)\,dt\)</span>，离散情形 <span displaypfx="inline-" class="mathjax-container">\(F(x)=\sum_{t\le x} p(t)\)</span>。</p>
<div class="blog_h3"><span class="graybg">高斯分布（正态分布）</span></div>
<p>高斯分布（Gaussian / Normal Distribution）由均值 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span> 与方差 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 决定：</p>
<span displaypfx="" class="mathjax-container">\[p(x)=\frac{1}{\sqrt{2\pi}\sigma}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)\]</span>
<p>它的图像是熟悉的“钟形曲线（Bell Curve）”：离 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span> 越近，概率密度越高；离得越远，概率密度衰减越快。大量独立小扰动叠加后常近似高斯（中心极限定理的结果），所以测量误差、回归残差、传感器噪声、嵌入向量某些方向上的统计近似都常采用高斯模型。</p>
<p>例：若成年男性身高近似服从 <span displaypfx="inline-" class="mathjax-container">\(\mathcal{N}(170,6^2)\)</span>，则 170 cm 附近最常见，而 190 cm 属于离均值超过 3 个标准差的少见样本。回归里假设残差服从高斯，本质上是在说“误差多数小、极大误差少”。</p>
<div class="blog_h3"><span class="graybg">拉普拉斯分布</span></div>
<p>拉普拉斯分布（Laplace Distribution）也是定义在实数轴上的连续分布，常用位置参数（Location） <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span> 与尺度参数（Scale） <span displaypfx="inline-" class="mathjax-container">\(b&gt;0\)</span> 描述：</p>
<span displaypfx="" class="mathjax-container">\[p(x)=\frac{1}{2b}\exp\left(-\frac{|x-\mu|}{b}\right)\]</span>
<p>它的图像在中心点 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span> 处更尖、尾部比高斯分布更厚（Heavier Tails）。这表示模型更偏好“大多数误差很小，但偶尔出现相对较大偏差”这一类数据形状，因此它对离群点（Outliers）的容忍度通常高于高斯模型。</p>
<p>拉普拉斯分布和绝对误差（Absolute Error）关系非常紧密：若回归残差假设服从拉普拉斯分布，那么最大似然估计会导向 <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 损失；若把参数先验设为拉普拉斯分布，最大后验估计则会导向 <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 正则。这也是它在稀疏建模（Sparse Modeling）和鲁棒回归（Robust Regression）里很常见的原因。</p>
<p>例：若某传感器大多数时刻误差接近 0，但偶尔会因为抖动或遮挡产生较大的偏差，那么用拉普拉斯分布描述误差，往往比高斯分布更贴近这种“中心尖、尾部较厚”的统计形状。</p>
<div class="blog_h3"><span class="graybg">伯努利分布</span></div>
<p>伯努利分布（Bernoulli Distribution）描述一次二元结果试验（0/1）：</p>
<span displaypfx="" class="mathjax-container">\[P(X=1)=p,\quad P(X=0)=1-p\]</span>
<p>它是二分类标签建模的最小单元，也是逻辑回归与二分类交叉熵的概率基础。若 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 表示“用户是否点击广告”，则 <span displaypfx="inline-" class="mathjax-container">\(X=1\)</span> 代表点击、<span displaypfx="inline-" class="mathjax-container">\(X=0\)</span> 代表未点击，模型输出的 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 就是点击概率。</p>
<p>伯努利变量的期望是 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]=p\)</span>，方差是 <span displaypfx="inline-" class="mathjax-container">\(p(1-p)\)</span>。因此当 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 接近 0 或 1 时，不确定性反而更小；当 <span displaypfx="inline-" class="mathjax-container">\(p=0.5\)</span> 时，不确定性最大。</p>
<p>如果把同一个伯努利试验独立重复 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 次，并把成功次数加总，那么得到的就是二项分布（Binomial Distribution）。伯努利分布描述“单次是否成功”，二项分布描述“总共成功了多少次”。</p>
<div class="blog_h3"><span class="graybg">二项分布</span></div>
<p>二项分布（Binomial Distribution）描述 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 次独立伯努利试验中的成功次数。若每次成功概率都是 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>，随机变量 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 表示总成功次数，则</p>
<span displaypfx="" class="mathjax-container">\[P(X=k)={n \choose k}p^k(1-p)^{n-k},\quad k=0,1,\dots,n\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\({n \choose k}\)</span> 表示“从 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 次试验里选出 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 次成功”的组合数；后面的 <span displaypfx="inline-" class="mathjax-container">\(p^k(1-p)^{n-k}\)</span> 表示某一种具体排列出现的概率。两者相乘，就得到“恰好成功 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 次”的总概率。</p>
<p>如果 <span displaypfx="inline-" class="mathjax-container">\(X_1,\dots,X_n\)</span> 独立同分布且 <span displaypfx="inline-" class="mathjax-container">\(X_i\sim\mathrm{Bernoulli}(p)\)</span>，那么它们的和</p>
<span displaypfx="" class="mathjax-container">\[S_n=\sum_{i=1}^{n}X_i\sim\mathrm{Binomial}(n,p)\]</span>
<p>因此，二项分布本质上就是“多个伯努利随机变量求和后的分布”。它的期望是 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]=np\)</span>，方差是 <span displaypfx="inline-" class="mathjax-container">\(np(1-p)\)</span>。</p>
<p>例：若一枚硬币正面概率为 <span displaypfx="inline-" class="mathjax-container">\(p=0.7\)</span>，连续抛 10 次，则“正面出现几次”服从二项分布。此时恰好出现 7 次正面的概率是</p>
<span displaypfx="" class="mathjax-container">\[P(X=7)={10 \choose 7}0.7^7 0.3^3\]</span>
<div class="blog_h3"><span class="graybg">多项式分布</span></div>
<p>多项式分布（Multinomial Distribution）是“多类别计数版”的伯努利：进行 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 次独立试验，类别概率为 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{p}\)</span>，计数向量 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{k}\)</span> 的概率为</p>
<span displaypfx="" class="mathjax-container">\[P(\mathbf{k})=\frac{n!}{\prod_i k_i!}\prod_i p_i^{k_i},\quad \sum_i k_i=n\]</span>
<p>若只有一次抽样，通常写作分类分布（Categorical Distribution）：</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/distribution-categorical.png"><img class="alignnone size-full wp-image-40867" src="https://blog.gmem.cc/wp-content/uploads/2026/03/distribution-categorical.png" alt="distribution-categorical" width="100%" /></a></p>
<p>若把一次抽样重复 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 次并统计每类出现次数，就得到多项式分布，语言模型里的词频计数、主题模型中的词袋（Bag of Words）都与这种计数视角一致。概率分布一节的第三个图就是多项式分布：总计抽样6次，横轴表示分类1的次数，纵轴表示分类2的次数（因为只有3分类，因此不需要绘制三维），颜色表示抽取到不同分类的次数组合的概率。</p>
<div class="blog_h3"><span class="graybg">泊松分布</span></div>
<p>泊松分布（Poisson Distribution）描述单位时间或单位空间内稀有事件的发生次数：</p>
<span displaypfx="" class="mathjax-container">\[P(X=k)=e^{-\lambda}\frac{\lambda^k}{k!},\quad k=0,1,2,\ldots\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span> 既是平均发生次数，也是方差。它适用于“事件相互独立、平均速率稳定、短时间内多次同时发生概率很小”的场景，例如单位分钟请求数、单位小时故障数、单位页面点击数。</p>
<p>例：若一个接口平均每分钟收到 3 次请求，则 <span displaypfx="inline-" class="mathjax-container">\(\lambda=3\)</span>。此时一分钟内 0 次请求的概率是 <span displaypfx="inline-" class="mathjax-container">\(e^{-3}\approx 0.05\)</span>；5 次请求的概率是 <span displaypfx="inline-" class="mathjax-container">\(e^{-3}3^5/5!\approx 0.10\)</span>。泊松分布常被用来做“到达数 / 故障数 / 事件数”建模。</p>
<div class="blog_h2"><span class="graybg">期望</span></div>
<p>期望（Expectation）是随机变量的“按概率加权的平均”，回答“长期来看这个量的典型水平在哪里”。离散情形下，它把每个可能取值按对应概率加权；连续情形下，则对概率密度做积分：</p>
<span displaypfx="" class="mathjax-container">\[\mathbb{E}[X]=\sum_x x\,p(x)\ \ (\text{或 } \int x\,p(x)\,dx)\]</span>
<p><span style="background-color: #c0c0c0;">期望和均值很像，但并非同一个概念。</span> 期望（Expectation）是总体分布层面的量，由概率模型 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 决定，描述“如果无限次重复抽样，平均会稳定到哪里”；均值（Mean）通常有两种语境：一是把总体的中心位置也叫“总体均值”，这时它与期望是同一个量；二是指有限样本算出来的样本均值（Sample Mean） <span displaypfx="inline-" class="mathjax-container">\(\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i\)</span>，这是用样本近似期望的统计量。</p>
<p>因此可以把三者关系记成：<span style="background-color: #c0c0c0;">总体均值 = 期望；样本均值 = 对期望的估计</span>。例如公平骰子点数的期望是 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]=3.5\)</span>；如果你真的掷 6 次，样本均值可能是 3、4 或 4.5，不必恰好等于 3.5，但随着试验次数增多，它会越来越接近期望。</p>
<p>期望最重要的性质之一是线性性（Linearity）：<span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[aX+b]=a\mathbb{E}[X]+b\)</span>，不要求独立。例：公平骰子点数 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 的期望是 <span displaypfx="inline-" class="mathjax-container">\((1+2+3+4+5+6)/6=3.5\)</span>；若收入模型写成 <span displaypfx="inline-" class="mathjax-container">\(Y=2X+1\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[Y]=2\times 3.5+1=8\)</span>。</p>
<div class="blog_h2"><span class="graybg">矩（Moments）</span></div>
<p>矩（Moment）是概率统计里用来概括分布形状的一组数。理论上，“第 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 阶”指对 <span displaypfx="inline-" class="mathjax-container">\(k\)</span> 次幂取期望：矩天然与期望/均值绑定。</p>
<p>常用两类定义是：</p>
<ul>
<li>原点矩（Raw Moment / Non-central Moment）：<span displaypfx="inline-" class="mathjax-container">\(m_k=\mathbb{E}[X^k]\)</span>（以 0 为参照）。</li>
<li>中心矩（Central Moment）：<span displaypfx="inline-" class="mathjax-container">\(\mu_k=\mathbb{E}\big[(X-\mathbb{E}[X])^k\big]\)</span>（以均值为参照）。</li>
</ul>
<p>直觉上可以用“跷跷板”来理解：把概率质量看作分布在数轴上的“重量”，期望/均值决定“支点放哪里”才平衡；更高阶矩描述“重量围绕支点如何分布”。</p>
<p>一阶矩（First Moment）回答“中心在哪里”：均值/期望 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]\)</span> 给出平衡点。但<span style="background-color: #c0c0c0;">一阶矩无法刻画离散程度</span>：例如 <span displaypfx="inline-" class="mathjax-container">\(X\in\{-1,+1\}\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(X\in\{-10,+10\}\)</span> 都满足 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]=0\)</span>，但后者离中心更远。</p>
<p>二阶量用平方偏差的期望刻画离散程度：平方保证非负、避免正负偏差相互抵消，并对远离均值的样本赋予更大权重。在统计里，这对应二阶中心矩——方差 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(X)=\mathbb{E}[(X-\mathbb{E}[X])^2]\)</span>；在力学类比里，这与转动惯量（Moment of Inertia）中按 <span displaypfx="inline-" class="mathjax-container">\(r^2\)</span> 加权的直觉一致：远处的“重量”对系统的“难摆动/难转动”贡献更大。</p>
<p>二阶原点矩与方差之间满足恒等式：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{Var}(X)=\mathbb{E}\big[(X-\mathbb{E}[X])^2\big]=\mathbb{E}[X^2]-\mathbb{E}[X]^2\]</span>
<span displaypfx="" class="mathjax-container">\[\mathbb{E}[X^2]=\mathrm{Var}(X)+\mathbb{E}[X]^2\]</span>
<p>它说明二阶原点矩 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X^2]\)</span> 以 0 为参照，会把两类效应叠加在一起：一是分布整体离 0 的偏移（由均值项 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]^2\)</span> 表示），二是围绕自身均值的离散/抖动（由方差项 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(X)\)</span> 表示）。因此 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X^2]\)</span> 变大并不等价于“波动更大”；把所有取值整体平移一个常数，方差不变，但二阶原点矩会随偏移显著改变。</p>
<p>一个最小例子可以把差异看得非常清楚。令 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 等概率取值 <span displaypfx="inline-" class="mathjax-container">\(\{99,100,101\}\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[\mathbb{E}[X]=\frac{99+100+101}{3}=100,\quad \mathbb{E}[X]^2=100^2=10000\]</span>
<span displaypfx="" class="mathjax-container">\[\mathbb{E}[X^2]=\frac{99^2+100^2+101^2}{3}=\frac{30002}{3}\approx 10000.67\]</span>
<span displaypfx="" class="mathjax-container">\[\mathrm{Var}(X)=\mathbb{E}[X^2]-\mathbb{E}[X]^2=\frac{30002}{3}-10000=\frac{2}{3}\]</span>
<p>这句话表达的是：这组数“离 0 很远”（所以 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X^2]\)</span> 很大），但“围绕自身均值很稳定”（所以方差很小）。</p>
<p>这也解释了 Adam 里的常见误解。Adam 说的“一阶矩/二阶矩”是把 mini-batch 梯度 <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 当作随机变量，分别估计 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[g]\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[g^2]\)</span>（逐参数维度）。它用的是二阶原点矩 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[g^2]\)</span>，并非方差 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(g)\)</span>。原因很直接：如果梯度在一段时间内几乎恒定（例如每步都是 <span displaypfx="inline-" class="mathjax-container">\(g=10\)</span>），那么方差为 0，拿它做除法会造成数值灾难；但 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[g^2]=100\)</span> 给出了稳定的“绝对尺度”，使更新项 <span displaypfx="inline-" class="mathjax-container">\(\frac{\mathbb{E}[g]}{\sqrt{\mathbb{E}[g^2]}}\)</span> 仍然是有界的（再加上 <span displaypfx="inline-" class="mathjax-container">\(\epsilon\)</span> 做数值稳定）。</p>
<div class="blog_h2"><span class="graybg">方差</span></div>
<p>方差（Variance）衡量随机变量围绕均值的波动大小。它核心是“偏离均值的平方再平均”；平方的作用是避免正负抵消，并放大大偏差：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{Var}(X)=\mathbb{E}[(X-\mu)^2]\]</span>
<p>因此，方差小表示样本更集中在均值附近；方差大表示波动更强。它刻画的是“不确定性的尺度”，而非取值本身的大小。例如两个模型的平均误差相同，方差更大的那个模型，输出往往更不稳定。</p>
<div class="blog_h2"><span class="graybg">协方差</span></div>
<p>协方差（Covariance）描述两个变量是否倾向同向变化：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{Cov}(X,Y)=\mathbb{E}[(X-\mu_X)(Y-\mu_Y)]\]</span>
<p>若 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Cov}(X,Y)&gt;0\)</span>，说明 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 大时 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 也倾向变大；若 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Cov}(X,Y)&lt;0\)</span>，说明一个变大时另一个倾向变小。直觉例子是：身高与体重常为正协方差，室外温度与暖气功率常为负协方差。</p>
<p>还要区分一点：协方差为 0 不必然意味着独立。例如令 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(\{-1,1\}\)</span> 上等概率取值，定义 <span displaypfx="inline-" class="mathjax-container">\(Y=X^2\)</span>，则 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 被 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 完全决定，但 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Cov}(X,Y)=0\)</span>。因此“零相关”比“独立”弱得多。</p>
<p>协方差矩阵（Covariance Matrix）<span displaypfx="inline-" class="mathjax-container">\(\Sigma\)</span> 在 AI 中极其关键：PCA、马氏距离（Mahalanobis Distance）、卡尔曼滤波与高斯模型都直接依赖它。它编码的是“各方向上的尺度”与“不同维度之间的耦合”。</p>
<div class="blog_h2"><span class="graybg">标准差（Standard Deviation）</span></div>
<p>标准差（Standard Deviation）衡量数据相对均值（Mean）的离散程度（Dispersion）。总体标准差（Population Standard Deviation）定义为：</p>
<span displaypfx="" class="mathjax-container">\[\sigma=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\mu)^2}\]</span>
<p>样本标准差（Sample Standard Deviation）使用贝塞尔校正（Bessel's Correction）：</p>
<span displaypfx="" class="mathjax-container">\[s=\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2}\]</span>
<p>先平方再平均是为了避免正负抵消并加重大偏差；最后开平方是为了把单位恢复到原始尺度。若直接用方差，单位会变成“平方单位”，解释往往不直观；标准差则可以直接说成“典型偏离均值大约多少个原始单位”。</p>
<p>例：数据 <span displaypfx="inline-" class="mathjax-container">\(\{2,4,4,4,5,5,7,9\}\)</span> 的均值是 <span displaypfx="inline-" class="mathjax-container">\(5\)</span>，总体方差是 <span displaypfx="inline-" class="mathjax-container">\(4\)</span>，标准差是 <span displaypfx="inline-" class="mathjax-container">\(2\)</span>。这意味着一个典型样本与均值的偏离量级大约是 2，而非每个点都恰好偏 2。</p>
<p>标准差还常被用来做标准化（Standardization）。例如某考试分数 80 分，班级均值 70、标准差 5，则它的 z-score 是 <span displaypfx="inline-" class="mathjax-container">\((80-70)/5=2\)</span>，表示它比均值高 2 个标准差。近似正态分布下，经验上约有 68% 样本落在 <span displaypfx="inline-" class="mathjax-container">\(\mu\pm\sigma\)</span>，95% 落在 <span displaypfx="inline-" class="mathjax-container">\(\mu\pm2\sigma\)</span>，99.7% 落在 <span displaypfx="inline-" class="mathjax-container">\(\mu\pm3\sigma\)</span>；这就是常见的 68-95-99.7 规则。</p>
<div class="blog_h2"><span class="graybg">最大似然估计（MLE）</span></div>
<p>最大似然估计（Maximum Likelihood Estimation, MLE）先把已经观察到的数据（例如上面抛硬币10次有8次正面）固定住，再在参数空间里寻找“最能生成这批数据”的参数。设数据集为 <span displaypfx="inline-" class="mathjax-container">\(D=\{x_1,\dots,x_n\}\)</span>，参数为 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>，则定义是：</p>
<span displaypfx="" class="mathjax-container">\[\hat{\theta}_{\mathrm{MLE}}=\arg\max_{\theta}p(D|\theta)\]</span>
<p>其中<span displaypfx="inline-" class="mathjax-container">\(p(D|\theta)\)</span> 是“参数取 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 时看到整批数据 <span displaypfx="inline-" class="mathjax-container">\(D\)</span> 的概率/密度”； <span displaypfx="inline-" class="mathjax-container">\(\arg\max\)</span> 表示“找出让这个值最大的那个参数”。</p>
<p>若样本独立同分布（不相关且在同一个分布，例如抛硬币中10个独立事件。Independent and Identically Distributed, i.i.d.），联合似然可以拆成单个样本似然的乘积：</p>
<span displaypfx="" class="mathjax-container">\[p(D|\theta)=\prod_{i=1}^{n}p(x_i|\theta)\]</span>
<p>于是 MLE 常写成</p>
<span displaypfx="" class="mathjax-container">\[\hat{\theta}_{\mathrm{MLE}}=\arg\max_{\theta}\prod_{i=1}^{n}p(x_i|\theta)\]</span>
<p>实际训练几乎总是改为最大化对数似然（Log-Likelihood）：</p>
<span displaypfx="" class="mathjax-container">\[\ell(\theta)=\log p(D|\theta)=\sum_{i=1}^{n}\log p(x_i|\theta)\]</span>
<p><span style="background-color: #c0c0c0;">取对数不会改变最优解</span>，因为 <span displaypfx="inline-" class="mathjax-container">\(\log\)</span> 是单调递增函数；它只是把难处理的连乘变成易处理的求和。因此，最大化似然与最小化负对数似然（Negative Log-Likelihood, NLL）完全等价。</p>
<p>继续看抛硬币的例子。设单次结果 <span displaypfx="inline-" class="mathjax-container">\(x_i\in\{0,1\}\)</span>，其中 1 表示正面，0 表示反面。设正面概率为 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>，那么单个样本就服从伯努利分布（Bernoulli Distribution）。它的概率质量函数（Probability Mass Function, PMF，用于描述离散随机变量，直接给出概率。对应概率密度函数PDF，给出给定连续随机变量对应位置的密度，因为连续，特定点的概率必须为0，只能密度和变量范围积分得到概率）写成：</p>
<span displaypfx="" class="mathjax-container">\[p(x_i|\theta)=\theta^{x_i}(1-\theta)^{1-x_i},\quad x_i\in\{0,1\}\]</span>
<p>左边的 <span displaypfx="inline-" class="mathjax-container">\(p(\cdot|\theta)\)</span> 里的 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 是“概率分布/概率质量函数”的记号， <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 是模型参数，也就是“正面概率”。很多教材会把参数也记成 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>，写成 <span displaypfx="inline-" class="mathjax-container">\(p(x_i|p)\)</span>；这并不算错，因为参数本身就是一个概率，但两个 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 同时出现时很容易视觉混淆，所以这里改用 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 来区分“模型符号”和“参数符号”。</p>
<p>当 <span displaypfx="inline-" class="mathjax-container">\(x_i=1\)</span> 时，</p>
<span displaypfx="" class="mathjax-container">\[p(x_i=1|\theta)=\theta^1(1-\theta)^0=\theta\]</span>
<p>当 <span displaypfx="inline-" class="mathjax-container">\(x_i=0\)</span> 时，</p>
<span displaypfx="" class="mathjax-container">\[p(x_i=0|\theta)=\theta^0(1-\theta)^1=1-\theta\]</span>
<p>如果 10 次里看到 7 次正面、3 次反面，那么整批数据的似然就是：</p>
<span displaypfx="" class="mathjax-container">\[p(D|\theta)=\theta^7(1-\theta)^3\]</span>
<p>对应的对数似然是</p>
<span displaypfx="" class="mathjax-container">\[\ell(\theta)=7\log \theta+3\log(1-\theta)\]</span>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-binomial-loglik.png"><img class="alignnone size-full wp-image-41091" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-binomial-loglik.png" alt="plot-binomial-loglik" width="100%" /></a></p>
<p>我们现在要最大化似然，需要对 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 求导并令导数为 0：</p>
<span displaypfx="" class="mathjax-container">\[\frac{d\ell(\theta)}{d\theta}=\frac{7}{\theta}-\frac{3}{1-\theta}=0\Rightarrow \theta=0.7\]</span>
<p>所以 <span displaypfx="inline-" class="mathjax-container">\(\hat{\theta}_{\mathrm{MLE}}=0.7\)</span>。即“在所有候选 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 里， <span displaypfx="inline-" class="mathjax-container">\(\theta=0.7\)</span> 最能让 7 正 3 反这份数据显得不奇怪”。</p>
<div class="blog_h3"><span class="graybg">从概率建模到损失函数</span></div>
<p>在机器学习里，损失函数往往由<span style="background-color: #c0c0c0;">概率建模假设（Probabilistic Modeling Assumption）</span>诱导出来。做法是先写下观测数据在参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 下的概率模型，再把训练集的负对数似然（Negative Log-Likelihood, NLL）当作优化目标。于是，最小化损失就已经从一个工程规定扩展到等价于最大化“已观测数据在模型下出现的可能性”。</p>
<p>以最常见的回归假设为例，若模型输出写成 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span>，并假设真实标签满足</p>
<span displaypfx="" class="mathjax-container">\[y=f_\theta(x)+\varepsilon,\qquad \varepsilon\sim\mathcal{N}(0,\sigma^2)\]</span>
<p>这里的高斯分布指的核心是<span style="background-color: #c0c0c0;">误差项，也就是残差 <span displaypfx="inline-" class="mathjax-container">\(y-f_\theta(x)\)</span> 的分布</span>。误差总是相对于模型当前给出的预测中心 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span> 来计算：预测值附近最可能出现，偏离越远，概率越低。</p>
<p>从这个误差模型出发，可以把“误差分布”直接改写成“真实标签在给定输入下的条件分布”。因为 <span displaypfx="inline-" class="mathjax-container">\(\varepsilon\)</span> 服从均值为 0 的高斯分布，所以等价地，真实标签服从一个均值为 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span> 的高斯分布：</p>
<span displaypfx="" class="mathjax-container">\[y\,|\,x \sim \mathcal{N}(f_\theta(x),\sigma^2)\]</span>
<p>这条式子的含义是：给定输入 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 之后，模型把输出 <span displaypfx="inline-" class="mathjax-container">\(y\)</span> 看成一个<span style="background-color: #c0c0c0;">以预测值 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span> 为中心、方差为 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 的高斯随机变量</span>。根据高斯分布的概率密度函数，可进一步写出条件概率密度：</p>
<span displaypfx="" class="mathjax-container">\[p_\theta(y|x)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(y-f_\theta(x))^2}{2\sigma^2}\right)\]</span>
<p>这时 <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y_i|x_i)\)</span> 的含义就自然了：它评估的是在当前参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 下，训练集中已经观测到的真实标签 <span displaypfx="inline-" class="mathjax-container">\(y_i\)</span>，作为“围绕 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x_i)\)</span> 摆动的一个样本”是否足够合理。被评分的始终是<span style="background-color: #c0c0c0;">真实观测到的 <span displaypfx="inline-" class="mathjax-container">\(y_i\)</span></span>，而非模型预测出来的 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x_i)\)</span>。<span displaypfx="inline-" class="mathjax-container">\(f_\theta(x_i)\)</span> 的作用核心是作为条件分布的均值或位置参数，决定观测值最可能出现的位置。</p>
<p>这种思路并不限于高斯回归。分类任务里，条件分布不再是高斯，而会改成 Bernoulli 或 Categorical；若把噪声假设换成拉普拉斯分布（Laplacian Distribution），则导出的损失也会从平方误差变成绝对误差。更严谨地说，<span style="background-color: #c0c0c0;">损失函数是概率模型在训练集上的负对数似然写开后的结果</span>：高斯噪声导出平方误差（Squared Error），拉普拉斯噪声导出绝对误差（Absolute Error），Bernoulli 与 Categorical 分布则导出二分类或多分类交叉熵（Cross-Entropy）。</p>
<div class="blog_h3"><span class="graybg">高斯分布的MLE和最小二乘</span></div>
<p>先看监督回归（Supervised Regression）。训练集写成 <span displaypfx="inline-" class="mathjax-container">\(D=\{(x_i,y_i)\}_{i=1}^N\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(x_i\)</span> 是输入特征，<span displaypfx="inline-" class="mathjax-container">\(y_i\)</span> 是真实输出。按照上面的统一框架，这里仍然是把 <span displaypfx="inline-" class="mathjax-container">\(x_i\)</span> 当作给定条件，只为输出建模条件分布 <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y|x)\)</span>，并让真实观测到的 <span displaypfx="inline-" class="mathjax-container">\(y_i\)</span> 在模型下尽可能不意外：</p>
<span displaypfx="" class="mathjax-container">\[\hat\theta_{\mathrm{MLE}}=\arg\max_{\theta}\prod_{i=1}^{N}p_\theta(y_i|x_i)\]</span>
<p>这里的参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 不在 <span displaypfx="inline-" class="mathjax-container">\(x_i\)</span> 里；它出现在假设函数 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span> 里。例如线性回归（Linear Regression）可写成 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)=\mathbf{w}^\top x+b\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(\theta=(\mathbf{w},b)\)</span>。回归里常说的“高斯分布”，指的是<span style="background-color: #c0c0c0;">误差项，也就是残差 <span displaypfx="inline-" class="mathjax-container">\(y_i-f_\theta(x_i)\)</span> 的分布</span>。误差总是相对于当前模型给出的中心值 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x_i)\)</span> 来计算。</p>
<p>具体假设是：</p>
<span displaypfx="" class="mathjax-container">\[y_i=f_\theta(x_i)+\varepsilon_i,\quad \varepsilon_i\sim\mathcal{N}(0,\sigma^2)\ \text{i.i.d.}\]</span>
<p>等价写成条件分布：</p>
<span displaypfx="" class="mathjax-container">\[y_i\,|\,x_i \sim \mathcal{N}(f_\theta(x_i),\sigma^2)\]</span>
<p>上式的意思是：在给定输入 <span displaypfx="inline-" class="mathjax-container">\(x_i\)</span> 的条件下，输出 <span displaypfx="inline-" class="mathjax-container">\(y_i\)</span> 不再被视为确定值，而被建模为随机变量，并且服从均值为 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x_i)\)</span>、方差为 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 的一维高斯分布（Gaussian Distribution），当然，这里的不确定性就是模型引入的。根据高斯分布的概率密度公式，并结合 i.i.d. 假设（联合似然为逐样本似然的乘积），整批数据的似然为</p>
<span displaypfx="" class="mathjax-container">\[p(D|\theta,\sigma^2)=\prod_{i=1}^{N}\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(y_i-f_\theta(x_i))^2}{2\sigma^2}\right)\]</span>
<p>取负对数似然（Negative Log-Likelihood, NLL）得到训练时真正被最小化的量：</p>
<span displaypfx="" class="mathjax-container">\[-\log p(D|\theta,\sigma^2)=\frac{N}{2}\log(2\pi\sigma^2)+\frac{1}{2\sigma^2}\sum_{i=1}^{N}(y_i-f_\theta(x_i))^2\]</span>
<p>当 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 视为常数时，第一项与 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 无关，因此最小化 NLL 关于 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 等价于最小化平方误差和（Sum of Squared Errors, SSE）：</p>
<span displaypfx="" class="mathjax-container">\[\hat\theta_{\mathrm{MLE}}=\arg\min_\theta\sum_{i=1}^{N}(y_i-f_\theta(x_i))^2\]</span>
<p>把残差（Residual）记为 <span displaypfx="inline-" class="mathjax-container">\(r_i=y_i-f_\theta(x_i)\)</span>，则上式就是最小化 <span displaypfx="inline-" class="mathjax-container">\(\sum_i r_i^2\)</span>。因此，在“高斯噪声 + 固定方差”的回归假设下，<span style="background-color: #c0c0c0;">最大化似然（等价最大化对数似然）就是最小化残差平方和</span>。</p>
<p>这就是“最小二乘（Least Squares）”为什么会从概率建模里自然出现；均方误差（Mean Squared Error, MSE）只是把 SSE 再除以 <span displaypfx="inline-" class="mathjax-container">\(N\)</span>，不改变最优解。</p>
<p>如果 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 也未知，则 MLE 会同时估计 <span displaypfx="inline-" class="mathjax-container">\((\theta,\sigma^2)\)</span>。在固定 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 时，对 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 的 MLE 为</p>
<span displaypfx="" class="mathjax-container">\[\hat\sigma^2_{\mathrm{MLE}}=\frac{1}{N}\sum_{i=1}^{N}(y_i-f_\theta(x_i))^2\]</span>
<p>注意这里是 <span displaypfx="inline-" class="mathjax-container">\(1/N\)</span>（MLE），而非无偏估计常用的 <span displaypfx="inline-" class="mathjax-container">\(1/(N-1)\)</span>。</p>
<p>顺带一提：把回归模型退化为“常数预测” <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\equiv \mu\)</span>，就回到“在高斯噪声下估计均值 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span>”，其 MLE 是样本均值。这也是很多教材先从 <span displaypfx="inline-" class="mathjax-container">\(x_i=\mu+\varepsilon_i\)</span> 入手的原因：那是回归的一个最小特例（此时 <span displaypfx="inline-" class="mathjax-container">\(\theta=\mu\)</span>）。</p>
<div class="blog_h3"><span class="graybg">Bernoulli / Categorical 分布和交叉熵</span></div>
<p>分类任务与回归不同：标签通常是离散变量，因此这里使用的核心是概率质量函数（Probability Mass Function, PMF）。做最大似然估计时，最常见的做法同样是把输入 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 视为给定条件，只为标签建模条件分布 <span displaypfx="inline-" class="mathjax-container">\(p_\theta(y|x)\)</span>，然后让已观测标签在模型下尽可能“显得合理”。</p>
<p>先看二分类（Binary Classification）。设标签 <span displaypfx="inline-" class="mathjax-container">\(y_i\in\{0,1\}\)</span>，模型输出正类概率 <span displaypfx="inline-" class="mathjax-container">\(\pi_\theta(x_i)=p_\theta(y_i=1|x_i)\)</span>，则单个样本服从伯努利分布（Bernoulli Distribution）：</p>
<span displaypfx="" class="mathjax-container">\[p_\theta(y_i|x_i)=\pi_\theta(x_i)^{y_i}\bigl(1-\pi_\theta(x_i)\bigr)^{1-y_i}\]</span>
<p>在 i.i.d. 假设下，整批数据的似然为</p>
<span displaypfx="" class="mathjax-container">\[p(D|\theta)=\prod_{i=1}^{N}\pi_\theta(x_i)^{y_i}\bigl(1-\pi_\theta(x_i)\bigr)^{1-y_i}\]</span>
<p>取负对数似然，得到</p>
<span displaypfx="" class="mathjax-container">\[-\log p(D|\theta)=-\sum_{i=1}^{N}\Big[y_i\log \pi_\theta(x_i)+(1-y_i)\log\bigl(1-\pi_\theta(x_i)\bigr)\Big]\]</span>
<p>这正是二分类交叉熵（Binary Cross-Entropy, BCE）。因此，在“标签服从伯努利分布”的假设下，<span style="background-color: #c0c0c0;">最大化似然等价于最小化二分类交叉熵</span>。若再把 <span displaypfx="inline-" class="mathjax-container">\(\pi_\theta(x)\)</span> 写成 sigmoid 作用在 logit <span displaypfx="inline-" class="mathjax-container">\(z_\theta(x)\)</span> 上，即 <span displaypfx="inline-" class="mathjax-container">\(\pi_\theta(x)=\sigma(z_\theta(x))\)</span>，就得到工程实现里最常见的 sigmoid + BCE 训练形式。</p>
<p>再看多分类（Multiclass Classification）。设类别总数为 <span displaypfx="inline-" class="mathjax-container">\(C\)</span>，并用 one-hot 向量 <span displaypfx="inline-" class="mathjax-container">\(y_i=(y_{i1},\dots,y_{iC})\)</span> 表示真实标签，其中只有真实类别对应那一项为 1，其余为 0。若模型输出类别概率 <span displaypfx="inline-" class="mathjax-container">\(\pi_{\theta,1}(x_i),\dots,\pi_{\theta,C}(x_i)\)</span>，且满足 <span displaypfx="inline-" class="mathjax-container">\(\sum_{c=1}^{C}\pi_{\theta,c}(x_i)=1\)</span>，则单个样本服从类别分布（Categorical Distribution）：</p>
<span displaypfx="" class="mathjax-container">\[p_\theta(y_i|x_i)=\prod_{c=1}^{C}\pi_{\theta,c}(x_i)^{y_{ic}}\]</span>
<p>整批数据的似然为</p>
<span displaypfx="" class="mathjax-container">\[p(D|\theta)=\prod_{i=1}^{N}\prod_{c=1}^{C}\pi_{\theta,c}(x_i)^{y_{ic}}\]</span>
<p>取负对数似然，得到</p>
<span displaypfx="" class="mathjax-container">\[-\log p(D|\theta)=-\sum_{i=1}^{N}\sum_{c=1}^{C}y_{ic}\log \pi_{\theta,c}(x_i)\]</span>
<p>这正是多分类交叉熵（Categorical Cross-Entropy）。若标签是标准 one-hot，那么每个样本只会保留真实类别那一项，损失就退化成 <span displaypfx="inline-" class="mathjax-container">\(-\log \pi_{\theta,c^*}(x_i)\)</span>；若标签本身是软标签（Soft Label），则公式不变，只是 <span displaypfx="inline-" class="mathjax-container">\(y_{ic}\)</span> 已经从有 0 和 1扩展到一个分布。</p>
<div class="blog_h3"><span class="graybg">拉普拉斯分布的MLE和绝对误差</span></div>
<p>若回归任务从假设误差服从高斯分布转向假设误差项 <span displaypfx="inline-" class="mathjax-container">\(\varepsilon\)</span> 服从拉普拉斯分布（Laplacian Distribution），即</p>
<span displaypfx="" class="mathjax-container">\[y_i=f_\theta(x_i)+\varepsilon_i,\qquad \varepsilon_i\sim \mathrm{Laplace}(0,b)\ \text{i.i.d.}\]</span>
<p>那么等价地，真实标签在给定输入后的条件分布可写成</p>
<span displaypfx="" class="mathjax-container">\[y_i\,|\,x_i \sim \mathrm{Laplace}(f_\theta(x_i),b)\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x_i)\)</span> 是位置参数（Location Parameter），<span displaypfx="inline-" class="mathjax-container">\(b\)</span> 是尺度参数（Scale Parameter）。拉普拉斯分布的一维概率密度函数为</p>
<span displaypfx="" class="mathjax-container">\[p_\theta(y_i|x_i)=\frac{1}{2b}\exp\left(-\frac{|y_i-f_\theta(x_i)|}{b}\right)\]</span>
<p>在 i.i.d. 假设下，整批数据的似然为</p>
<span displaypfx="" class="mathjax-container">\[p(D|\theta,b)=\prod_{i=1}^{N}\frac{1}{2b}\exp\left(-\frac{|y_i-f_\theta(x_i)|}{b}\right)\]</span>
<p>取负对数似然，得到</p>
<span displaypfx="" class="mathjax-container">\[-\log p(D|\theta,b)=N\log(2b)+\frac{1}{b}\sum_{i=1}^{N}|y_i-f_\theta(x_i)|\]</span>
<p>当 <span displaypfx="inline-" class="mathjax-container">\(b\)</span> 视为常数时，第一项与 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 无关，因此最小化 NLL 关于 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 等价于最小化绝对误差和（Sum of Absolute Errors, SAE）：</p>
<span displaypfx="" class="mathjax-container">\[\hat\theta_{\mathrm{MLE}}=\arg\min_\theta\sum_{i=1}^{N}|y_i-f_\theta(x_i)|\]</span>
<p>这正是平均绝对误差（Mean Absolute Error, MAE）背后的概率来源。与高斯分布相比，拉普拉斯分布在中心更尖、尾部更厚，因此它对应的损失从像平方误差那样强烈放大大残差转向按线性方式惩罚偏差。MAE 因而通常比 MSE 对离群点（Outlier）更稳健。</p>
<p>因此，高斯分布与最小二乘、拉普拉斯分布与绝对误差、Bernoulli / Categorical 分布与交叉熵，其实是同一个统计逻辑在不同任务类型下的三种展开：<span style="background-color: #c0c0c0;">先假设观测数据服从某个条件分布，再对训练集做最大似然估计；把负对数似然写开后，就得到具体的训练损失</span>。</p>
<div class="blog_h2"><span class="graybg">最大后验估计（MAP）</span></div>
<p>最大后验估计（Maximum A Posteriori, MAP）在 MLE 的“数据解释能力”之外，再加入参数的先验（Prior）信息。它选择后验概率（Posterior）最大的参数：</p>
<span displaypfx="" class="mathjax-container">\[\hat{\theta}_{\mathrm{MAP}}=\arg\max_{\theta}p(\theta|D)\]</span>
<p>根据贝叶斯定理：</p>
<span displaypfx="" class="mathjax-container">\[p(\theta|D)=\frac{p(D|\theta)p(\theta)}{p(D)}\]</span>
<p>其中 <span displaypfx="inline-" class="mathjax-container">\(p(D|\theta)\)</span> 是似然（Likelihood）， <span displaypfx="inline-" class="mathjax-container">\(p(\theta)\)</span> 是先验， <span displaypfx="inline-" class="mathjax-container">\(p(D)\)</span> 是证据（Evidence）。因为 <span displaypfx="inline-" class="mathjax-container">\(p(D)\)</span> 与参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 无关，所以在求最大值时它只是常数，可以直接忽略：</p>
<span displaypfx="" class="mathjax-container">\[\hat{\theta}_{\mathrm{MAP}}=\arg\max_{\theta}p(D|\theta)p(\theta)=\arg\max_{\theta}\big(\log p(D|\theta)+\log p(\theta)\big)\]</span>
<p>这个式子清楚地说明了 MAP 的结构： <span displaypfx="inline-" class="mathjax-container">\(\log p(D|\theta)\)</span> 负责拟合数据， <span displaypfx="inline-" class="mathjax-container">\(\log p(\theta)\)</span> 负责约束参数不要偏离先验认知。若改写成最小化形式，则有</p>
<span displaypfx="" class="mathjax-container">\[\hat{\theta}_{\mathrm{MAP}}=\arg\min_\theta\big(-\log p(D|\theta)-\log p(\theta)\big)\]</span>
<p>因此，MAP 可以理解为“负对数似然 + 先验诱导的惩罚项（Penalty）”。很多正则化（Regularization）都能够从贝叶斯视角解释：L2 正则通常对应高斯先验，L1 正则通常对应拉普拉斯先验。若先验在可行域内与 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 无关（例如均匀先验： <span displaypfx="inline-" class="mathjax-container">\(p(\theta)=c\)</span>），则 <span displaypfx="inline-" class="mathjax-container">\(\log p(\theta)=\log c\)</span> 是关于 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的常数；在 <span displaypfx="inline-" class="mathjax-container">\(\arg\max_\theta\)</span> 中加上或去掉这一项都不改变最优点，因此 MAP 与 MLE 给出同一组参数（若均匀先验还隐含“只在某个范围内为常数、范围外为 0”，则等价于在该范围约束下做 MLE）。</p>
<p>继续用抛硬币解释。现在参数已经统一记作 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>，因此先验也写成 <span displaypfx="inline-" class="mathjax-container">\(p(\theta)\)</span>，而不再写 <span displaypfx="inline-" class="mathjax-container">\(p(p)\)</span>。若对 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 设 Beta 分布（Beta Distribution）先验</p>
<p>Beta 分布是定义在区间 <span displaypfx="inline-" class="mathjax-container">\([0,1]\)</span> 上的连续分布，最常用来描述“某个概率值本身的不确定性”，因此非常适合作为伯努利参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的先验。</p>
<span displaypfx="" class="mathjax-container">\[p(\theta)\propto \theta^{\alpha-1}(1-\theta)^{\beta-1},\quad 0\le \theta\le 1\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(\propto\)</span> 表示“正比于”，意思是左边真正的概率密度函数还差一个归一化常数（Normalization Constant），这个常数负责保证密度在区间 <span displaypfx="inline-" class="mathjax-container">\([0,1]\)</span> 上积分为 1。对 MAP 而言，这个常数不影响最大值位置，所以通常省略不写。</p>
<p>参数 <span displaypfx="inline-" class="mathjax-container">\(\alpha\)</span> 和 <span displaypfx="inline-" class="mathjax-container">\(\beta\)</span> 控制分布形状： <span displaypfx="inline-" class="mathjax-container">\(\alpha\)</span> 越大，分布越偏向较大的 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>； <span displaypfx="inline-" class="mathjax-container">\(\beta\)</span> 越大，分布越偏向较小的 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>。例如 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Beta}(2,2)\)</span> 会把概率质量更多放在中间区域，表达“更倾向认为硬币接近公平”； <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Beta}(8,2)\)</span> 则更偏向 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 接近 1。</p>
<p>那么它表达的是：在看到数据之前，我们已经对“硬币正面概率应该落在什么范围”有一个先验偏好。</p>
<p>把这个先验与 7 正 3 反的似然 <span displaypfx="inline-" class="mathjax-container">\(p(D|\theta)=\theta^7(1-\theta)^3\)</span> 相乘，得到后验：</p>
<span displaypfx="" class="mathjax-container">\[p(\theta|D)\propto \theta^{7+\alpha-1}(1-\theta)^{3+\beta-1}\]</span>
<p>这说明后验仍然是 Beta 分布：</p>
<span displaypfx="" class="mathjax-container">\[p(\theta|D)=\mathrm{Beta}(7+\alpha,3+\beta)\]</span>
<p>众数（Mode）指的是<span style="background-color: #c0c0c0;">概率密度函数最高的那个位置</span>，也就是“这个分布最偏好的参数值”。因为 MAP 的定义本来就是寻找后验概率/后验密度最大的参数，所以当后验分布已经写出来时，MAP 估计就是这个后验分布的众数。</p>
<p>因为后验与 <span displaypfx="inline-" class="mathjax-container">\(\theta^{7+\alpha-1}(1-\theta)^{3+\beta-1}\)</span> 成正比，所以只需最大化这个函数。取对数后，等价目标变成</p>
<span displaypfx="" class="mathjax-container">\[(7+\alpha-1)\log \theta+(3+\beta-1)\log(1-\theta)\]</span>
<p>对 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 求导并令导数为 0：</p>
<span displaypfx="" class="mathjax-container">\[\frac{7+\alpha-1}{\theta}-\frac{3+\beta-1}{1-\theta}=0\]</span>
<p>移项并整理可得</p>
<span displaypfx="" class="mathjax-container">\[(7+\alpha-1)(1-\theta)=(3+\beta-1)\theta\Rightarrow \hat{\theta}_{\mathrm{MAP}}=\frac{7+\alpha-1}{10+\alpha+\beta-2}\]</span>
<p>因此，当 <span displaypfx="inline-" class="mathjax-container">\(\alpha,\beta&gt;1\)</span> 时，Beta 分布的众数（Mode）也就是 MAP 估计。</p>
<p>若取 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Beta}(2,2)\)</span> 先验，则</p>
<span displaypfx="" class="mathjax-container">\[\hat{\theta}_{\mathrm{MAP}}=\frac{7+2-1}{10+2+2-2}=\frac{8}{12}=\frac{2}{3}\]</span>
<p>它比 MLE 的 <span displaypfx="inline-" class="mathjax-container">\(0.7\)</span> 更靠近 <span displaypfx="inline-" class="mathjax-container">\(0.5\)</span>。原因很具体： <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Beta}(2,2)\)</span> 可以理解为在真实观测之外，先额外放入了“1 次正面 + 1 次反面”的温和偏好，所以最终估计不会被7正3反的样本完全带着走。样本很少时，先验的影响明显；样本很多时，数据项占主导，MAP 会逐渐逼近 MLE。</p>
<p>在机器学习里，MAP 与正则化（Regularization）本质上是同一件事的两种表述。给参数指定先验后，取负对数，这个先验就会自动变成优化目标里的正则项。</p>
<p>先看一般形式。MAP 最大化的是后验概率 <span displaypfx="inline-" class="mathjax-container">\(p(\theta|D)\)</span>，等价于最小化负对数后验：</p>
<span displaypfx="" class="mathjax-container">\[-\log p(\theta|D)=-\log p(D|\theta)-\log p(\theta)+\mathrm{const}\]</span>
<p>第一项 <span displaypfx="inline-" class="mathjax-container">\(-\log p(D|\theta)\)</span> 是数据拟合项，第二项 <span displaypfx="inline-" class="mathjax-container">\(-\log p(\theta)\)</span> 就是先验带来的惩罚项。因此“正则化”核心是贝叶斯先验在优化问题里的直接体现。</p>
<p>若参数向量 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 服从零均值各向同性高斯先验（Isotropic Gaussian Prior），可以写成</p>
<span displaypfx="" class="mathjax-container">\[p(\theta)\propto \exp\left(-\frac{1}{2\tau^2}\|\theta\|_2^2\right)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(\tau^2\)</span> 控制先验方差：方差越小，越强地偏好参数靠近 0。对它取负对数得到</p>
<span displaypfx="" class="mathjax-container">\[-\log p(\theta)=\frac{1}{2\tau^2}\|\theta\|_2^2+\mathrm{const}\]</span>
<p>把常数 <span displaypfx="inline-" class="mathjax-container">\(\frac{1}{2\tau^2}\)</span> 记成 <span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span>，就得到熟悉的目标：</p>
<span displaypfx="" class="mathjax-container">\[-\log p(D|\theta)+\lambda\|\theta\|_2^2\]</span>
<p>这正是 <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> 正则。它的作用可以理解为：先验认为“大权重不太可信”，所以优化时不仅要拟合数据，还要为过大的参数付出代价。由于高斯先验在 0 附近平滑、尾部衰减快，它通常会把参数整体压小，但不特别鼓励大量参数精确等于 0。</p>
<p>若先验改成拉普拉斯（Laplacian）分布：</p>
<span displaypfx="" class="mathjax-container">\[p(\theta)\propto \exp\big(-\lambda\|\theta\|_1\big)\]</span>
<p>则负对数先验变成</p>
<span displaypfx="" class="mathjax-container">\[-\log p(\theta)=\lambda\|\theta\|_1+\mathrm{const}\]</span>
<p>于是 MAP 等价于最小化</p>
<span displaypfx="" class="mathjax-container">\[-\log p(D|\theta)+\lambda\|\theta\|_1\]</span>
<p>这就是 <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 正则。它与 <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> 的关键区别在于：拉普拉斯先验在 0 处尖得更厉害，因此更强地偏好很多参数直接变成 0，也就是产生稀疏性（Sparsity）。</p>
<p>所以可以把对应关系记成一条很清楚的链：<span style="background-color: #c0c0c0;">高斯先验对应 <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span>，拉普拉斯先验对应 <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span>；正则项的形状，本质上就是先验密度形状的负对数</span>。很多看起来像“人为添加的惩罚项”，其实都可以解释为“在做 MAP”。</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/regularization-distribution-assumptions.png"><img class="alignnone size-full" src="https://blog.gmem.cc/wp-content/uploads/2026/03/regularization-distribution-assumptions.png" alt="regularization-distribution-assumptions" width="1920" height="1064" /></a></p>
<p>这里的分布假设有两个不同落点。若假设的是数据误差或残差 <span displaypfx="inline-" class="mathjax-container">\(\epsilon\)</span> 的分布，它进入的是似然 <span displaypfx="inline-" class="mathjax-container">\(p(D|\theta)\)</span>，决定数据拟合项的形状；若假设的是参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 自身的分布，它进入的是先验 <span displaypfx="inline-" class="mathjax-container">\(p(\theta)\)</span>，决定正则项的形状。前者回答“数据会怎样围绕模型波动”，后者回答“参数本身更可能落在什么区域”。</p>
<p>因此，高斯和拉普拉斯并不只用于描述数据集。高斯残差假设会把负对数似然化成平方误差，拉普拉斯残差假设会把负对数似然化成绝对误差；与此同时，零均值高斯参数先验会把负对数先验化成 <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> 正则，零均值拉普拉斯参数先验会把负对数先验化成 <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 正则。它们使用的是同一类分布族，但一个作用在数据项 <span displaypfx="inline-" class="mathjax-container">\(p(D|\theta)\)</span>，一个作用在参数项 <span displaypfx="inline-" class="mathjax-container">\(p(\theta)\)</span>。</p>
<div class="blog_h2"><span class="graybg">大数定律与中心极限定理</span></div>
<div class="blog_h3"><span class="graybg">大数定律（Law of Large Numbers, LLN）</span></div>
<p>大数定律说明：当独立同分布样本越来越多时，样本平均会稳定地靠近真实期望（Expectation）。若 <span displaypfx="inline-" class="mathjax-container">\(X_1,\dots,X_n\)</span> 独立同分布，且 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]\)</span> 存在，则</p>
<span displaypfx="" class="mathjax-container">\[\frac{1}{n}\sum_{i=1}^{n}X_i \to \mathbb{E}[X],\quad n\to\infty\]</span>
<p>这里的重点是“平均值会稳定下来”，而非“每一次新观测都会让结果更接近真值”。它描述的是长期趋势：样本量越大，随机波动在平均过程中被不断抵消，样本平均就越不容易偏离真实期望太远。</p>
<p>最经典的例子是抛公平硬币。设正面记为 1、反面记为 0，则单次试验的期望是 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]=0.5\)</span>。前几次抛掷时，正面比例可能是 1、0、0.67、0.25，波动很大；但抛掷次数达到几百、几千次后，样本平均 <span displaypfx="inline-" class="mathjax-container">\(\bar{X}\)</span> 会越来越稳定地靠近 0.5。大数定律回答的是“为什么频率会稳定到概率附近”。</p>
<div class="blog_h3"><span class="graybg">中心极限定理（Central Limit Theorem, CLT）</span></div>
<p>中心极限定理（Central Limit Theorem, CLT）描述的是：在独立同分布且方差有限的条件下，样本均值经过适当标准化后，会趋近于正态分布（Normal Distribution）。它给出的核心是“平均值围绕真值波动时，波动形状如何分布”的规律。</p>
<p>因此，中心极限定理讨论的重点核心是<span style="background-color: #c0c0c0;">样本均值在真值附近如何波动，以及这种波动的分布长什么样</span>。标准写法是：</p>
<span displaypfx="" class="mathjax-container">\[\frac{\sqrt{n}(\bar{X}-\mu)}{\sigma}\Rightarrow \mathcal{N}(0,1)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(\mu=\mathbb{E}[X]\)</span> 是总体均值， <span displaypfx="inline-" class="mathjax-container">\(\sigma^2=\mathrm{Var}(X)\)</span> 是总体方差。所谓<span style="background-color: #c0c0c0;">标准化（Standardization）</span>，就是先减去均值 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span>，把中心移到 0；再除以标准差 <span displaypfx="inline-" class="mathjax-container">\(\sigma\)</span>，把尺度统一成“多少个标准差”；再乘上 <span displaypfx="inline-" class="mathjax-container">\(\sqrt{n}\)</span>，把样本均值随着样本量增大而缩小的波动重新放回可比较的尺度。标准化之后，不同样本量下的波动可以放到同一个参考系里比较。</p>
<p>所谓<span style="background-color: #c0c0c0;">方差有限</span>，就是随机变量的波动强度并非无限大，满足 <span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(X)&lt;\infty\)</span>。直观上，这意味着样本虽然会波动，但不会被极端值以“无限强”的方式主导。像伯努利分布、二项分布、泊松分布、均匀分布和高斯分布都满足这个条件；而某些重尾分布则可能不满足，因此不能直接套用最基础的 CLT 表述。</p>
<p>为什么要乘上 <span displaypfx="inline-" class="mathjax-container">\(\sqrt{n}\)</span>？因为样本均值的波动规模大约是 <span displaypfx="inline-" class="mathjax-container">\(\sigma/\sqrt{n}\)</span>：样本越多，均值越稳定。如果不乘 <span displaypfx="inline-" class="mathjax-container">\(\sqrt{n}\)</span>，当 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 增大时， <span displaypfx="inline-" class="mathjax-container">\(\bar{X}-\mu\)</span> 会越来越接近 0，看不出其分布形状；乘上 <span displaypfx="inline-" class="mathjax-container">\(\sqrt{n}\)</span> 后，波动被拉回到常数量级，才会显现出稳定的正态极限。</p>
<p>继续看硬币例子。设 <span displaypfx="inline-" class="mathjax-container">\(X_i\in\{0,1\}\)</span> 且正面概率为 0.5，则 <span displaypfx="inline-" class="mathjax-container">\(\mu=0.5\)</span>， <span displaypfx="inline-" class="mathjax-container">\(\sigma^2=0.25\)</span>，标准差 <span displaypfx="inline-" class="mathjax-container">\(\sigma=0.5\)</span>。CLT 说的是：</p>
<span displaypfx="" class="mathjax-container">\[\frac{\sqrt{n}(\bar{X}-0.5)}{0.5}\Rightarrow \mathcal{N}(0,1)\]</span>
<p>例如当 <span displaypfx="inline-" class="mathjax-container">\(n=100\)</span> 时，正面比例 <span displaypfx="inline-" class="mathjax-container">\(\bar{X}\)</span> 的标准差大约是 <span displaypfx="inline-" class="mathjax-container">\(0.5/\sqrt{100}=0.05\)</span>。这意味着正面比例通常会落在 <span displaypfx="inline-" class="mathjax-container">\(0.5\pm 0.1\)</span> 这一量级附近；更精确地，用正态近似可写成</p>
<span displaypfx="" class="mathjax-container">\[\bar{X}\approx \mathcal{N}\left(0.5,\frac{0.25}{100}\right)=\mathcal{N}(0.5,0.0025)\]</span>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-clt.png"><img class="alignnone size-full wp-image-40929" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot-clt.png" alt="plot-clt" width="100%" /></a></p>
<p>上图是样本量分别为1, 5, 20, 100的Bernoulli(0.5)分布，分别进行了30000轮测试，绘制的（每轮）标准化后的分布，可以看到样本量足够多时，其均值倾向于向中心（未标准化前的0.5对应此伯努利分布的总体均值）靠近。</p>
<p>所以 CLT 回答的是“为什么很多统计量在样本足够大时会近似高斯”，而 LLN 回答的是“为什么样本平均会逼近真值”。前者给出分布近似，后者给出收敛结论。置信区间、显著性检验、A/B test 和 mini-batch 梯度噪声分析，主要依赖的是 CLT 提供的近似正态性。</p>
<div class="blog_h3"><span class="graybg">置信度与置信区间</span></div>
<p>置信度（Confidence Level）与置信区间（Confidence Interval）属于统计推断（Statistical Inference）中的区间估计（Interval Estimation）。它们处理的核心是<span style="background-color: #c0c0c0;">在只看到一批有限样本时，怎样给未知总体参数画出一个有覆盖保证的范围</span>。在机器学习实验、A/B test、离线评测和指标报表里，样本均值、准确率、点击率、转化率和误差率后面常跟着一个区间，这个区间就是区间估计的产物。</p>
<p>若目标是估计总体均值 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span>，样本均值为 <span displaypfx="inline-" class="mathjax-container">\(\bar{X}\)</span>，且样本量足够大或总体近似正态，那么基于中心极限定理，可以构造近似的双侧置信区间：</p>
<span displaypfx="" class="mathjax-container">\[\bar{X}\pm z_{1-\alpha/2}\frac{\sigma}{\sqrt{n}}\]</span>
<p>若总体标准差 <span displaypfx="inline-" class="mathjax-container">\(\sigma\)</span> 未知，而样本来自正态总体或样本量适中且使用样本标准差 <span displaypfx="inline-" class="mathjax-container">\(s\)</span> 近似，则常写作：</p>
<span displaypfx="" class="mathjax-container">\[\bar{X}\pm t_{1-\alpha/2,\,n-1}\frac{s}{\sqrt{n}}\]</span>
<p>这里每个元素的含义分别是：</p>
<ul>
<li><span displaypfx="inline-" class="mathjax-container">\(\bar{X}\)</span>：样本均值（Sample Mean），是当前样本对总体均值的点估计（Point Estimate）。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(n\)</span>：样本量（Sample Size）。样本越多，区间通常越窄。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\sigma\)</span>：总体标准差（Population Standard Deviation）；若未知，常用样本标准差 <span displaypfx="inline-" class="mathjax-container">\(s\)</span> 替代。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\frac{\sigma}{\sqrt{n}}\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(\frac{s}{\sqrt{n}}\)</span>：标准误（Standard Error），表示样本均值本身的波动尺度，而非单个样本点的波动。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(\alpha\)</span>：显著性水平（Significance Level）。若置信度为 95%，则 <span displaypfx="inline-" class="mathjax-container">\(\alpha=0.05\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(z_{1-\alpha/2}\)</span>：标准正态分布的分位数（Quantile）；95% 置信度时大约是 <span displaypfx="inline-" class="mathjax-container">\(1.96\)</span>。</li>
<li><span displaypfx="inline-" class="mathjax-container">\(t_{1-\alpha/2,\,n-1}\)</span>：Student t 分布的分位数，带有 <span displaypfx="inline-" class="mathjax-container">\(n-1\)</span> 个自由度（Degrees of Freedom），用于总体方差未知时。</li>
</ul>
<p>在这个表达式里，<span style="background-color: #c0c0c0;">置信区间</span> 指的是最终得到的区间本身，例如 <span displaypfx="inline-" class="mathjax-container">\([1.8,2.4]\)</span>；<span style="background-color: #c0c0c0;">置信度</span> 指的是构造这个区间的方法在重复抽样下的长期覆盖率，例如 95%、99%。因此，95% 置信区间的严格含义是：如果用同一种抽样方式和同一种区间构造公式反复重复实验，那么大约 95% 的区间会覆盖真实参数。</p>
<p>这一定义有一个极其重要的解释边界。总体参数 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span> 在经典频率学派（Frequentist）统计里被视为固定但未知的常数；随机的是样本，因此随机的是区间端点。样本一旦观察完成，这次得到的区间要么覆盖 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span>，要么不覆盖，概率意义已经不再施加在参数本身上。于是，95% 置信度描述的是<span style="background-color: #c0c0c0;">区间构造程序的长期可靠性</span>，而非“参数有 95% 概率落在这次区间里”的后验概率表述。</p>
<p>置信度并不局限于连续分布。它的定义依赖的是“重复抽样下的覆盖率”，而非总体分布是否连续。对伯努利分布（Bernoulli Distribution）、二项分布（Binomial Distribution）、泊松分布（Poisson Distribution）这类离散分布，同样可以对参数构造 95% 或 99% 的区间估计。例如对二项分布中的成功概率 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>，就可以根据观测到的成功次数构造 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 的置信区间；若参数或目标对象并非一维连续量，更宽泛的名称则是置信集合（Confidence Set）。</p>
<p>离散分布与连续分布的差别不在“能不能谈置信度”，而在于区间构造的细节。连续情形下，区间端点可以较平滑地调节到目标覆盖率附近；离散情形下，统计量只能取离散值，覆盖率往往无法恰好等于名义值，例如正好 95%，而常常只能做到“不低于 95%”。因此，离散分布里的精确区间常带有一定保守性（Conservativeness）：区间更宽一些，但覆盖保证更稳。在离散统计推断里，除了近似正态区间外，也经常会看到 Clopper–Pearson 这类精确区间构造方法。</p>
<p>一个具体例子最容易说明这两个概念。设某模型在 100 次独立测试中的平均准确率估计为 <span displaypfx="inline-" class="mathjax-container">\(\bar{X}=0.82\)</span>，样本标准差为 <span displaypfx="inline-" class="mathjax-container">\(s=0.10\)</span>。若采用近似 95% 置信区间，可写成：</p>
<span displaypfx="" class="mathjax-container">\[0.82\pm 1.96\times \frac{0.10}{\sqrt{100}}=0.82\pm 0.0196\]</span>
<p>于是区间约为：</p>
<span displaypfx="" class="mathjax-container">\[[0.8004,\ 0.8396]\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\([0.8004,0.8396]\)</span> 是置信区间，95% 是置信度。它表示：按这种抽样和构造方式长期重复下去，约 95% 的此类区间会覆盖真实平均准确率；这次具体得到的这个区间只是其中一个实现结果。</p>
<p>区间宽度主要由三个因素共同决定：</p>
<ul>
<li>样本波动越大，即 <span displaypfx="inline-" class="mathjax-container">\(\sigma\)</span> 或 <span displaypfx="inline-" class="mathjax-container">\(s\)</span> 越大，区间越宽。</li>
<li>样本量越大，即 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 越大，标准误越小，区间越窄。</li>
<li>置信度越高，例如从 95% 提高到 99%，对应分位数更大，区间也会变宽。</li>
</ul>
<p>因此，置信区间是在样本有限时对参数估计可靠性的定量表达；置信度则是这套区间构造方法愿意给出的覆盖承诺。两者必须一起理解：只有区间没有置信度，范围没有统计保证；只有置信度没有区间，覆盖承诺也无法落到具体参数估计上。</p>
<div class="blog_h2"><span class="graybg">随机过程</span></div>
<p>前面讨论的随机变量（Random Variable）通常只对应一次不确定试验，例如抛一次硬币、测一次身高、抽取一个样本标签。随机过程（Stochastic Process）则讨论<span style="background-color: #c0c0c0;">一串彼此有关、按时间或空间索引起来的随机变量</span>。它适合描述会随时间演化的不确定系统，例如天气变化、股价波动、队列长度、用户行为序列、传感器读数，以及自然语言中的 token 序列。</p>
<p>形式上，随机过程可记为：</p>
<span displaypfx="" class="mathjax-container">\[\{X_t\}_{t\in T}\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(T\)</span> 是索引集合（Index Set），常表示时间； <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span> 是时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 的随机变量。若 <span displaypfx="inline-" class="mathjax-container">\(T=\{0,1,2,\dots\}\)</span>，过程是离散时间（Discrete-time）的；若 <span displaypfx="inline-" class="mathjax-container">\(T=[0,\infty)\)</span>，过程则是连续时间（Continuous-time）的。每个 <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span> 都有自己的分布，但更重要的是这些随机变量之间的联合分布（Joint Distribution）与依赖结构，因为随机过程关心的核心是“整个序列怎样一起变化”。</p>
<p>从结果形态看，一次随机过程的实现从一个点转向一条轨迹（Trajectory）或样本路径（Sample Path）。例如，设 <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span> 表示第 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 天的气温，那么一次观测得到的是一整段温度序列 <span displaypfx="inline-" class="mathjax-container">\((X_1,X_2,\dots,X_T)\)</span>；若 <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span> 表示语言模型在位置 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 生成的 token，那么一次实现就是一整句文本。</p>
<p>随机过程之所以在机器学习里重要，是因为很多任务天生就是时序问题。时间序列预测关心未来值如何演化，隐马尔可夫模型（Hidden Markov Model, HMM）关心隐藏状态如何随时间转移，强化学习关心状态—动作—奖励序列怎样展开，自回归语言模型则是在建模 token 序列的联合概率。因此，随机过程可以看作“把单个随机变量扩展到整条时间轴上的概率建模语言”。</p>
<div class="blog_h3"><span class="graybg">马尔可夫性与马尔可夫过程</span></div>
<p>马尔可夫性（Markov Property）讨论的是随机过程中的“记忆如何被压缩”。它刻画这样一种情形：<span style="background-color: #c0c0c0;">如果当前状态已经把与未来演化有关的信息概括完整，那么预测下一步时就不再需要显式回看更久的历史</span>。在这种表示下，过去对未来的影响已经通过当前状态被浓缩进来了。</p>
<p>设随机过程为 <span displaypfx="inline-" class="mathjax-container">\(\{X_t\}_{t=0}^{\infty}\)</span>，其中 <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span> 表示时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 的随机状态。若它满足一阶马尔可夫性，则有：</p>
<span displaypfx="" class="mathjax-container">\[P(X_{t+1}\mid X_t,X_{t-1},\dots,X_0)=P(X_{t+1}\mid X_t)\]</span>
<p>这条式子的含义是：在已经知道当前状态 <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span> 的前提下，再额外知道更早的历史 <span displaypfx="inline-" class="mathjax-container">\(X_{t-1},\dots,X_0\)</span>，不会改变对下一时刻 <span displaypfx="inline-" class="mathjax-container">\(X_{t+1}\)</span> 的条件分布判断。左边是“条件在完整历史上的下一步分布”，右边是“条件在当前状态上的下一步分布”；两者相等，正是马尔可夫性的定义。</p>
<p>一个直接例子是天气变化。若把每天的天气记作随机变量 <span displaypfx="inline-" class="mathjax-container">\(X_t\)</span>，状态空间为 <span displaypfx="inline-" class="mathjax-container">\(\{\text{晴},\text{阴},\text{雨}\}\)</span>，那么常见建模假设是：明天是否下雨主要由今天的天气决定，而不需要把更早几天的天气逐项保留。此时“当前天气”就扮演了压缩历史信息的状态摘要。若今天是雨天，明天继续下雨的概率可以较大；若今天是晴天，明天下雨的概率可以较小。这种“只通过当前状态决定下一步分布”的结构，就是马尔可夫性。</p>
<p>满足马尔可夫性的随机过程，称为马尔可夫过程（Markov Process）或马尔可夫链（Markov Chain，离散时间、有限或可数状态时的常见名称）。因此，马尔可夫性是一个性质，马尔可夫过程是满足该性质的一类随机过程。若状态空间有限，常把一步转移概率写成转移矩阵（Transition Matrix） <span displaypfx="inline-" class="mathjax-container">\(P\)</span>，其中：</p>
<span displaypfx="" class="mathjax-container">\[P_{ij}=P(X_{t+1}=j\mid X_t=i)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(P_{ij}\)</span> 表示“当前在状态 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 时，下一步转移到状态 <span displaypfx="inline-" class="mathjax-container">\(j\)</span> 的概率”。矩阵的每一行对应当前状态固定后的下一步分布，因此每一行元素都非负，且行和为 1。</p>
<p>马尔可夫过程之所以重要，是因为它把一个潜在上非常复杂的时序依赖问题，压缩成了局部转移规律。隐马尔可夫模型（Hidden Markov Model, HMM）、马尔可夫决策过程（Markov Decision Process, MDP）、很多时间序列状态模型，以及强化学习中的环境状态转移，都建立在这一思想之上。它们的差别不在于是否使用马尔可夫性，而在于：状态是否可见、是否存在动作、是否附带奖励，以及是否只关心下一步还是关心长期回报。</p>
<p>马尔可夫性是一种建模假设，并非自然界自动保证的真理。若“当前状态”定义得不充分，历史信息就没有被真正压缩进去，此时过程在这个状态表示下就不具有马尔可夫性。例如，仅用“当前股价”预测明天走势通常不够，因为成交量、市场情绪、宏观事件等信息并未包含在状态中；但若把更完整的市场状态向量一并纳入，马尔可夫近似会更合理。因此，马尔可夫性的关键不仅公式，还<span style="background-color: #c0c0c0;">当前状态是否足以成为过去对未来影响的充分摘要</span>。</p>
<div class="blog_h1"><span class="graybg">信息论</span></div>
<p>信息论（Information Theory）研究的是：当事件具有不确定性时，信息应该如何被度量、压缩、传输和比较。在机器学习里，它不仅是一门“通信理论”，更是理解损失函数、语言模型、表示学习和分布距离的基础语言。熵（Entropy）回答“分布本身有多不确定”，KL 散度回答“两个分布相差多少”，交叉熵回答“用模型分布描述真实分布要付出多少平均代价”。这三者共同构成后续分类损失、语言模型 NLL 和困惑度（Perplexity）的理论基础。</p>
<div class="blog_h2"><span class="graybg">信息量与编码</span></div>
<p>信息论最基本的对象核心是单个事件的信息量（Information Content）。若事件 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 的概率为 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span>，则它的信息量定义为：</p>
<span displaypfx="" class="mathjax-container">\[I(x)=-\log p(x)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 越小，说明事件越罕见、越难提前猜到，因此 <span displaypfx="inline-" class="mathjax-container">\(-\log p(x)\)</span> 越大； <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 越大，说明事件越常见、越不令人意外，因此信息量越小。这条定义并非任意拍脑袋得出的，它和最优编码（Optimal Coding）直接对应：概率大的事件应该分配更短的码字，概率小的事件应该分配更长的码字，而最优平均码长与 <span displaypfx="inline-" class="mathjax-container">\(-\log p(x)\)</span> 同阶。</p>
<p>对数的底决定单位。以 <span displaypfx="inline-" class="mathjax-container">\(\log_2\)</span> 为底，单位是比特（Bits）；以自然对数为底，单位是纳特（Nats）。在机器学习推导里常用自然对数，因为它和指数族分布、梯度推导、对数似然更自然地连在一起；在编码与压缩直觉里，bit 往往更直观。</p>
<p>这也解释了语言模型里单个 token 的负对数概率 <span displaypfx="inline-" class="mathjax-container">\(-\log p_\theta(y_t|c_t)\)</span> 为何会被称为“惊奇（Surprise）”。这里 <span displaypfx="inline-" class="mathjax-container">\(c_t\)</span> 是当前位置之前的上下文， <span displaypfx="inline-" class="mathjax-container">\(y_t\)</span> 是当前位置真实出现的 token。若模型原本认为这个 token 很大概率出现，那么惊奇很小；若模型几乎没预料到它会出现，那么惊奇就很大。于是，单 token 的负对数概率就是单事件的信息量。</p>
<div class="blog_h2"><span class="graybg">熵（Entropy）</span></div>
<p>熵（Entropy）刻画的是一个概率分布整体的不确定性。对离散分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>：</p>
<span displaypfx="" class="mathjax-container">\[H(p)=-\sum_i p_i\log p_i\]</span>
<p>这条公式表达的是“信息量的期望”。因为单个事件的信息量是 <span displaypfx="inline-" class="mathjax-container">\(-\log p(x)\)</span>，而熵就是对所有事件按真实概率做加权平均后的结果。因此，熵核心是针对整个分布：<span style="background-color: #c0c0c0;">分布越均匀，平均越难预测，熵越大；分布越尖锐，平均越容易预测，熵越小</span>。</p>
<p>例如，若 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 在 <span displaypfx="inline-" class="mathjax-container">\(K\)</span> 个类别上均匀，即 <span displaypfx="inline-" class="mathjax-container">\(p_i=1/K\)</span>，则有：</p>
<span displaypfx="" class="mathjax-container">\[H(p)=\log K\]</span>
<p>这说明均匀分布的熵达到最大值，因为每个类别都一样可能，系统最难提前猜中。反过来，若某个类别概率接近 1，其余类别概率接近 0，那么熵会接近 0，因为结果几乎确定。</p>
<p>一个最简单的直觉例子是抛硬币。公平硬币的分布是 <span displaypfx="inline-" class="mathjax-container">\(p=(0.5,0.5)\)</span>，熵为 <span displaypfx="inline-" class="mathjax-container">\(-0.5\log_2 0.5-0.5\log_2 0.5=1\)</span> bit；若硬币极度偏向正面，例如 <span displaypfx="inline-" class="mathjax-container">\(p=(0.99,0.01)\)</span>，熵就会显著降低，因为结果基本可预测。熵衡量的核心是“类别概率结构到底有多分散”。</p>
<p>语言也能帮助建立对熵的直觉。以字符为单位时，汉字集合更大，单个常用字符的平均出现概率往往更低，因此 <span displaypfx="inline-" class="mathjax-container">\(-\log p(x)\)</span> 更大；同时，汉语序列里的下一字符通常也更难直接预测，所以常给人“字符级信息更密、熵更高”的直觉。对比之下，韩语的字符系统更小，序列模式也通常更规则，下一字符更容易预测，因此字符级冗余感更强、熵的直觉更低。</p>
<p>若再做一个极粗略的字符级估算：把常用汉字集合近似看作 <span displaypfx="inline-" class="mathjax-container">\(V=3000\)</span>、把韩文字母集合近似看作 <span displaypfx="inline-" class="mathjax-container">\(V=40\)</span>，并暂时假设“下一字符”在各自词表上均匀分布，则最大熵分别约为 <span displaypfx="inline-" class="mathjax-container">\(\log_2 3000\approx 11.55\)</span> bits 与 <span displaypfx="inline-" class="mathjax-container">\(\log_2 40\approx 5.32\)</span> bits。这对应的就是：词表越大、单符号平均概率越低，单位符号的潜在信息量上界越高。</p>
<div class="blog_h2"><span class="graybg">条件熵（Conditional Entropy）</span></div>
<p>条件熵（Conditional Entropy）衡量的是：在已经知道一个随机变量 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 的前提下，另一个随机变量 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 还剩多少不确定性。对离散变量，它定义为：</p>
<span displaypfx="" class="mathjax-container">\[H(Y|X)=-\sum_{x,y}p(x,y)\log p(y|x)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(p(x,y)\)</span> 是联合分布， <span displaypfx="inline-" class="mathjax-container">\(p(y|x)\)</span> 是条件分布。与普通熵 <span displaypfx="inline-" class="mathjax-container">\(H(Y)\)</span> 相比，条件熵把“已知 <span displaypfx="inline-" class="mathjax-container">\(X\)</span>”这一额外信息纳入了计算，因此它描述的是<span style="background-color: #c0c0c0;">看到上下文之后仍然无法消除的平均不确定性</span>。</p>
<p>条件熵满足一个非常重要的链式法则（Chain Rule）：</p>
<span displaypfx="" class="mathjax-container">\[H(X,Y)=H(X)+H(Y|X)\]</span>
<p>这条式子表达的是：联合不确定性等于“先确定 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 需要的信息量”加上“知道 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 之后再确定 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 还需要的信息量”。如果 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 完全由 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 决定，那么 <span displaypfx="inline-" class="mathjax-container">\(H(Y|X)=0\)</span>；如果知道 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 对预测 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 毫无帮助，那么 <span displaypfx="inline-" class="mathjax-container">\(H(Y|X)=H(Y)\)</span>。</p>
<p>这条概念在 AI 中非常重要。语言模型本质上就在最小化“给定上下文后的下一个 token 条件不确定性”；监督学习则在尝试让特征 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 尽可能降低标签 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 的条件熵。一个好的表示，往往意味着：给定表示之后，目标变量剩余的不确定性更小。</p>
<div class="blog_h2"><span class="graybg">互信息（Mutual Information）</span></div>
<p>互信息（Mutual Information）衡量的是：知道 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 之后，关于 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 的不确定性到底减少了多少。它定义为：</p>
<span displaypfx="" class="mathjax-container">\[I(X;Y)=H(Y)-H(Y|X)\]</span>
<p>同一个量还可以写成对称形式：</p>
<span displaypfx="" class="mathjax-container">\[I(X;Y)=H(X)+H(Y)-H(X,Y)\]</span>
<p>以及分布距离形式：</p>
<span displaypfx="" class="mathjax-container">\[I(X;Y)=D_{\mathrm{KL}}\bigl(p(x,y)\,\|\,p(x)p(y)\bigr)\]</span>
<p>这三种写法分别强调了三个角度。第一种写法强调“减少了多少不确定性”；第二种写法强调“联合结构比两个独立分布拼起来少了多少冗余”；第三种写法强调“联合分布与独立分布之间到底偏离了多少”。若 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 独立，则 <span displaypfx="inline-" class="mathjax-container">\(p(x,y)=p(x)p(y)\)</span>，互信息为 0；若二者强相关，互信息就大。</p>
<p>互信息在机器学习里有很强的桥梁作用。特征选择希望保留与标签互信息高的特征；表示学习希望得到对目标变量更有信息量的表示；对比学习（Contrastive Learning）很多时候都可以理解为在间接提高表示与语义目标之间的互信息。它把“这个表示到底有没有用”转成了一个可度量的问题。</p>
<div class="blog_h2"><span class="graybg">交叉熵（Cross-Entropy）</span></div>
<p>交叉熵（Cross-Entropy）衡量的是：若真实样本来自分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>，但预测或编码时使用分布 <span displaypfx="inline-" class="mathjax-container">\(q\)</span>，平均需要多少信息量。它定义为：</p>
<span displaypfx="" class="mathjax-container">\[H(p,q)=-\sum_i p_i\log q_i\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 是真实分布（True Distribution）或数据分布， <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 是模型分布（Model Distribution）或预测分布。与熵 <span displaypfx="inline-" class="mathjax-container">\(H(p)=-\sum_i p_i\log p_i\)</span> 相比，交叉熵把“对真实分布的自我编码”改成了“用模型分布来编码真实分布”。因此它天然会把模型偏差也算进去。</p>
<p>交叉熵与熵、KL 散度之间满足最关键的一条关系：</p>
<span displaypfx="" class="mathjax-container">\[H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)\]</span>
<p>这条式子说明：交叉熵等于“真实分布本来就不可避免的信息量”加上“模型偏离真实分布所多付出的代价”。因此，在真实分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 固定时，最小化交叉熵就等价于最小化 <span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(p\|q)\)</span>。KL 散度本身的方向性和更深层意义，会在本章最后单独展开。</p>
<p>分类问题里，真实标签通常写成 one-hot 分布。若某个样本的真实类别是 <span displaypfx="inline-" class="mathjax-container">\(c^*\)</span>，则只有 <span displaypfx="inline-" class="mathjax-container">\(p_{c^*}=1\)</span>，其他类别概率都为 0。此时交叉熵立刻化简成：</p>
<span displaypfx="" class="mathjax-container">\[H(p,q)=-\log q_{c^*}\]</span>
<p>这说明分类交叉熵损失（Cross-Entropy Loss）的本质，就是惩罚模型给真实类别分配过低概率。若模型把真实类别概率压到很小，损失会急剧上升；若模型给真实类别高概率，损失就很小。因此，交叉熵本质上就是负对数似然（Negative Log-Likelihood, NLL）在分类任务上的具体展开。</p>
<p>二分类情形下，若真实标签 <span displaypfx="inline-" class="mathjax-container">\(y\in\{0,1\}\)</span>，模型输出正类概率 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span>，则交叉熵退化为：</p>
<span displaypfx="" class="mathjax-container">\[\ell_{\mathrm{BCE}}(y,\pi)=-y\log \pi-(1-y)\log(1-\pi)\]</span>
<p>多分类情形下，若模型输出 softmax 概率 <span displaypfx="inline-" class="mathjax-container">\(q_c\)</span>，则损失就是前面的 one-hot 交叉熵。于是 BCE、Categorical Cross-Entropy 和语言模型里的 token-level NLL，本质上都属于同一条信息论主线。</p>
<p>若继续使用前面的例子，真实分布 <span displaypfx="inline-" class="mathjax-container">\(p=(0.5,0.5)\)</span>，模型分布 <span displaypfx="inline-" class="mathjax-container">\(q=(0.9,0.1)\)</span>，则交叉熵为</p>
<span displaypfx="" class="mathjax-container">\[H(p,q)=-0.5\log 0.9-0.5\log 0.1\approx 1.204\ (\text{nats})\]</span>
<p>而真实熵 <span displaypfx="inline-" class="mathjax-container">\(H(p)\approx 0.693\)</span>，两者差值正好就是前面算出的 <span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(p\|q)\approx 0.511\)</span>。图像化地看，就是交叉熵把“分布自身的不确定性”和“模型额外犯的错”加在了一起：</p>
<p><a href="https://blog.gmem.cc/wp-content/uploads/2026/03/plot_entropy_cross.png"><img class="alignnone size-full wp-image-40943" src="https://blog.gmem.cc/wp-content/uploads/2026/03/plot_entropy_cross.png" alt="plot_entropy_cross" width="100%" /></a></p>
<div class="blog_h2"><span class="graybg">困惑度（Perplexity）</span></div>
<p>困惑度（Perplexity, PPL）主要用于语言模型评估。它把平均交叉熵或平均 NLL 指数化，得到一个更直观的尺度；这个尺度对应模型在每一步预测时面对的“有效分支数（Effective Branching Factor）”。对长度为 <span displaypfx="inline-" class="mathjax-container">\(N\)</span> 的 token 序列，若模型给出的条件概率是 <span displaypfx="inline-" class="mathjax-container">\(q(x_t|x_{&lt;t})\)</span>，则平均 NLL 为：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{NLL}=-\frac{1}{N}\sum_{t=1}^{N}\log q(x_t|x_{&lt;t})\]</span>
<p>若使用自然对数，则困惑度定义为：</p>
<span displaypfx="" class="mathjax-container">\[\mathrm{PPL}=\exp(\mathrm{NLL})\]</span>
<p>因此，平均 NLL 越小，说明模型越能给真实 token 高概率，困惑度也越低；平均 NLL 越大，说明模型越“困惑”，困惑度就越高。若一个模型在某个位置总像是在若干个几乎等可能的候选之间摇摆，那么它的困惑度就高；若它常能把概率质量集中在极少数正确候选上，困惑度就低。</p>
<p>困惑度与熵的关系也很直接：若分布更均匀、不确定性更高，则平均惊奇更大，熵更高，困惑度也更高。对均匀分布而言，若有 <span displaypfx="inline-" class="mathjax-container">\(K\)</span> 个等可能结果，则困惑度恰好等于 <span displaypfx="inline-" class="mathjax-container">\(K\)</span>。这也是“有效分支数”这个直觉的来源。</p>
<p>不过，困惑度只能在相同 tokenization、相近评测语料和相同单位下比较。换了分词器、词表粒度或语料分布，PPL 的绝对值就会发生系统性变化。因此，困惑度非常适合同一模型家族内部比较，却不适合跨完全不同 tokenizer 和数据设定做简单横比。</p>
<div class="blog_h2"><span class="graybg">KL 散度（Kullback–Leibler Divergence）</span></div>
<div class="blog_h3"><span class="graybg">定义</span></div>
<p>KL 散度衡量两个概率分布之间的偏离程度。对离散分布 <span displaypfx="inline-" class="mathjax-container">\(p,q\)</span>，定义为：</p>
<span displaypfx="" class="mathjax-container">\[D_{\mathrm{KL}}(p\|q)=\sum_i p_i\log\frac{p_i}{q_i}=\mathbb{E}_{x\sim p}\!\left[\log\frac{p(x)}{q(x)}\right]\]</span>
<p>这条公式可以逐块来读。这里 <span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}_{x\sim p}[\cdot]\)</span> 表示“对 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 按照分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 取期望”，也就是用 <span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span> 作为权重，对每个可能事件的括号内数值做加权平均。括号里的 <span displaypfx="inline-" class="mathjax-container">\(\log \frac{p(x)}{q(x)}\)</span> 表示：对同一个事件 <span displaypfx="inline-" class="mathjax-container">\(x\)</span>，真实分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 给它的概率，与模型分布 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 给它的概率相比，相差了多少个对数尺度。若某个事件在 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 下概率高、但在 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 下概率低，那么这一项就为正，而且会把 KL 散度往上推；若某个事件在 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 下被高估，这一项可能变成负值，但最后整体仍会在按 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 加权平均后保持非负。</p>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 通常代表真实分布、目标分布或参考分布， <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 通常代表模型分布、近似分布或当前策略分布。把它按编码视角理解，KL 散度表示：如果样本真实来自 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>，但描述或编码时使用了按 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 设计的规则，那么平均会额外多付出多少码长。</p>
<p>这一定义非常重要，因为它把“模型到底离目标分布还有多远”变成了一个可以直接优化、直接推导的数学量。后面最大似然、交叉熵训练、变分推断、策略正则化和蒸馏，几乎都能在某个层面写成 KL 散度最小化。</p>
<div class="blog_h3"><span class="graybg">三条关键性质</span></div>
<p>第一条性质是不对称性：</p>
<span displaypfx="" class="mathjax-container">\[D_{\mathrm{KL}}(p\|q)\ne D_{\mathrm{KL}}(q\|p)\]</span>
<p>因此，KL 并非通常意义上的距离度量（Metric）。它没有“从 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 到 <span displaypfx="inline-" class="mathjax-container">\(q\)</span>”与“从 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 到 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>”完全等价的性质。方向一旦交换，优化行为就可能完全不同，这正是后面正向 KL 与反向 KL 分歧的根源。</p>
<p>第二条性质是绝对非负性：</p>
<span displaypfx="" class="mathjax-container">\[D_{\mathrm{KL}}(p\|q)\ge 0\]</span>
<p>而且只有当 <span displaypfx="inline-" class="mathjax-container">\(p=q\)</span> 时才取 0。这意味着 KL 散度确实可以被理解为“分布差异的代价”，并且这个代价不会出现负数。很多机器学习目标之所以可以被解释为“逼近目标分布”，正是因为它们最后都能写成某个非负 KL 项再加一个与参数无关的常数。</p>
<p>第三条性质与支持集（Support）直接相关。若存在某个事件 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 使得 <span displaypfx="inline-" class="mathjax-container">\(p(x)&gt;0\)</span>，但 <span displaypfx="inline-" class="mathjax-container">\(q(x)=0\)</span>，则</p>
<span displaypfx="" class="mathjax-container">\[D_{\mathrm{KL}}(p\|q)=+\infty\]</span>
<p>这意味着：只要真实分布认为某种情况会发生，而模型却把它的概率直接压成 0，正向 KL 的惩罚就会发散。这个性质会强烈约束模型不要遗漏真实分布支持集中的任何区域。因此，正向 KL 往往带有明显的“覆盖全部真实模式”的倾向。</p>
<div class="blog_h3"><span class="graybg">正向 KL 与反向 KL</span></div>
<p>由于 KL 不对称，优化 <span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(p\|q)\)</span> 与优化 <span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(q\|p)\)</span> 往往会导向两种完全不同的模型行为。通常把前者称为正向 KL（Forward KL），把后者称为反向 KL（Reverse KL）。</p>
<p>正向 KL：</p>
<span displaypfx="" class="mathjax-container">\[\min_q D_{\mathrm{KL}}(p\|q)\]</span>
<p>当真实分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 是多峰（Multi-modal）而模型 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 表达能力有限时，正向 KL 常表现出较强的<span style="background-color: #c0c0c0;">模式覆盖（Mode-covering）</span>倾向。因为若某个真实峰被 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 完全忽略，且该峰在 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 下概率不小，那么惩罚会非常大。于是模型更倾向于把多个真实峰都“罩进去”，哪怕这会让分布变宽、变平、甚至在峰与峰之间产生额外质量。</p>
<p>反向 KL：</p>
<span displaypfx="" class="mathjax-container">\[\min_q D_{\mathrm{KL}}(q\|p)\]</span>
<p>则更容易表现出<span style="background-color: #c0c0c0;">模式寻优（Mode-seeking）</span>倾向。因为现在期望是对 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 取的，模型只会为自己已经放置概率质量的区域付出代价。若它把质量集中到 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 里一个最高的峰附近，就可以避免在低概率区域“乱撒概率”；至于其他较小的峰，反向 KL 允许它忽略。于是结果通常更尖、更保守，也更容易集中在局部最优模式上。</p>
<p>这种差异可以用“求均值”与“求众数”的直觉来帮助理解。正向 KL 更像试图用一个近似分布去覆盖整个真实分布的平均形状；反向 KL 更像试图锁定真实分布里最值得相信的高概率模式。这个类比只是一种直觉，并非严格定理；真实行为还会受到模型族、参数化方式和优化过程的影响，但它非常适合帮助理解两种 KL 的整体倾向。</p>
<p>一个非常典型的具象化场景是：真实分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 由两个彼此分离的高斯峰组成，而模型 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 只能用一个单峰高斯去近似它。此时，若优化正向 KL，模型通常会把方差拉大、把两个峰尽量都罩住，哪怕峰与峰之间那段原本概率不高的区域也被分到一些质量；若优化反向 KL，模型则更容易直接贴到其中一个峰上，把另一个峰干脆忽略掉。这个双峰例子之所以经典，正是因为它把“模式覆盖”和“模式寻优”的差异几乎以最直观的几何方式暴露了出来。</p>
<div><a href="https://blog.gmem.cc/wp-content/uploads/2026/04/kl-forward-reverse-modes.png"><img class="alignnone size-full wp-image-42317" src="https://blog.gmem.cc/wp-content/uploads/2026/04/kl-forward-reverse-modes.png" alt="kl-forward-reverse-modes" width="1920" height="1178" /></a></div>
<div class="blog_h3"><span class="graybg">监督学习为什么经常落到正向 KL</span></div>
<p>监督学习最典型的设定是：训练样本来自某个真实数据分布 <span displaypfx="inline-" class="mathjax-container">\(p_{\text{data}}(x,y)\)</span>，模型则定义一个条件分布 <span displaypfx="inline-" class="mathjax-container">\(q_\theta(y|x)\)</span>。训练的目标，是让模型分布尽可能贴近真实条件分布。若从总体风险角度写，最常见的最大似然或交叉熵训练可以写成：</p>
<span displaypfx="" class="mathjax-container">\[\min_\theta \mathbb{E}_{(x,y)\sim p_{\text{data}}}\big[-\log q_\theta(y|x)\big]\]</span>
<p>这正是经验版交叉熵。进一步展开后，它等价于最小化：</p>
<span displaypfx="" class="mathjax-container">\[\mathbb{E}_{x\sim p_{\text{data}}}\big[D_{\mathrm{KL}}(p_{\text{data}}(y|x)\|q_\theta(y|x))\big]\]</span>
<p>再加上与参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 无关的常数项。在监督学习中，模型通常是在用自己的预测分布去逼近真实标签条件分布，而这个逼近方向正是<span style="background-color: #c0c0c0;">正向 KL</span>。</p>
<p>因此，交叉熵训练常呈现“宁可多覆盖真实模式，也不愿漏掉真实可能性”的行为。分类模型若把真实类别概率压得过低，损失会立刻升高；密度估计模型若把真实样本区域概率分配得太小，代价同样会很大。</p>
<p>均方误差（Mean Squared Error, MSE）也能放进这条链里，但需要补上分布假设：当回归任务假设 <span displaypfx="inline-" class="mathjax-container">\(y|x\)</span> 服从均值为 <span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span>、方差固定的高斯分布时，最小化 MSE 等价于最大化高斯似然；从分布角度看，它同样是在做一种正向 KL 逼近。于是，交叉熵、BCE 和 MSE 核心是不同观测分布假设下的同一条最大似然主线。</p>
<div class="blog_h3"><span class="graybg">强化学习为什么常出现反向 KL</span></div>
<p>强化学习通过奖励函数（Reward Function）来定义哪些行为更值得偏好。若从最大熵强化学习（Maximum Entropy Reinforcement Learning）或控制即推断（Control as Inference）的视角写，最优轨迹分布可以表示为：</p>
<span displaypfx="" class="mathjax-container">\[p^*(\tau)\propto \exp\!\left(\frac{1}{\alpha}R(\tau)\right)\]</span>
<p>这里 <span displaypfx="inline-" class="mathjax-container">\(\tau\)</span> 是轨迹（Trajectory），表示从初始状态开始一路经历的状态、动作与转移序列； <span displaypfx="inline-" class="mathjax-container">\(R(\tau)\)</span> 是这条轨迹的总回报（Return）； <span displaypfx="inline-" class="mathjax-container">\(\alpha\)</span> 是温度或熵正则系数，用来控制“更贪心地追高奖励”和“保留更多探索随机性”之间的权衡。式子里的 <span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span> 核心是一个对高奖励轨迹赋予更高权重的目标分布。若某条轨迹奖励越高， <span displaypfx="inline-" class="mathjax-container">\(\exp(R(\tau)/\alpha)\)</span> 就越大，它在 <span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span> 里的相对权重也越高。</p>
<p>当前策略记为 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span>。它表示智能体在给定状态 <span displaypfx="inline-" class="mathjax-container">\(s\)</span> 时采取动作 <span displaypfx="inline-" class="mathjax-container">\(a\)</span> 的条件分布，即 <span displaypfx="inline-" class="mathjax-container">\(\pi(a|s)\)</span>。一旦策略 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span> 固定，再结合环境的状态转移概率，整套交互过程就会诱导出一个“轨迹是怎样被生成出来”的概率分布，这个分布就记为 <span displaypfx="inline-" class="mathjax-container">\(q_\pi(\tau)\)</span>。因此 <span displaypfx="inline-" class="mathjax-container">\(q_\pi(\tau)\)</span> 的意思核心是<span style="background-color: #c0c0c0;">由策略 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span> 所诱导出来的轨迹分布</span>。</p>
<p>这时很多强化学习目标都可以写成：</p>
<span displaypfx="" class="mathjax-container">\[\min_\pi D_{\mathrm{KL}}\bigl(q_\pi(\tau)\|p^*(\tau)\bigr)\]</span>
<p>这里的关键点是：<span style="background-color: #c0c0c0;">谁在逼近谁，不由 KL 公式左右两侧的位置决定，而由谁是优化变量决定</span>。在监督学习里，常把真实分布记作 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>、模型分布记作 <span displaypfx="inline-" class="mathjax-container">\(q\)</span>，于是常见写法是 <span displaypfx="inline-" class="mathjax-container">\(\min_\theta D_{\mathrm{KL}}(p\|q_\theta)\)</span>；但这只是一个常见写法，并非必须遵守的“左边一定是真实、右边一定是模型”的规则。只要被调的是 <span displaypfx="inline-" class="mathjax-container">\(q_\theta\)</span>，那就是让模型分布去逼近目标分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>。同理，这里被调的是策略 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span>，因此真正会随训练改变的是 <span displaypfx="inline-" class="mathjax-container">\(q_\pi(\tau)\)</span>；而 <span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span> 是由奖励定义出的目标分布。于是这个目标的含义仍然是：<span style="background-color: #c0c0c0;">通过调整策略，让 <span displaypfx="inline-" class="mathjax-container">\(q_\pi(\tau)\)</span> 靠近 <span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span></span>。</p>
<p>式子写成 <span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(q_\pi(\tau)\|p^*(\tau))\)</span>，表达的是<span style="background-color: #c0c0c0;">反向 KL 形式</span>。它与前面的正向 KL 在“谁是目标分布”这件事上并没有变化，变化的是<span style="background-color: #c0c0c0;">偏差如何被惩罚</span>。由于期望是对 <span displaypfx="inline-" class="mathjax-container">\(q_\pi(\tau)\)</span> 取的，策略主要会为自己当前已经赋予概率质量的轨迹负责；那些自己几乎不去的区域，即使在 <span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span> 里还有一定质量，也不会像正向 KL 那样受到强烈惩罚。结果就是策略更容易把概率质量集中到少数高奖励轨迹上，而非尽量覆盖所有还不错的行为。这正是反向 KL 常见的 mode-seeking 或“尖化”倾向。</p>
<p>这也解释了为什么很多强化学习或对齐过程具有明显的“尖化”倾向。只要某些动作或轨迹能显著提高回报，策略就会更愿意向这些高价值模式集中；低奖励区域即使仍然可能发生，也会被逐渐压低概率。这个行为与前面正向 KL 的“模式覆盖”倾向形成鲜明对照。</p>
<p>不过，这里必须保留一个边界：<span style="background-color: #c0c0c0;">并非所有强化学习算法都可以无条件、逐字逐句地等同于“最小化反向 KL”</span>。更准确的说法是：在最大熵强化学习、策略正则化 RL、RLHF / DPO 一类现代对齐与偏好优化框架中，反向 KL 视角尤其自然、尤其有解释力；而对更传统的值函数方法、时序差分方法和某些 actor-critic 变体，这个视角仍然有帮助，但不一定就是最直接的原始定义。</p>
<div class="blog_h3"><span class="graybg">监督学习与强化学习的统一视角</span></div>
<p>从 KL 散度视角看，监督学习与强化学习都在做同一件事：让人工构造的模型分布 <span displaypfx="inline-" class="mathjax-container">\(q\)</span> 去逼近某个目标分布 <span displaypfx="inline-" class="mathjax-container">\(p\)</span>。差别不在于“一个学分布，一个不学分布”，而在于<span style="background-color: #c0c0c0;">目标分布如何定义、优化方向如何选、以及我们能否直接从目标分布采样</span>。</p>
<p>在监督学习里， <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 更接近真实数据分布或真实条件标签分布，样本可以直接观测，因此模型常落到正向 KL 或其等价目标，例如交叉熵、负对数似然和在特定噪声假设下的平方误差。模型为了不漏掉真实支持集中的区域，天然会更偏向全面覆盖。</p>
<p>在强化学习里， <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 更接近由奖励函数诱导出的最优行为分布，通常无法直接拿到完整样本，只能通过环境交互和奖励反馈间接逼近。因此很多现代 RL / 对齐目标更自然地落到反向 KL 或带 KL 正则的变体上。模型为了把概率质量集中到高回报区域，天然会更偏向高峰聚焦。</p>
<p>这一统一视角的真正价值，在于它把许多表面不同的算法放回同一个底层问题：<span style="background-color: #c0c0c0;">模型分布如何在高维空间中逼近目标分布</span>。一旦把问题写成分布逼近，很多设计选择就有了统一解释：为什么有些训练目标鼓励覆盖全部模式，为什么有些目标鼓励策略更尖锐，为什么 KL 正则能稳定训练，为什么交叉熵、蒸馏、变分推断和策略约束会反复出现。KL 散度之所以重要，正是因为它把这些分散的现象压缩到了同一条数学主线上。</p>
<div class="blog_h1"><span class="graybg">附录</span></div>
<div class="blog_h2"><span class="graybg">数学符号速查</span></div>
<p>这一表按整篇出现频率和理解价值整理最常见的数学符号。需要特别注意：<span style="background-color: #c0c0c0;">同一个符号在不同小节中可能复用</span>，例如 <span displaypfx="inline-" class="mathjax-container">\(p\)</span> 可以表示概率、分布，也可以出现在最优值或目标分布的记号里；因此阅读时必须结合上下文判断。下面的说明以本篇最常见、最核心的含义为主。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center; width: 20%;">符号</td>
<td style="text-align: center;">说明</td>
<td style="text-align: center;">示例</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}\)</span></td>
<td>读作 real numbers /ˈrɪəl ˈnʌmbərz/；表示实数集合。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\in\mathbb{R}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^n\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbb{R}^{m\times n}\)</span></td>
<td>读作 R to the n /ɑːr tə ðiː ɛn/、real m by n /ˈrɪəl ɛm baɪ ɛn/；分别表示 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 维实向量空间和 <span displaypfx="inline-" class="mathjax-container">\(m\times n\)</span> 的实矩阵空间。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\in\mathbb{R}^n\)</span>；<span displaypfx="inline-" class="mathjax-container">\(A\in\mathbb{R}^{m\times n}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{N}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbb{Z}\)</span></td>
<td>读作 natural numbers /ˈnætʃərəl ˈnʌmbərz/、integers /ˈɪntɪdʒərz/；分别表示自然数集合和整数集合。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(n\in\mathbb{N}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(k\in\mathbb{Z}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{Q}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\mathbb{C}\)</span></td>
<td>读作 rational numbers /ˈræʃənəl ˈnʌmbərz/、complex numbers /ˈkɒmplɛks ˈnʌmbərz/；分别表示有理数集合和复数集合。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{Q}\subset\mathbb{R}\subset\mathbb{C}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(a,b,c\)</span></td>
<td>读作 a /eɪ/、b /biː/、c /siː/；常表示常数、系数、标量或方程参数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ax+b=0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x\)</span></td>
<td>读作 ex /ɛks/；常表示自变量、输入、样本点，或随机变量的某个取值。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(f(x)=x^2\)</span>；<span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(y\)</span></td>
<td>读作 wye /waɪ/；常表示输出、标签、因变量或目标值。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y=f(x)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(q_\theta(y|x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(z\)</span></td>
<td>读作 zee /ziː/；常表示中间变量、复合表达式中的辅助量，或模型未归一化输出。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(z=Wx+b\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(n,m,N\)</span></td>
<td>读作 en /ɛn/、em /ɛm/、capital N /ˈkæpɪtəl ɛn/；常表示维度、样本数、类别数、矩阵大小或序列长度。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{1}{N}\sum_{i=1}^{N}x_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(i,j,k\)</span></td>
<td>读作 eye /aɪ/、jay /dʒeɪ/、kay /keɪ/；常作求和、矩阵、序列或类别索引。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A_{ij}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\sum_{i=1}^{n}x_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(t\)</span></td>
<td>读作 tee /tiː/；常表示时间步、位置、迭代轮次或序列下标。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(X_t\)</span>；<span displaypfx="inline-" class="mathjax-container">\(x_t\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(h\)</span></td>
<td>读作 aitch /eɪtʃ/；常表示极限中的微小增量，或构造性辅助变量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(f,g,h\)</span></td>
<td>读作 ef /ɛf/、gee /dʒiː/、aitch /eɪtʃ/；常表示函数。 <span displaypfx="inline-" class="mathjax-container">\(f\)</span> 往往是目标函数， <span displaypfx="inline-" class="mathjax-container">\(g\)</span> 常表示约束或辅助函数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y=f(x)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(g(x)\le 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\varphi\)</span></td>
<td>读作 varphi /ˈvɑːrfaɪ/；常表示一般性标量函数，尤其用于凸分析、Jensen 不等式和抽象函数构造。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\varphi(\mathbb{E}[X])\le \mathbb{E}[\varphi(X)]\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbf{x},\mathbf{y},\mathbf{w},\mathbf{b}\)</span></td>
<td>读作 bold x /boʊld ɛks/ 等；黑体通常表示向量。 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{w}\)</span> 常作参数向量， <span displaypfx="inline-" class="mathjax-container">\(\mathbf{b}\)</span> 常作偏置向量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\hat y=\mathbf{w}^\top\mathbf{x}+b\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\boldsymbol{\theta}\)</span></td>
<td>读作 bold theta /boʊld ˈθeɪtə/；常表示整组模型参数或一个高维参数向量。相比单个标量参数 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span>，黑体/粗体版本强调“这是一个参数集合”。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\nabla_{\boldsymbol{\theta}}\mathcal{L}(\boldsymbol{\theta})\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(A,B,C\)</span></td>
<td>读作 capital A /ˈkæpɪtəl eɪ/ 等；大写拉丁字母常表示矩阵、集合或事件。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A\mathbf{x}=\mathbf{b}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(P(A|B)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(P(A)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(P(A|B)\)</span></td>
<td>读作 probability of A /ˌprɒbəˈbɪləti əv eɪ/、probability of A given B /ˌprɒbəˈbɪləti əv eɪ ˈɡɪvən biː/；分别表示事件 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的概率，以及在 <span displaypfx="inline-" class="mathjax-container">\(B\)</span> 已发生条件下 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的条件概率。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(A|B)=\frac{P(A\cap B)}{P(B)}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(A\cap B\)</span>、<span displaypfx="inline-" class="mathjax-container">\(A\cup B\)</span>、<span displaypfx="inline-" class="mathjax-container">\(A^c\)</span></td>
<td>读作 A cap B /eɪ kæp biː/、A cup B /eɪ kʌp biː/、A complement /eɪ ˈkɒmplɪmənt/；分别表示交集、并集和补集。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(A^c)=1-P(A)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(P(A\cup B)=P(A)+P(B)-P(A\cap B)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\subset\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\subseteq\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\notin\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\setminus\)</span></td>
<td>读作 proper subset /ˈprɒpər ˈsʌbsɛt/、subset or equal to /ˈsʌbsɛt ɔːr ˈiːkwəl tuː/、not in /nɒt ɪn/、set minus /sɛt ˈmaɪnəs/；分别表示真子集、子集、不属于和集合差。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{N}\subset\mathbb{Z}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(A\subseteq B\)</span>；<span displaypfx="inline-" class="mathjax-container">\(x\notin B\)</span>；<span displaypfx="inline-" class="mathjax-container">\(A\setminus B\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(X,Y\)</span></td>
<td>读作 capital X /ˈkæpɪtəl ɛks/、capital Y /ˈkæpɪtəl waɪ/；常表示随机变量、随机向量或数据矩阵。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(X=x)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(I(X;Y)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(X_t\)</span></td>
<td>读作 X sub t /ɛks sʌb tiː/；表示时刻 <span displaypfx="inline-" class="mathjax-container">\(t\)</span> 的状态或随机变量取值。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(X_{t+1}|X_t)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(x_t\)</span>、<span displaypfx="inline-" class="mathjax-container">\(x^2\)</span>、<span displaypfx="inline-" class="mathjax-container">\(x^{(i)}\)</span></td>
<td>读作 x sub t /ɛks sʌb tiː/、x squared /ɛks skwerd/、x superscript i /ɛks ˈsuːpərskrɪpt aɪ/；下标 <span displaypfx="inline-" class="mathjax-container">\(_{}\)</span> 通常表示索引、时间步、类别或参数归属，上标 <span displaypfx="inline-" class="mathjax-container">\(^{}\)</span> 既可表示幂次，也可表示“第几个样本”“最优解”“逆”“转置”等附加标记，因此必须结合上下文判断。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x_t\)</span>；<span displaypfx="inline-" class="mathjax-container">\(x^2\)</span>；<span displaypfx="inline-" class="mathjax-container">\(x^{(i)}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(A^{-1}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(p,q\)</span></td>
<td>读作 pee /piː/、cue /kjuː/；在概率与信息论中常表示分布、概率质量或模型分布。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(p\|q)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(p_i,q_i\)</span></td>
<td>读作 p sub i /piː sʌb aɪ/、q sub i /kjuː sʌb aɪ/；表示第 <span displaypfx="inline-" class="mathjax-container">\(i\)</span> 个类别或事件的概率。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(H(p)=-\sum_i p_i\log p_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(p(x)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(q(x)\)</span></td>
<td>读作 p of x /piː əv ɛks/、q of x /kjuː əv ɛks/；表示事件 <span displaypfx="inline-" class="mathjax-container">\(x\)</span> 在不同分布下的概率或密度。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\log\frac{p(x)}{q(x)}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(p(x,y)\)</span></td>
<td>读作 p of x comma y /piː əv ɛks ˈkɑːmə waɪ/；表示联合分布。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(I(X;Y)=D_{\mathrm{KL}}(p(x,y)\|p(x)p(y))\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(p(y|x)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(q_\theta(y|x)\)</span></td>
<td>读作 p of y given x /piː əv waɪ ˈɡɪvən ɛks/；表示条件分布。带 <span displaypfx="inline-" class="mathjax-container">\(\theta\)</span> 的 <span displaypfx="inline-" class="mathjax-container">\(q_\theta\)</span> 常表示参数化模型分布。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(q_\theta(y|x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\)</span></td>
<td>读作 p star of tau /piː stɑːr əv taʊ/；常表示目标分布、最优分布或由奖励诱导出的理想轨迹分布。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\propto \exp(R(\tau)/\alpha)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(q_\pi(\tau)\)</span></td>
<td>读作 q sub pi of tau /kjuː sʌb paɪ əv taʊ/；表示由策略 <span displaypfx="inline-" class="mathjax-container">\(\pi\)</span> 诱导出的轨迹分布。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(q_\pi(\tau)\|p^*(\tau))\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\theta\)</span></td>
<td>读作 theta /ˈθeɪtə/；常表示模型参数、待估计参数或高维参数向量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(f_\theta(x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\hat{\theta}\)</span></td>
<td>读作 theta hat /ˈθeɪtə hæt/；表示参数估计值，常是 MLE 或 MAP 的最优解。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\hat{\theta}_{\mathrm{MLE}}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\tilde{x}\)</span></td>
<td>读作 x tilde /ɛks ˈtɪldə/；常表示经过变换、构造出来的辅助变量，或满足特殊条件的候选点，例如严格可行点。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(g_i(\tilde{x})&lt;0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mu\)</span></td>
<td>读作 mu /mjuː/；常表示总体均值、高斯分布中心或期望位置。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(X\sim\mathcal{N}(\mu,\sigma^2)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sigma\)</span></td>
<td>读作 sigma /ˈsɪɡmə/；常表示标准差、尺度参数或高斯宽度。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sigma=\sqrt{\mathrm{Var}(X)}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span></td>
<td>读作 sigma squared /ˈsɪɡmə skwerd/；表示方差。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(X\sim\mathcal{N}(\mu,\sigma^2)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathcal{N}(\mu,\sigma^2)\)</span></td>
<td>读作 normal of mu sigma squared /ˈnɔːrməl əv mjuː ˈsɪɡmə skwerd/；表示均值为 <span displaypfx="inline-" class="mathjax-container">\(\mu\)</span>、方差为 <span displaypfx="inline-" class="mathjax-container">\(\sigma^2\)</span> 的高斯分布（正态分布）。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(X\sim\mathcal{N}(170,6^2)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\pi\)</span></td>
<td>读作 pi /paɪ/；在概率论里常表示成功概率，在强化学习里常表示策略。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(X\sim\mathrm{Bernoulli}(\pi)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\pi(a|s)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\lambda\)</span></td>
<td>读作 lambda /ˈlæmdə/；在优化里常表示拉格朗日乘子，在 Poisson 分布里常表示事件率参数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda)=f(x)+\lambda g(x)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(X\sim\mathrm{Poisson}(\lambda)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\nu\)</span></td>
<td>读作 nu /njuː/；常表示对偶变量、等式约束乘子或辅助参数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(x,\lambda,\nu)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\alpha\)</span></td>
<td>读作 alpha /ˈælfə/；常表示系数、温度、熵正则强度或显著性水平。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\propto \exp(R(\tau)/\alpha)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\beta\)</span></td>
<td>读作 beta /ˈbeɪtə/；常表示系数、权重或待估参数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y=\beta_0+\beta_1 x\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\gamma\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\eta\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\xi\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\phi\)</span></td>
<td>读作 gamma /ˈɡæmə/、eta /ˈeɪtə/、xi /ksaɪ/、phi /faɪ/；这些希腊字母常用作常数、学习率、求和采样点、角度或中间变量。具体含义取决于上下文。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(H_n=\log n+\gamma+o(1)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\theta\leftarrow\theta-\eta\nabla L(\theta)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(f(\xi_k)\Delta x_k\)</span>；<span displaypfx="inline-" class="mathjax-container">\(e^{i\phi}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\varepsilon\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\epsilon\)</span></td>
<td>读作 epsilon /ˈɛpsɪlɒn/；常表示很小的正数、误差项、扰动或容差。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(y=f(x)+\varepsilon\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\delta\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\Delta\)</span></td>
<td>读作 delta /ˈdɛltə/；小写常表示极限与连续中的邻域半径，大写常表示有限变化量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(0&lt;|x-a|&lt;\delta\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\Delta x\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\tau\)</span></td>
<td>读作 tau /taʊ/；常表示轨迹、路径或时间展开后的完整序列。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(R(\tau)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\Omega\)</span></td>
<td>读作 omega /oʊˈmeɪɡə/；常表示样本空间、全集或事件空间。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\omega\in\Omega\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\infty\)</span></td>
<td>读作 infinity /ɪnˈfɪnəti/；表示无穷、极限发散方向，或某个量没有上界。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sum_{n=1}^{\infty}a_n\)</span>；<span displaypfx="inline-" class="mathjax-container">\(D_{\mathrm{KL}}(p\|q)=+\infty\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathcal{D}\)</span></td>
<td>读作 calligraphic D /ˌkælɪˈɡræfɪk diː/；常表示数据分布、训练分布或样本集合。</td>
<td><span displaypfx="inline-" class="mathjax-container">\((x,y)\sim\mathcal{D}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}\)</span></td>
<td>读作 calligraphic L /ˌkælɪˈɡræfɪk ɛl/；常表示损失函数或拉格朗日函数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathcal{L}(\theta)=-\log q_\theta(y|x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}\)</span></td>
<td>读作 expectation /ˌɛkspɛkˈteɪʃən/；表示期望，即按某个分布加权后的平均。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbb{E}[X]\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\bar{x}\)</span></td>
<td>读作 x bar /ɛks bɑːr/；常表示样本均值。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(X)\)</span></td>
<td>读作 variance of X /ˈvɛəriəns əv ɛks/；表示随机变量的方差。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{Var}(X)=\mathbb{E}[(X-\mathbb{E}[X])^2]\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{Cov}(X,Y)\)</span></td>
<td>读作 covariance of X and Y /koʊˈvɛəriəns əv ɛks ænd waɪ/；表示两个随机变量的协方差，用来描述它们是否倾向同向变化。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{Cov}(X,Y)=\mathbb{E}[(X-\mu_X)(Y-\mu_Y)]\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\Sigma\)</span></td>
<td>读作 capital sigma /ˈkæpɪtəl ˈsɪɡmə/；常表示协方差矩阵。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\Sigma=\mathbb{E}[(\mathbf{x}-\mu)(\mathbf{x}-\mu)^\top]\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\Lambda\)</span></td>
<td>读作 capital lambda /ˈkæpɪtəl ˈlæmdə/；在线性代数里常表示由特征值组成的对角矩阵。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A=Q\Lambda Q^\top\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sigma(A)\)</span></td>
<td>读作 spectrum of A /ˈspɛktrəm əv eɪ/；表示矩阵 <span displaypfx="inline-" class="mathjax-container">\(A\)</span> 的谱，也就是全部特征值组成的集合。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\rho(A)=\max_{\lambda\in\sigma(A)}|\lambda|\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(|\cdot|\)</span></td>
<td>读作 absolute value /ˈæbsəluːt ˈvæljuː/；表示绝对值或标量大小。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(|x-a|\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mid\)</span>、<span displaypfx="inline-" class="mathjax-container">\(|\)</span></td>
<td>读作 given /ˈɡɪvən/；在概率和条件分布里表示“在……条件下”。正文里 <span displaypfx="inline-" class="mathjax-container">\(P(A|B)\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(P(A\mid B)\)</span> 是同一种读法。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(P(A|B)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(p(y\mid x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_0\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_1\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\|\cdot\|_2\)</span></td>
<td>读作 L-zero /ɛl ˈzɪəroʊ/、L-one /ɛl wʌn/、L-two /ɛl tuː/；表示不同范数或准范数。 <span displaypfx="inline-" class="mathjax-container">\(L_0\)</span> 常表示非零元素个数， <span displaypfx="inline-" class="mathjax-container">\(L_1\)</span> 表示绝对值和， <span displaypfx="inline-" class="mathjax-container">\(L_2\)</span> 表示欧氏长度。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_2\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\|\mathbf{x}\|_1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\cdot\)</span></td>
<td>读作 dot /dɒt/；常表示点积或普通乘法。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathbf{x}\cdot\mathbf{y}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{a}{b}\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\sqrt{x}\)</span></td>
<td>读作 a over b /eɪ ˈoʊvər biː/、square root of x /skwer ruːt əv ɛks/；分别表示分式和平方根。 <span displaypfx="inline-" class="mathjax-container">\(\frac{\cdot}{\cdot}\)</span> 在概率、梯度、归一化和注意力缩放里都非常常见， <span displaypfx="inline-" class="mathjax-container">\(\sqrt{\cdot}\)</span> 则常出现在方差、范数和 <span displaypfx="inline-" class="mathjax-container">\(1/\sqrt{d_k}\)</span> 这类缩放因子里。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{\partial f}{\partial x}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\frac{QK^\top}{\sqrt{d_k}}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\circ\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\odot\)</span></td>
<td>读作 composition /ˌkɒmpəˈzɪʃən/、Hadamard product /ˈhædəmɑːrd ˈprɒdʌkt/；前者常表示函数复合，也可在角度里作度数记号，后者表示逐元素乘法。</td>
<td><span displaypfx="inline-" class="mathjax-container">\((f\circ g)(x)=f(g(x))\)</span>；<span displaypfx="inline-" class="mathjax-container">\(X\odot M\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(^\top\)</span></td>
<td>读作 transpose /trænˈspoʊz/；表示转置。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A^\top\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(^{-1}\)</span></td>
<td>读作 inverse /ɪnˈvɝːs/；表示逆矩阵、逆元素或倒数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A^{-1}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\det\)</span></td>
<td>读作 determinant /dɪˈtɝːmɪnənt/；表示行列式。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\det(A)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}\)</span></td>
<td>读作 rank /ræŋk/；表示矩阵的秩。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{rank}(A)=1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{tr}\)</span></td>
<td>读作 trace /treɪs/；表示矩阵的迹。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\mathrm{tr}(A)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\nabla\)</span></td>
<td>读作 nabla /ˈnæblə/；表示梯度算子。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\nabla f(\mathbf{x})\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\nabla^2\)</span></td>
<td>读作 nabla squared /ˈnæblə skwerd/；表示二阶导算子，常对应 Hessian 或 Laplacian 语境。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\nabla^2 f(\mathbf{x})\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\partial\)</span></td>
<td>读作 partial /ˈpɑːrʃəl/；偏导符号。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\frac{\partial f}{\partial x}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sum\)</span></td>
<td>读作 summation /səˈmeɪʃən/ 或 sum /sʌm/；表示求和。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sum_{i=1}^{n}x_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(S_n\)</span>、<span displaypfx="inline-" class="mathjax-container">\(H_n\)</span></td>
<td>读作 S sub n /ɛs sʌb ɛn/、H sub n /eɪtʃ sʌb ɛn/；常分别表示前 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 项和与第 <span displaypfx="inline-" class="mathjax-container">\(n\)</span> 个调和数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(S_n=\sum_{k=1}^{n}a_k\)</span>；<span displaypfx="inline-" class="mathjax-container">\(H_n=\sum_{k=1}^{n}\frac{1}{k}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\prod\)</span></td>
<td>读作 product /ˈprɒdʌkt/；表示连乘。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\prod_{i=1}^{n}a_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\times\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\pm\)</span></td>
<td>读作 times /taɪmz/、plus or minus /plʌs ɔːr ˈmaɪnəs/；分别表示乘号，以及“正负两种可能”或围绕中心的对称区间。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(0.99\times 0.01\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\mu\pm 2\sigma\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\int\)</span></td>
<td>读作 integral /ˈɪntɪɡrəl/；表示积分。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\int_a^b f(x)\,dx\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\lim\)</span></td>
<td>读作 limit /ˈlɪmɪt/；表示极限。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\rho\)</span></td>
<td>读作 rho /roʊ/；常表示半径、谱半径，或某个由极限定义出来的关键标量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\rho(A)=\max_{\lambda\in\sigma(A)}|\lambda|\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\log\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\ln\)</span></td>
<td>读作 log /lɒɡ/、ell-en /ˌɛlˈɛn/；分别表示对数和自然对数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(-\log q_{c^*}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\ln x\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\exp\)</span></td>
<td>读作 exponential /ˌɛkspoʊˈnɛnʃəl/；表示指数函数，等价于以 <span displaypfx="inline-" class="mathjax-container">\(e\)</span> 为底的指数映射。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\exp(R(\tau)/\alpha)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\cos\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\tan\)</span></td>
<td>读作 sine /saɪn/、cosine /ˈkoʊsaɪn/、tangent /ˈtændʒənt/；表示三角函数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\sin x\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\cos x\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\min\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\max\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\arg\min\)</span></td>
<td>读作 minimum /ˈmɪnɪməm/、maximum /ˈmæksɪməm/、arg min /ɑːrɡ mɪn/；分别表示最小值、最大值和使目标最小的自变量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\hat\theta=\arg\min_\theta \mathcal{L}(\theta)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\mapsto\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\leftarrow\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\leftrightarrow\)</span></td>
<td>读作 maps to /mæps tuː/、is updated to /ɪz ʌpˈdeɪtɪd tuː/、corresponds to each other /ˌkɒrəˈspɒndz tuː iːtʃ ˈʌðər/；分别表示映射到、赋值/更新方向，以及双向对应或互换关系。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\mapsto f(x)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\theta\leftarrow\theta-\eta\nabla L(\theta)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(A_{ij}\leftrightarrow A_{ji}\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ell\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\ell(\cdot,\cdot)\)</span></td>
<td>读作 ell /ɛl/；常表示损失函数，也常出现在 <span displaypfx="inline-" class="mathjax-container">\(\ell_1\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\ell_2\)</span> 这类范数记号里。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\min_{\theta}\frac{1}{m}\sum_{i=1}^{m}\ell(f_\theta(x^{(i)}),y^{(i)})\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\in\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\sim\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\to\)</span></td>
<td>读作 in /ɪn/、distributed as /dɪˈstrɪbjuːtɪd æz/、tends to /tɛndz tuː/；分别表示“属于”“服从某分布”“趋向于”。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(x\in\mathbb{R}\)</span>；<span displaypfx="inline-" class="mathjax-container">\(X\sim\mathcal{N}(\mu,\sigma^2)\)</span>；<span displaypfx="inline-" class="mathjax-container">\(h\to 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\forall\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\exists\)</span></td>
<td>读作 for all /fɔːr ɔːl/、there exists /ðer ɪɡˈzɪsts/；分别表示“对所有”和“存在至少一个”，常用于定义、极限和约束条件。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(\forall \varepsilon &gt; 0,\ \exists \delta &gt; 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\Rightarrow\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\Leftrightarrow\)</span></td>
<td>读作 implies /ɪmˈplaɪz/、if and only if /ɪf ænd ˈoʊnli ɪf/；分别表示“推出”和“当且仅当”，后者说明两边是双向等价。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(ab=0\Rightarrow a=0\ \text{或}\ b=0\)</span>；<span displaypfx="inline-" class="mathjax-container">\(x\ge 1\Leftrightarrow 1-x\le 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\le\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\ge\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\ne\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\approx\)</span></td>
<td>读作 less than or equal to /lɛs ðæn ɔːr ˈiːkwəl tuː/、greater than or equal to /ˈɡreɪtər ðæn ɔːr ˈiːkwəl tuː/、not equal to /nɒt ˈiːkwəl tuː/、approximately /əˈprɒksɪmətli/。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(g(x)\le 0\)</span>；<span displaypfx="inline-" class="mathjax-container">\(x\ne y\)</span>；<span displaypfx="inline-" class="mathjax-container">\(f(x)\approx g(x)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\ll\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\gg\)</span></td>
<td>读作 much less than /mʌtʃ lɛs ðæn/、much greater than /mʌtʃ ˈɡreɪtər ðæn/；表示数量级上的显著小于或显著大于，不只是普通不等号。在模型结构、复杂度和缓存分析里，它常用来表达“一个量相对另一个量小得多”。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(1&lt;n_{\text{kv}}\ll n_q\)</span>；<span displaypfx="inline-" class="mathjax-container">\(d_{\text{model}}\gg 1\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\propto\)</span></td>
<td>读作 proportional to /prəˈpɔːrʃənəl tuː/；表示“正比于”，通常意味着还差一个与当前变量无关的归一化常数或比例常数。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(p^*(\tau)\propto \exp(R(\tau)/\alpha)\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(\succ\)</span>、<span displaypfx="inline-" class="mathjax-container">\(\succeq\)</span></td>
<td>读作 is positive definite /ɪz ˈpɒzətɪv ˈdɛfɪnɪt/、is positive semidefinite /ɪz ˈpɒzətɪv ˌsɛmiaɪˈdɛfɪnɪt/；在线性代数和优化里分别表示正定与半正定矩阵关系。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(A\succ 0\)</span>；<span displaypfx="inline-" class="mathjax-container">\(\Sigma\succeq 0\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(H(p)\)</span>、<span displaypfx="inline-" class="mathjax-container">\(H(Y|X)\)</span></td>
<td>读作 entropy of p /ˈɛntrəpi əv piː/、conditional entropy /kənˈdɪʃənəl ˈɛntrəpi/；表示熵和条件熵。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(H(p)=-\sum_i p_i\log p_i\)</span></td>
</tr>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(I(X;Y)\)</span></td>
<td>读作 mutual information /ˈmjuːtʃuəl ˌɪnfərˈmeɪʃən/；表示 <span displaypfx="inline-" class="mathjax-container">\(X\)</span> 与 <span displaypfx="inline-" class="mathjax-container">\(Y\)</span> 共享的信息量。</td>
<td><span displaypfx="inline-" class="mathjax-container">\(I(X;Y)=H(Y)-H(Y|X)\)</span></td>
</tr>
</tbody>
</table>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/ai-knowledge-quick-ref-1">人工智能知识 - 数学基础</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/ai-knowledge-quick-ref-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Octave知识集锦</title>
		<link>https://blog.gmem.cc/octave-faq</link>
		<comments>https://blog.gmem.cc/octave-faq#comments</comments>
		<pubDate>Sat, 14 Dec 2019 13:27:57 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://blog.gmem.cc/?p=30985</guid>
		<description><![CDATA[<p>简介 GNU Octave是一种高级编程语言，主要用在数值计算领域，解决线性、非线性的问题。它和MATLAB有着类似的语法和能力，可以作为MATLAB的开源/免费替代品。 在机器学习领域，可以利用Octave快速的完成算法原型，并最终改用某种工业语言重新实现算法。 基础 操作符 操作符/特殊字符 说明 % 注释标记，后面的内容是注释 ; 抑制输出，默认情况下回车后会输出当前表达式的结果 '' 字符串标记 = 赋值 ==  ~= &#38;&#38; &#124;&#124;  等于、不等于、与、或  &#60;=  <a class="read-more" href="https://blog.gmem.cc/octave-faq">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/octave-faq">Octave知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">简介</span></div>
<p>GNU Octave是一种高级编程语言，主要用在数值计算领域，解决线性、非线性的问题。它和MATLAB有着类似的语法和能力，可以作为MATLAB的开源/免费替代品。</p>
<p>在机器学习领域，可以利用Octave快速的完成算法原型，并最终改用某种工业语言重新实现算法。</p>
<div class="blog_h1"><span class="graybg">基础</span></div>
<div class="blog_h2"><span class="graybg">操作符</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">操作符/特殊字符</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>%</td>
<td>注释标记，后面的内容是注释</td>
</tr>
<tr>
<td>;</td>
<td>抑制输出，默认情况下回车后会输出当前表达式的结果</td>
</tr>
<tr>
<td>''</td>
<td>字符串标记</td>
</tr>
<tr>
<td>=</td>
<td>赋值</td>
</tr>
<tr>
<td>==  ~= &amp;&amp; || </td>
<td>等于、不等于、与、或 </td>
</tr>
<tr>
<td>&lt;=  &gt;=</td>
<td>小于等于、大于等于</td>
</tr>
<tr>
<td>+ - *  /</td>
<td>加减乘除</td>
</tr>
<tr>
<td>^</td>
<td>乘方</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">数据</span></div>
<div class="blog_h3"><span class="graybg">矩阵</span></div>
<p>矩阵中每<span style="background-color: #c0c0c0;">行用<pre class="crayon-plain-tag">;</pre>分隔</span>，每个<span style="background-color: #c0c0c0;">元素用空格分隔</span>：例如 <pre class="crayon-plain-tag">A = [ 1 2; 3 4; 5 6]</pre>表示一个3x2矩阵。矩阵的每行可以分开写。</p>
<p>要获<span style="background-color: #c0c0c0;">取某个元素</span>，使用<pre class="crayon-plain-tag">A(3, 3)</pre>，结果是个标量。要<span style="background-color: #c0c0c0;">返回某行</span>，使用<pre class="crayon-plain-tag">A(3,: )</pre>，结果是个行向量。要<span style="background-color: #c0c0c0;">返回某列</span>，使用<pre class="crayon-plain-tag">A(:,3)</pre>，结果是个列向量。要<span style="background-color: #c0c0c0;">返回多个行</span>，使用<pre class="crayon-plain-tag">A([1,3],:)</pre>，结果是矩阵，返回多个列类似。</p>
<p><pre class="crayon-plain-tag">A(:)</pre>表示把<span style="background-color: #c0c0c0;">所有列串在一起</span>，形成一个大的列向量。</p>
<p>要<span style="background-color: #c0c0c0;">写入</span>某个、某行、某列，或者多行、多列，使用赋值操作符，左侧如上一小段，右侧写恰当的标量、向量或矩阵。例如<pre class="crayon-plain-tag">A(:,2) = [10, 11, 12]</pre>表示赋值第2列。</p>
<p>要<span style="background-color: #c0c0c0;">扩展一个矩阵</span>，例如生成增广矩阵，可以使用：<pre class="crayon-plain-tag">A = [A, [100; 101; 102]]</pre> 表示在矩阵右侧加上一个列向量。右侧A后面的逗号可以换为空格，效果一样。你还可以合并两个矩阵，例如<pre class="crayon-plain-tag">[A B]</pre>表示把B放在右侧，<pre class="crayon-plain-tag">[A; B]</pre>则表示把B放在下面。</p>
<p>矩阵<span style="background-color: #c0c0c0;">乘法</span>：<pre class="crayon-plain-tag">A*B</pre>；矩阵<span style="background-color: #c0c0c0;">对应元素分别相乘</span>：<pre class="crayon-plain-tag">A .* B</pre>。</p>
<p><span style="background-color: #c0c0c0;">点运算可以理解为是对矩阵中每个元素</span>做运算。例如每个元素进行平方<pre class="crayon-plain-tag">A .^ 2</pre>，每个元素求倒数<pre class="crayon-plain-tag">1 ./ [1; 2; 3]</pre>。标量和矩阵进行相乘时，点号可以省略（因为从数学上来说标量乘以矩阵本意即如点运算）。</p>
<p>要求<span style="background-color: #c0c0c0;">转置</span>矩阵，可以用<pre class="crayon-plain-tag">A'</pre>。</p>
<p>要求<span style="background-color: #c0c0c0;">逆</span>矩阵，可以用函数<pre class="crayon-plain-tag">pinv(A)</pre>。</p>
<p><pre class="crayon-plain-tag">A &lt;= 1</pre> 表示对矩阵的<span style="background-color: #c0c0c0;">每个元素进行逻辑判断，返回一个矩阵</span>，元素是0或1对应逻辑判断的结果</p>
<div class="blog_h3"><span class="graybg">向量</span></div>
<p><span style="background-color: #c0c0c0;">行向量</span>语法：<pre class="crayon-plain-tag">v = [ 1 2 3 ]</pre>，<span style="background-color: #c0c0c0;">列向量</span>语法：<pre class="crayon-plain-tag">v = [ 1; 2; 3; ]</pre>。</p>
<p><pre class="crayon-plain-tag">v = 1:0.1:2</pre>表示一个数组（行向量），它的第一个元素是1，后一个元素总比前一个大0.1，最后一个元素是2。</p>
<p><pre class="crayon-plain-tag">v = 1:6</pre> 表示一个数组，类似上面，但是<span style="background-color: #c0c0c0;">步长</span>为1</p>
<div class="blog_h2"><span class="graybg">函数和命令</span></div>
<div class="blog_h3"><span class="graybg">语法</span></div>
<p>定义函数，使用function关键字：</p>
<pre class="crayon-plain-tag">function [y1, y2] = calVal(x)
       y1 = x^2;
       y2 = x^3;
end;</pre>
<p>函数可以有多个返回值，声明在function后的列表中，调用函数时，可以使用向量来接收返回值：</p>
<pre class="crayon-plain-tag">[a, b] = calVal(3) </pre>
<div class="blog_h3"><span class="graybg">显示和格式化</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">函数/命令</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>PS1</td>
<td>设置命令提示符，例如<pre class="crayon-plain-tag">PS1('&gt;&gt;');</pre></td>
</tr>
<tr>
<td>disp</td>
<td>显示变量的值</td>
</tr>
<tr>
<td>sprintf</td>
<td>类似于C语言的同名函数</td>
</tr>
<tr>
<td>format</td>
<td>格式化变量，例如<pre class="crayon-plain-tag">format long</pre>以长整型格式化上个表达式的值，默认精度是short</td>
</tr>
<tr>
<td>help</td>
<td>显示某个命令的帮助</td>
</tr>
<tr>
<td>hist</td>
<td>显示直方图</td>
</tr>
<tr>
<td>who</td>
<td>显示工作空间中可用的变量</td>
</tr>
<tr>
<td>whos</td>
<td>显示工作空间中可用的变量的详细信息</td>
</tr>
<tr>
<td>clear</td>
<td>清除变量，如果后面不跟着变量名则清除所有</td>
</tr>
<tr>
<td>save</td>
<td>将变量保存到文件，例如<pre class="crayon-plain-tag">save hello.mat V1 V2;</pre></td>
</tr>
<tr>
<td>pwd</td>
<td>显示当前目录</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">逻辑计算</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">函数/命令</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>xor</td>
<td>异或</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">数值计算</span></div>
<p>参数是矩阵时，算术运算对矩阵的每个元素执行数值计算</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">函数/命令</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>sqrt</td>
<td>乘方</td>
</tr>
<tr>
<td>log</td>
<td>自然对数</td>
</tr>
<tr>
<td>exp</td>
<td>自然指数</td>
</tr>
<tr>
<td>abs</td>
<td>绝对值</td>
</tr>
<tr>
<td>max</td>
<td>最大值，例如<pre class="crayon-plain-tag">[val, idx] = max(a)</pre>表示求最大值并返回索引，<pre class="crayon-plain-tag">val = max(a)</pre>则仅仅返回最大值</td>
</tr>
<tr>
<td>sum</td>
<td>求矩阵所有元素之和</td>
</tr>
<tr>
<td>prod</td>
<td>求矩阵所有元素之积</td>
</tr>
<tr>
<td>floor</td>
<td>向下取整</td>
</tr>
<tr>
<td>ceil</td>
<td>向上取整</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">矩阵和向量</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">函数/命令</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>ones</td>
<td>生成每个元素都是1的矩阵，例如<pre class="crayon-plain-tag">ones(2, 3)</pre>生成每个2行3列的矩阵</td>
</tr>
<tr>
<td>zeros</td>
<td>生成零矩阵，类似ones</td>
</tr>
<tr>
<td>rand</td>
<td>生成随机矩阵，类似ones</td>
</tr>
<tr>
<td>randn</td>
<td>生成元素服从高斯分布（均值为0，标准差获方差为1）的矩阵</td>
</tr>
<tr>
<td>eye</td>
<td>生成单位矩阵，例如<pre class="crayon-plain-tag">eye(4)</pre>生成4阶单位矩阵</td>
</tr>
<tr>
<td>size</td>
<td>
<p>返回某个矩阵的尺寸，返回值是一个1x2矩阵，分别表示参数矩阵的行、列数量</p>
<p>如果想仅仅返回行数，使用<pre class="crayon-plain-tag">size(A,1)</pre>，仅仅返回列数则使用<pre class="crayon-plain-tag">size(A,2)</pre></p>
</td>
</tr>
<tr>
<td>length</td>
<td>
<p>返回向量的长度</p>
</td>
</tr>
<tr>
<td>pinv</td>
<td>伪逆矩阵</td>
</tr>
<tr>
<td>inv</td>
<td>逆矩阵</td>
</tr>
<tr>
<td>flipud</td>
<td>第一行变为最后一行，第二行变为倒数第二行……最后一行变为第一行</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">流程控制</span></div>
<div class="blog_h3"><span class="graybg">for</span></div>
<pre class="crayon-plain-tag">V = zeros(10,1)   % 创建长度为10的列向量
for i = 1:10, V(i) = i; end  % 循环赋值</pre>
<div class="blog_h3"><span class="graybg">while</span></div>
<pre class="crayon-plain-tag">i = 1;

while i &lt;= 5, disp(V(i)); i = i+1; end;</pre>
<div class="blog_h3"><span class="graybg">if</span></div>
<pre class="crayon-plain-tag">if length(v) &gt; 1, disp(length(v)); end</pre>
<div class="blog_h2"><span class="graybg">图形绘制</span></div>
<div class="blog_h3"><span class="graybg">示例</span></div>
<p>定义一个向量：</p>
<pre class="crayon-plain-tag">t = [0:0.01:0.98];</pre>
<p>定义两个三角函数：</p>
<pre class="crayon-plain-tag">y1 = sin(2*pi*4*t);
y2 = cos(2*pi*4*t);</pre>
<p>绘制第一个三角函数，自变量显示在横轴：</p>
<pre class="crayon-plain-tag">plot(t, y1);</pre>
<p>在上述图形上继续绘制（不清屏）：</p>
<pre class="crayon-plain-tag">hold on</pre>
<p>继续绘制，并且指定曲线颜色为红色：</p>
<pre class="crayon-plain-tag">plot(t,y2, 'r');</pre>
<p>指定图像的各种标签：</p>
<pre class="crayon-plain-tag">xlabel('time');                   % 指定X轴的名称
ylabel('value');                  % 指定Y轴的名称
legend('sin', 'cos');             % 标识第一条曲线是sin，第二条曲线是cos
title('sin and cos function');    % 给图片附一个标题</pre>
<p>关闭绘图窗口：</p>
<pre class="crayon-plain-tag">close</pre>
<p>&nbsp;</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/octave-faq">Octave知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/octave-faq/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用数学公式</title>
		<link>https://blog.gmem.cc/mathematical-formulas</link>
		<comments>https://blog.gmem.cc/mathematical-formulas#comments</comments>
		<pubDate>Wed, 11 Dec 2019 08:05:29 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://blog.gmem.cc/?p=30727</guid>
		<description><![CDATA[<p>求导公式 基本公式 函数 导函数 备注 $y^{\prime}=0$ $c$为常数 $y = x^{\alpha}$ $y^{\prime}=\alpha x^{\alpha - 1}$ $\alpha$为实数 $y=a^{x}(a&#62;0, a \neq 1)  $ $y^{\prime}=a^{x} \ln <a class="read-more" href="https://blog.gmem.cc/mathematical-formulas">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/mathematical-formulas">常用数学公式</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">求导公式</span></div>
<div class="blog_h2"><span class="graybg">基本公式</span></div>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">函数</td>
<td style="text-align: center;">导函数</td>
<td style="text-align: center;">备注</td>
</tr>
</thead>
<tbody>
<tr>
<td><span displaypfx="inline-" class="mathjax-container">\(y = c\)</span></td>
<td>$y^{\prime}=0$</td>
<td>$c$为常数</td>
</tr>
<tr>
<td>$y = x^{\alpha}$</td>
<td>$y^{\prime}=\alpha x^{\alpha - 1}$</td>
<td>$\alpha$为实数</td>
</tr>
<tr>
<td>$y=a^{x}(a&gt;0, a \neq 1)  $</td>
<td>$y^{\prime}=a^{x} \ln a$</td>
<td> </td>
</tr>
<tr>
<td>$y=e^{x} $</td>
<td><span style="color: #000000;">$y^{\prime}=e^{x}$</span> </td>
<td> </td>
</tr>
<tr>
<td>$y=\log a^{x}(a&gt;0, a \neq 1)$</td>
<td><span style="color: #000000;">$y^{\prime}=\frac{1}{x \ln a}$</span></td>
<td> </td>
</tr>
<tr>
<td>$y=\ln x$</td>
<td><span style="color: #000000;">$y^{\prime}=\frac{1}{x}$</span></td>
<td> </td>
</tr>
<tr>
<td>$y=\sin x$</td>
<td>$y^{\prime}=\cos x$</td>
<td> </td>
</tr>
<tr>
<td>$y=\cos x$</td>
<td>$y^{\prime}=-\sin x$</td>
<td> </td>
</tr>
<tr>
<td>$y=\tan x$</td>
<td>$y^{\prime}=\frac{1}{\cos ^{2} x}$</td>
<td> </td>
</tr>
<tr>
<td>$y=\cot x$</td>
<td>$y^{\prime}=-\frac{1}{\sin ^{2} x}$</td>
<td> </td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">四则运算</span></div>
<p>假设$u(x)$和$v(x)$是关于$x$的可导函数，则有：</p>
<p>\[\begin{array}{l}{(u(x) \pm v(x))^{\prime}=u^{\prime}(x) \pm v^{\prime}(x)} \\ {(u(x) \cdot v(x))^{\prime}=u^{\prime}(x) v(x)+u(x) v^{\prime}(x)}\\ \left(\frac{u(x)}{v(x)}\right)^{\prime}=\frac{u^{\prime}(x) v(x)-u(x) v^{\prime}(x)}{v^{2}(x)}\end{array}\]</p>
<p>乘法公式有推论：$[\mathrm{c} \cdot \mathrm{f}(\mathrm{x})]^{\prime}=\mathrm{c} \mathrm{f}^{\prime}(\mathrm{x})$</p>
<div class="blog_h2"><span class="graybg">复合函数求导</span></div>
<p>如果函数$y=f(u)$和$u=\varphi(x)$均可导，则复合函数$y=f(\varphi(x))$可导。并且：</p>
<p>\[y_{x}^{\prime}= y_{u}^{\prime} \cdot u_{x}^{\prime} = f^{\prime}(u) \cdot \phi^{\prime}(x)\]</p>
<p>也就是说，因变量对自变量求导，等于因变量对中间变量求导，乘以中间变量对自变量求导。</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/mathematical-formulas">常用数学公式</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/mathematical-formulas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>线性代数学习笔记</title>
		<link>https://blog.gmem.cc/linear-algebra-study-note</link>
		<comments>https://blog.gmem.cc/linear-algebra-study-note#comments</comments>
		<pubDate>Sun, 01 Dec 2019 14:56:30 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://blog.gmem.cc/?p=16807</guid>
		<description><![CDATA[<p>方程组的几何解释 方程组（Simultaneous Equations，联立方程）： 在线性代数中，常常表示为：。其中表示它的系数矩阵（Coefficient Matrix），是如下形式的矩形元素排列：，x则是未知数向量：，b也是一个向量。上述方程组展开的矩阵记法为： 行图像 所谓行图像（Row Picture），就是在坐标系中绘制出每个方程的图像，从几何角度来解释方程组的含义。 很明显，每个方程的全部根（解，Solution）都构成一条直线，两条直线的交点即为方程组的根。根可能有0个（直线平行）、1个（直线相交）、无数（直线重合）。 推广到三元方程组的情况，三个方程，每个方程对应到三维空间的一个平面，三个平面的交点即为方程组的根。根同样可能有0个（任意两个平面平行）、1个（三平面相交）、无数（三平面交于同一直线，或者三平面重合）。 列图像 所谓列图像（Column Picture），则纵向的看方程组。两个方程未知数x的系数构成向量，未知数y的系数则构成向量。方程组可以改写为如下形式： 上述等式的意义是什么？它是要寻找左侧两个向量的正确的线性组合（Linear Combination）——每个向量乘以一个系数，再相加 —— 以产生右侧的向量。我们这里暂时不讨论如何求解线性组合，通过解二元一次方程组可以得到x,y分别为1,2。在坐标系中绘制向量图像（向量加法、乘法），其结果恰恰是右侧向量。 1个x向量和2个y向量的线性组合，得到右侧的那个特殊的向量。那么，x向量和y向量的任意、全部线性组合，会得到什么呢？其结果向量会覆盖整个坐标平面。 那么，是否任意两个向量的全部线性组合都满足上述性质呢？也就是说，对于任意矩阵A，是否能找到一个向量b进行线性组合，获得任意向量x？并非如此，如果向量x和y的方向相同，不论怎么组合，其结果向量的方向无法改变，因而不可能覆盖整个坐标平面。回到行图像的角度，两个向量方向相同的情况如下： 很明显，不考虑 $x = <a class="read-more" href="https://blog.gmem.cc/linear-algebra-study-note">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/linear-algebra-study-note">线性代数学习笔记</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">方程组的几何解释</span></div>
<p>方程组（Simultaneous Equations，联立方程）：</p>
<span displaypfx="" class="mathjax-container">\[\begin{cases}2x - y = 0 \\-x+2y = 3 \end{cases}\]</span>
<p>在线性代数中，常常表示为：<span displaypfx="inline-" class="mathjax-container">\(\mathbf{A} \mathbf{x} = \mathbf{b}\)</span>。其中<span displaypfx="inline-" class="mathjax-container">\(\mathbf{A}\)</span>表示它的<span style="background-color: #c0c0c0;">系数矩阵</span>（Coefficient Matrix），是如下形式的矩形元素排列：<span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix} 2 &amp; -1 \\ -1 &amp; 2 \end{bmatrix}\)</span>，x则是未知数向量：<span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix} x \\ y \end{bmatrix}\)</span>，b也是一个向量。上述方程组展开的矩阵记法为：</p>
<span displaypfx="" class="mathjax-container">\[{\begin{bmatrix}2&amp;-1\\-1&amp;2\end{bmatrix}}\cdot {\begin{bmatrix}x\\y\end{bmatrix}}={\begin{bmatrix}0\\3\end{bmatrix}}\]</span>
<div class="blog_h2"><span class="graybg">行图像</span></div>
<p>所谓行图像（Row Picture），就是在坐标系中绘制出每个方程的图像，从几何角度来解释方程组的含义。</p>
<p>很明显，每个方程的全部根（解，Solution）都构成一条直线，两条直线的交点即为方程组的根。根可能有0个（直线平行）、1个（直线相交）、无数（直线重合）。</p>
<p>推广到三元方程组的情况，三个方程，每个方程对应到三维空间的一个平面，三个平面的交点即为方程组的根。根同样可能有0个（任意两个平面平行）、1个（三平面相交）、无数（三平面交于同一直线，或者三平面重合）。</p>
<div class="blog_h2"><span class="graybg">列图像</span></div>
<p>所谓列图像（Column Picture），则纵向的看方程组。两个方程未知数x的系数构成向量<span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix} 2  \\ -1 \end{bmatrix}\)</span>，未知数y的系数则构成向量<span displaypfx="inline-" class="mathjax-container">\(\begin{bmatrix} -1 \\  2 \end{bmatrix}\)</span>。方程组可以改写为如下形式：</p>
<span displaypfx="" class="mathjax-container">\[x\begin{bmatrix} 2  \\ -1 \end{bmatrix} + y\begin{bmatrix} -1 \\  2 \end{bmatrix} = \begin{bmatrix}0\\3\end{bmatrix}\]</span>
<p>上述等式的意义是什么？它是要寻找左侧两个向量的<span style="background-color: #c0c0c0;">正确的线性组合</span>（Linear Combination）——每个向量乘以一个系数，再相加 —— 以产生右侧的向量。我们这里暂时不讨论如何求解线性组合，通过解二元一次方程组可以得到x,y分别为1,2。在坐标系中绘制向量图像（向量加法、乘法），其结果恰恰是右侧向量。</p>
<p>1个x向量和2个y向量的线性组合，得到右侧的那个特殊的向量。那么，x向量和y向量的任意、全部线性组合，会得到什么呢？其结果向量会<span style="background-color: #c0c0c0;">覆盖整个坐标平面</span>。</p>
<p>那么，是否任意两个向量的全部线性组合都满足上述性质呢？也就是说，对于任意矩阵A，是否能找到一个向量b进行线性组合，获得任意向量x？并非如此，如果向量x和y的方向相同，不论怎么组合，其结果向量的方向无法改变，因而不可能覆盖整个坐标平面。回到行图像的角度，两个向量方向相同的情况如下：</p>
<span displaypfx="" class="mathjax-container">\[\begin{cases}a (x + y) = A \\b (x + y) = B \end{cases}\]</span>
<p>很明显，不考虑 $x = -y$的特殊情况，$x,y$的取值不会对$A/B$的比值产生影响。</p>
<p>推广到三维或者更高维的空间，上述讨论结果依然适用。</p>
<div class="blog_h2"><span class="graybg">Ax=b</span></div>
<p>这个表示法是方程组的矩阵形式。 <span displaypfx="inline-" class="mathjax-container">\(\mathbf{A} \mathbf{x}\)</span>是矩阵乘以一个向量，这种乘法的结果仍然是一个向量<span displaypfx="inline-" class="mathjax-container">\( \mathbf{b}\)</span>。</p>
<p>那么<span style="background-color: #c0c0c0;">矩阵和向量的乘法</span>如何进行？有两种方式。考虑下面的矩阵和向量：</p>
<span displaypfx="" class="mathjax-container">\[{\begin{bmatrix}2&amp;5\\1&amp;3\end{bmatrix}} {\begin{bmatrix}1\\2\end{bmatrix}}\]</span>
<p>方法一，将<span displaypfx="inline-" class="mathjax-container">\(\mathbf{A} \mathbf{x}\)</span>看作A的每个列的线性组合。每次处理一列，<span style="background-color: #c0c0c0;">1个第一列 &amp; 2个第二列的线性组合</span>，即：<span displaypfx="" class="mathjax-container">\[1\begin{bmatrix} 2  \\ 1 \end{bmatrix} + 2\begin{bmatrix} 5 \\  3 \end{bmatrix} = \begin{bmatrix}12\\7\end{bmatrix}\]</span></p>
<p>方法二，每次处理一行，第一行点乘（Dot Product）向量 + 第二行点乘向量，即：<span displaypfx="" class="mathjax-container">\[\begin{array}{l}{\left[\begin{array}{cc}{2} &amp; {5}\end{array}\right] \cdot\left[\begin{array}{cc}{1} &amp; {2}\end{array}\right]= [ 2 \times 1 + 5 \times 2]= 2x+ 5y =12} \\ {\left[\begin{array}{cc}{1} &amp; {3}\end{array}\right] \cdot\left[\begin{array}{cc}{1} &amp; {2}\end{array}\right]=[1 \times 1 + 3 \times 2 ]= 1x + 3y =7}\end{array}\]</span></p>
<div class="blog_h1"><span class="graybg">矩阵消元</span></div>
<p>解线性方程组最直接的方法是<span style="background-color: #c0c0c0;">消元法（Elimination）</span>，这也是计算机程序使用的方法。矩阵变换（Matrix Operations）是线性代数的核心，因此本课用矩阵语言来描述消元法。</p>
<div class="blog_h2"><span class="graybg">理想情况</span></div>
<p>考虑下面的三元方程组：</p>
<span displaypfx="" class="mathjax-container">\[\begin{array}{r}{x+2 y+z=2} \\ {3 x+8 y+z=12} \\ {4 y+z=2}\end{array}\]</span>
<p>它的系数矩阵是3x3的矩阵：</p>
<span displaypfx="" class="mathjax-container">\[\begin{array}{ccc}{1} &amp; {2} &amp; {1} \\ {3} &amp; {8} &amp; {1} \\ {0} &amp; {4} &amp; {1} \\ {} &amp; {A} &amp; {}\end{array}\]</span>
<p>回顾一下初中学习的消元法 —— 将第一个方程乘以一个适当的数，然后和第二个方程相减，达到消除一个元<span displaypfx="inline-" class="mathjax-container">\(x\)</span>的目的。用同样的方法消除元<span displaypfx="inline-" class="mathjax-container">\(y\)</span>，即可解得<span displaypfx="inline-" class="mathjax-container">\(z\)</span>。</p>
<p>现在用矩阵语言来描述，首先选择<span style="background-color: #c0c0c0;">左上角的1为主元（First Pivot，主元不能为0）</span>，与方程中的x系数对应，它的消元乘数为3。用第二行减它，保持主元行不变，矩阵变为：</p>
<span displaypfx="" class="mathjax-container">\[\begin{array}{lll}{1} &amp; {2} &amp; {1} \\ {0} &amp; {2} &amp; {-2} \\ {0} &amp; {4} &amp; {1}\end{array}\]</span>
<p>这里暂时不去管右侧向量<span displaypfx="inline-" class="mathjax-container">\(b\)</span>。</p>
<p>现在，第二行的x元被消除了。下一步需要消除第三行的，但是已经是0了，不需要处理。</p>
<p>下一步，处理主元二（Second Pivot）。看第二、第三行，相当于二元方程组，主元选取第二行的y。乘以消元乘数-2，用第三行减去第二行，消除y。得到：</p>
<span displaypfx="" class="mathjax-container">\[\begin{array}{lll}{1} &amp; {2} &amp; {1} \\ {0} &amp; {2} &amp; {-2} \\ {0} &amp; {0} &amp; {5}\end{array}\]</span>
<p>现在我们得到了三个主元 <span displaypfx="inline-" class="mathjax-container">\(1, 2, 5\)</span>，现在的矩阵叫上<span style="background-color: #c0c0c0;">三角（Upper Triangular）矩阵</span>，记作<span displaypfx="inline-" class="mathjax-container">\(U\)</span>。消元的目的就是从<span displaypfx="inline-" class="mathjax-container">\(A\)</span>得到<span displaypfx="inline-" class="mathjax-container">\(U\)</span> —— 这是科学计算中最普遍的运算。</p>
<p>随便提一下<span style="background-color: #c0c0c0;">行列式（Determinant），它是主元之积</span>，这里它等于10。</p>
<div class="blog_h2"><span class="graybg">失败情况</span></div>
<p>什么情况下，无法得到三个主元？</p>
<p>如果第一行的x为0，怎么办？交换行即可，将第1行换到第2行 —— 主元的位置被0占据则需要<span style="background-color: #c0c0c0;">换行</span>。</p>
<p>如果主元位置为0，并且后面没有行的这个位置非零，则没法换 —— 这意味着<span style="background-color: #c0c0c0;">方程组无解，矩阵不可逆（Not Invertible）</span>。</p>
<div class="blog_h2"><span class="graybg">回代</span></div>
<p>前面一直没有考虑右侧向量<span displaypfx="inline-" class="mathjax-container">\(b\)</span>。我们把它作为系数矩阵的新一列，得到<span style="background-color: #c0c0c0;">增广矩阵（Augmented Matrix）</span>：</p>
<span displaypfx="" class="mathjax-container">\[\begin{array}{ccc}{1} &amp; {2} &amp; {1}  &amp; {2} \\ {3} &amp; {8} &amp; {1}  &amp; {12} \\ {0} &amp; {4} &amp; {1} &amp; {2} \end{array}\]</span>
<p>在消元的时候，右侧向量会跟着同步变化。重复上上小节的消元过程，可以得到：</p>
<span displaypfx="" class="mathjax-container">\[\begin{array}{lll}{1} &amp; {2} &amp; {1} &amp; {2}  \\ {0} &amp; {2} &amp; {-2} &amp; {6}  \\ {0} &amp; {0} &amp; {5} &amp; {-10} \end{array}\]</span>
<p>最后得到的右侧向量称作<span displaypfx="inline-" class="mathjax-container">\(c\)</span>。到此消元过程结束，方程组变为：</p>
<span displaypfx="" class="mathjax-container">\[\begin{aligned} x+2 y+z &amp;=2 \\ 2 y-2 z &amp;=6 \\ 5 z &amp;=-10 \end{aligned}\]</span>
<p>从最后一个方程逐步回代，即可求解。</p>
<div class="blog_h2"><span class="graybg">消元矩阵</span></div>
<p>在第一课中，我们用向量思维理解了矩阵乘法 —— 一个矩阵，乘以列向量，可以把矩阵的每列<span style="background-color: #c0c0c0;">看做列向量，然后对这些向量进行线性组合</span>，其结果仍然是一个向量。</p>
<p>在讨论消元的时候，我们关心的是行变化。类似于列向量的线性组合 —— 一个<span style="background-color: #c0c0c0;">行向量乘以矩阵，可以看做是矩阵行的线性组合</span>，其结果仍然是行向量。前面的消元过程，就可以转化为确定适当线性组合，也就是寻找行向量的问题：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{}{?} &amp; {?} &amp; {?} \\ {?} &amp; {?} &amp; {?} \\ {?} &amp; {?} &amp; {?}\end{array}\right]\left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {3} &amp; {8} &amp; {1} \\ {0} &amp; {4} &amp; {1}\end{array}\right]=\left[\begin{array}{ccc}{1} &amp; {2} &amp; {1} \\ {0} &amp; {2} &amp; {-2} \\ {0} &amp; {0} &amp; {5}\end{array}\right]\]</span>
<p>第一个行向量， 需要线性组合矩阵行，达到消第一主元的目的，第二个行向量，需要线性组合矩阵行，达到消第二主元的目的，类推……。</p>
<div class="blog_h3"><span class="graybg">单位矩阵</span></div>
<p>首先我们看一下，不起任何消元作用的矩阵——<span style="background-color: #c0c0c0;">单位矩阵（Identity Matrix）</span>，它是矩阵世界里的1：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{}{1} &amp; {0} &amp; {0} \\ {0} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]\left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {3} &amp; {8} &amp; {1} \\ {0} &amp; {4} &amp; {1}\end{array}\right]=\left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {3} &amp; {8} &amp; {1} \\ {0} &amp; {4} &amp; {1}\end{array}\right]\]</span>
<p>第一个行向量，1个第一矩阵行 + 0个第二矩阵行 + 0个第三矩阵行，明显结果仍然是第一矩阵行。第二、第三行向量类似。</p>
<div class="blog_h3"><span class="graybg">如何消元</span></div>
<p>我们为了消第二行的x，当时是将第一行乘以3，然后用第二行减去它，结果替换掉第二行。这可以看做是-3个第一行 + 1个第二行 + 0个第三行的线性组合。对应到矩阵：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{}{1} &amp; {0} &amp; {0} \\ {-3} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]\left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {3} &amp; {8} &amp; {1} \\ {0} &amp; {4} &amp; {1}\end{array}\right]=\left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {0} &amp; {2} &amp; {-2} \\ {0} &amp; {4} &amp; {1}\end{array}\right]\]</span>
<p>注意，第一行不需要消元，因此我们维持单位矩阵的第一行不变。</p>
<p>上面得到的左侧矩阵，称为<span style="background-color: #c0c0c0;">初等矩阵（Elementary Matrix，和单位矩阵仅有微小差别的矩阵）</span>，记作<span displaypfx="inline-" class="mathjax-container">\(\mathbf{E}_{2 1}\)</span>，表示它需要干掉的是第2行第1列的元。</p>
<p>更进一步，在上面的右侧矩阵的基础上，我们在应用初等矩阵<span displaypfx="inline-" class="mathjax-container">\(\mathbf{E}_{3 2}\)</span>，干掉的是第3行第2列的元：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{}{1} &amp; {0} &amp; {0} \\ {0} &amp; {1} &amp; {0} \\ {0} &amp; {-2} &amp; {1}\end{array}\right]\left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {0} &amp; {2} &amp; {-2} \\ {0} &amp; {4} &amp; {1}\end{array}\right] = \left[\begin{array}{}{1} &amp; {2} &amp; {1} \\ {0} &amp; {2} &amp; {-2} \\ {0} &amp; {0} &amp; {5}\end{array}\right]\]</span>
<p>综合在一起，其实就是用两个初等矩阵乘以系数矩阵，可以得到上三角矩阵：</p>
<span displaypfx="" class="mathjax-container">\[E_{32}\left( E_{21} A\right)=U\]</span>
<p>其实我们很容易想到有单个矩阵即可完成上述两个初等矩阵的工作，并且可以由此引出<span style="background-color: #c0c0c0;">矩阵乘法的结合律</span>（Associative Law，注意<span style="background-color: #c0c0c0;">交换律不成立</span>）：</p>
<span displaypfx="" class="mathjax-container">\[E_{32}\left( E_{21} A\right)=\left(E_{32}E_{21}\right) A = E A\]</span>
<p>我们不去证明结合律，但是这两个初等矩阵相乘即得到消元矩阵。</p>
<div class="blog_h2"><span class="graybg">置换矩阵</span></div>
<p><span style="background-color: #c0c0c0;">置换矩阵</span>（Permutation Matrix）是另外一种初等矩阵，它的目的是<span style="background-color: #c0c0c0;">置换两行或两列</span>。</p>
<p>交换两行的置换矩阵：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{ll}{0} &amp; {1} \\ {1} &amp; {0}\end{array}\right]\left[\begin{array}{ll}{a} &amp; {b} \\ {c} &amp; {d}\end{array}\right]=\left[\begin{array}{ll}{c} &amp; {d} \\ {a} &amp; {b}\end{array}\right]\]</span>
<p>交换两列的置换矩阵，注意列变换需要在右边乘以一个矩阵：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{ll}{a} &amp; {b} \\ {c} &amp; {d}\end{array}\right]\left[\begin{array}{ll}{0} &amp; {1} \\ {1} &amp; {0}\end{array}\right]=\left[\begin{array}{ll}{b} &amp; {a} \\ {d} &amp; {c}\end{array}\right]\]</span>
<div class="blog_h2"><span class="graybg">逆矩阵</span></div>
<p>本课还提及了逆（Inverses）矩阵。</p>
<p>第一次消元时，我们使用矩阵<span displaypfx="inline-" class="mathjax-container">\(\left[\begin{array}{}{1} &amp; {0} &amp; {0} \\ {-3} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]\)</span>，也就是-3个第一行加到1个第二行上，消除了第二行的x。</p>
<p>那么，怎么找到一个矩阵，来取消这次消元呢？根据结合律可知：</p>
<span displaypfx="" class="mathjax-container">\[A = IA = ( E^{-1} E  )A\]</span>
<p>也就是，<span style="background-color: #c0c0c0;">逆矩阵就是和你相乘后变为单位矩阵的矩阵</span>。我们做消元的时候，是让第二行加上了-3个第一行，取消此操作即让第二行加上3个第一行即可：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{ccc}{1} &amp; {0} &amp; {0} \\ {3} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]\left[\begin{array}{ccc}{1} &amp; {0} &amp; {0} \\ {-3} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]=\left[\begin{array}{lll}{1} &amp; {0} &amp; {0} \\ {0} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]\]</span>
<div class="blog_h1"><span class="graybg">矩阵乘法</span></div>
<div class="blog_h2"><span class="graybg">求单个元素 </span></div>
<p>两个矩阵相乘，如何求得结果矩阵中第i行j列的元素<span displaypfx="inline-" class="mathjax-container">\(C_{ij}\)</span>？回顾一下上一课的做法，结果矩阵的第i行是右侧矩阵B所有行的线性组合，组合的系数来自左侧矩阵A的第i行，而结果矩阵的第j列仅仅和B的j列有关，因此：</p>
<span displaypfx="" class="mathjax-container">\[C_{ij} = (Row\ i\ of\ A) \cdot (Col\ j\ of\ B) = a_{i1}b_{1j} + a_{i2}b_{2j}\ +\ ... = \sum_{k=1}^{n} a_{i k} b_{k j} \]</span>
<p>你可以将其看作是一行N列矩阵和一列N行的矩阵相乘，结果是1行1列矩阵。 </p>
<div class="blog_h2"><span class="graybg">将A看做行向量</span></div>
<p>仍然以线性组合的方式考虑：第一个矩阵的每一行，需要作为系数，进行第二个矩阵的<span style="background-color: #c0c0c0;">行向量</span>进行线性组合。这意味着<span style="background-color: #c0c0c0;">第一个矩阵的列数量等于第二个矩阵的行数量</span>：</p>
<span displaypfx="" class="mathjax-container">\[{A}_{m \times n} {B}_{n \times p} = {AB}_{m \times p}\]</span>
<p>矩阵乘积的结果不一定是方阵，也就是说第一矩阵的行数量不需要等于第二矩阵的列数量。</p>
<div class="blog_h2"><span class="graybg">将B看做列向量</span></div>
<p>如果将B看做是一个个的列向量。在线性组合时，这些向量<span style="background-color: #c0c0c0;">相互之间是不影响</span>的，可以单独计算。也就是说，<span style="background-color: #c0c0c0;">矩阵乘法可以看做A和B的每个列向量相乘得到AB的各列向量</span>。 </p>
<p>换一个角度，从列图像来看。矩阵A乘以向量（B中的列），即A的每个列的线性组合，注意A列向量的数量（就是列数）和B的行数（B列的长度）相同。</p>
<p>总之，将矩阵乘法看成<span style="background-color: #c0c0c0;">右侧行向量的线性组合，还是左侧列向量的线性组合</span>，效果是一样的。</p>
<div class="blog_h2"><span class="graybg">多矩阵求和</span></div>
<p>我们已经从三个角度考虑过矩阵乘法，此外还可以以左侧列乘以右侧行。</p>
<p>但是必须比左侧列看做是<span displaypfx="inline-" class="mathjax-container">\({A}_{m \times 1}\)</span>矩阵，右侧行看做是<span displaypfx="inline-" class="mathjax-container">\({B}_{1 \times p}\)</span>矩阵。结果是<span displaypfx="inline-" class="mathjax-container">\({AB}_{m \times p}\)</span>矩阵。</p>
<p>所有左侧列、右侧行的乘积都是这样的矩阵。所有这些矩阵求和，即最初矩阵AB的乘积：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{ll}{2} &amp; {7} \\ {3} &amp; {8} \\ {4} &amp; {9}\end{array}\right]\left[\begin{array}{ll}{1} &amp; {6} \\ {0} &amp; {0}\end{array}\right]=\left[\begin{array}{l}{2} \\ {3} \\ {4}\end{array}\right]\left[\begin{array}{ll}{1} &amp; {6}\end{array}\right]+\left[\begin{array}{l}{7} \\ {8} \\ {9}\end{array}\right]\left[\begin{array}{ll}{0} &amp; {0}\end{array}\right]\]</span>
<div class="blog_h2"><span class="graybg">分块乘法</span></div>
<p>直接把分块看做元素就可以：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{II}{A_{1} A_{2}} \\ {A_{3} A_{4}}\end{array}\right]\left[\begin{array}{ll}{B_{1}}  {B_{2}} \\ {B_{3}}  {B_{4}}\end{array}\right]\]</span>
<p>结果矩阵左上角，等于B行向量们以A第一行为系数的线性组合，即<span displaypfx="inline-" class="mathjax-container">\(A_1\times B_1 + A_2\times B_3\)</span></p>
<div class="blog_h1"><span class="graybg">逆矩阵</span></div>
<p>逆矩阵是关于方阵的，也就是说，<span style="background-color: #c0c0c0;">可逆矩阵一定是方阵</span>。</p>
<div class="blog_h2"><span class="graybg">方阵的逆矩阵</span></div>
<p>给定一个方阵，它可能有或没有逆矩阵（Inverse）。所谓逆矩阵，就是：</p>
<span displaypfx="" class="mathjax-container">\[ A' \times A = A \times A' = I \]</span>
<p>也就是，方阵和它的逆矩阵相乘，结果是单位矩阵，不管是<span style="background-color: #c0c0c0;">左逆（逆矩阵放在左边）还是右逆</span>。注意左逆等于右逆，对于非方阵不成立，因为形状不匹配无法相乘。</p>
<p>存在逆矩阵的矩阵，称为可逆（Invertiable）或非奇异（Non singular）矩阵。</p>
<div class="blog_h2"><span class="graybg">奇异矩阵</span></div>
<p>如果存在一个<span style="background-color: #c0c0c0;">非零向量</span><span displaypfx="inline-" class="mathjax-container">\( X \)</span>使得<span displaypfx="inline-" class="mathjax-container">\( AX = 0 \)</span>，则矩阵是<span style="background-color: #c0c0c0;">奇异（Singular，形容破坏了某种优良性质的数学对象）的</span>。也就是说，如果矩阵的列，<span style="background-color: #c0c0c0;">通过某种线性组合，能得到零向量，则它是不可逆的</span>。明显，如果从列图像看，奇异矩阵要求列向量方向相同。</p>
<p>反证：如果在上述条件下，矩阵仍然可逆，那么必然<span displaypfx="inline-" class="mathjax-container">\( A' \times A \times X = I \times X = 0 \)</span>，要求X为零向量。</p>
<p>下面是一个奇异矩阵：</p>
<span displaypfx="" class="mathjax-container">\[ \left[\begin{array}{ll}{1} &amp; {3} \\ {2} &amp; {6}\end{array}\right]\left[\begin{array}{l}{3} \\ {-1}\end{array}\right]=\left[\begin{array}{l}{0} \\ {0}\end{array}\right]\]</span>
<div class="blog_h2"><span class="graybg">Gauss-Jordan消元</span></div>
<p>这是一种求解逆矩阵的方法。 其思想是同时求解两个线性方程组。</p>
<p>还记得通过消元法处理增广矩阵么？Gauss-Jordan方法类似。我们已知A和I，现在需要求得A'：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{ll}{1} &amp; {3} \\ {2} &amp; {7}\end{array}\right]\left[\begin{array}{l}{a} \\ {b}\end{array}\right]=\left[\begin{array}{l}{1} \\ {0}\end{array}\right]\]</span>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{ll}{1} &amp; {3} \\ {2} &amp; {7}\end{array}\right]\left[\begin{array}{l}{c} \\ {d}\end{array}\right]=\left[\begin{array}{l}{0} \\ {1}\end{array}\right]\]</span>
<p>Gauss-Jordan方法将A和I放在一起进行消元：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{llll}{1} &amp; {2} &amp; {1} &amp; {0} \\ {3} &amp; {7} &amp; {0} &amp; {1}\end{array}\right]\]</span>
<p>以便<span style="background-color: #c0c0c0;">将A变为单位矩阵I，此时右侧就变成了A'</span>。</p>
<p>第一步，将第一行乘以-2，加到第二行上：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{llll}{1} &amp; {3} &amp; {1} &amp; {0} \\ {2} &amp; {7} &amp; {0} &amp; {1}\end{array}\right] ⇨ \left[\begin{array}{lll}{1} &amp; {3} &amp; {1} &amp; {0} \\ {0} &amp; {1} &amp; {-2} &amp; {1}\end{array}\right]\]</span>
<p>第二步，将第二行乘以-3，加到第一行上：</p>
<span displaypfx="" class="mathjax-container">\[\left[\begin{array}{lll}{1} &amp; {3} &amp; {1} &amp; {0} \\ {0} &amp; {1} &amp; {-2} &amp; {1}\end{array}\right] ⇨ \left[\begin{array}{cccc}{1} &amp; {0} &amp; {7} &amp; {-3} \\ {0} &amp; {1} &amp; {-2} &amp; {1}\end{array}\right]\]</span>
<p>右侧即A的逆矩阵A'</p>
<p>如何理解这种方法？实际上相当于对长矩阵应用了一个消元矩阵，把左半部分消成单位矩阵，意味着消元矩阵<span displaypfx="inline-" class="mathjax-container">\(E = A'\)</span>，而它将单位矩阵消成（乘法）了什么？任何矩阵乘以单位矩阵是它自己：</p>
<span displaypfx="" class="mathjax-container">\[ A' [A I] = [I A']\]</span>
<div class="blog_h1"><span class="graybg">A的LU分解</span></div>
<p>先前的课程中我们学习了如何将A进行行变换，得到上三角矩阵U的过程，并且知道有了U线性方程组的解就出来了。而本课的目的是直接给出消元公式，最基本的矩阵分解：</p>
<span displaypfx="" class="mathjax-container">\[ A = L U \]</span>
<div class="blog_h2"><span class="graybg">逆和转置</span></div>
<p>关于A和它的逆A'，下面的等式成立：</p>
<span displaypfx="" class="mathjax-container">\[ A' \times A = A \times A' = I \]</span>
<p>那么两个n阶矩阵乘积AB的逆是什么呢？</p>
<span displaypfx="" class="mathjax-container">\[ ABB'A' = A(BB')A' = AIA' = AA' = I \]</span>
<p>也就是说，<span style="background-color: #c0c0c0;">AB的逆是B'A'</span>。</p>
<p>那么对上述等式进行转置（列变为行，行变为列，Transpose）如果<span displaypfx="inline-" class="mathjax-container">\( A A^{-1} = I\)</span>，则两侧分别进行转置：</p>
<span displaypfx="" class="mathjax-container">\[ (A^{-1})^{T} A^{T}= (A^{T})^{-1} A^{T}= I\]</span>
<p>关于上述等式的解释：</p>
<ol>
<li><span style="background-color: #c0c0c0;">单位矩阵的转置仍然是单位矩阵</span></li>
<li><span style="background-color: #c0c0c0;">矩阵乘积进行转置，需要分别转置，然后交换顺序进行相乘</span></li>
<li><span style="background-color: #c0c0c0;">转置的逆，就是逆的转置</span>。也就是说，对于单个矩阵来说，转置和逆这两者的顺序可以交换</li>
</ol>
<div class="blog_h2"><span class="graybg">LU分解</span></div>
<p>考虑矩阵<span displaypfx="inline-" class="mathjax-container">\(\left[\begin{array}{ll}{2} &amp; {1} \\ {8} &amp; {7}\end{array}\right]\)</span>，我们期望消除第二行的第一个元素，得到上三角矩阵<span displaypfx="inline-" class="mathjax-container">\(\left[\begin{array}{ll}{2} &amp; {1} \\ {0} &amp; {3}\end{array}\right]\)</span>，需要用是初等矩阵式<span displaypfx="inline-" class="mathjax-container">\(\left[\begin{array}{ll}{1} &amp; {0} \\ {-4} &amp; {1}\end{array}\right]\)</span></p>
<p>此时：<span displaypfx="inline-" class="mathjax-container">\(E_{21}A=U\)</span>，我们想得到的是<span displaypfx="inline-" class="mathjax-container">\(A = LU\)</span>，如何变换？只需要两边乘以<span displaypfx="inline-" class="mathjax-container">\((E_{21})^{-1}\)</span>即可：</p>
<p><span style="font-size: 10pt;"><span displaypfx="inline-" class="mathjax-container">\(E_{21}A=U ⇨ (E_{21})^{-1}E_{21}A=(E_{21})^{-1}U ⇨ IA=(E_{21})^{-1}U ⇨ A=(E_{21})^{-1}U ⇨ \left[\begin{array}{ll}{2} &amp; {1} \\ {8} &amp; {7}\end{array}\right]=\left[\begin{array}{ll}{1} &amp; {0} \\ {4} &amp; {1}\end{array}\right]\left[\begin{array}{ll}{2} &amp; {1} \\ {0} &amp; {3}\end{array}\right] \)</span></span></p>
<p>可以看到L的非零元素集中在左下角，这也是它名字的由来 —— 下三角矩阵。</p>
<p>所谓<span style="background-color: #c0c0c0;">LU分解（Decomposition）</span>，就是将一个矩阵（方程组的系数）分解为一个<span style="background-color: #c0c0c0;">下三角矩阵和一个上三角矩阵的乘积</span>。</p>
<div class="blog_h2"><span class="graybg">消元的计算复杂度</span></div>
<p>对于n阶方阵，消元总计需要：</p>
<ol>
<li><span displaypfx="inline-" class="mathjax-container">\( \frac{1}{3}  n^3\)</span>次操作处理<span displaypfx="inline-" class="mathjax-container">\(A\)</span></li>
<li><span displaypfx="inline-" class="mathjax-container">\(n^2\)</span>次操作处理<span displaypfx="inline-" class="mathjax-container">\(b\)</span></li>
</ol>
<div class="blog_h2"><span class="graybg">LU分解的意义</span></div>
<p>使用LU分解，具有较小的计算复杂度。</p>
<p>考虑3x3矩阵，对它进行消元，对于不需要换行（应对主元为零）的简化场景，需要应用三个初等矩阵<span displaypfx="inline-" class="mathjax-container">\(E_{32}E_{31}E_{21} A = U\)</span>，来分别把第二行第一个元素、第三行第一、第二个元素消去。随着矩阵阶数的增加，计算量显然不是线性增长的。</p>
<p>如果把初等矩阵换到右侧，则是<span displaypfx="inline-" class="mathjax-container">\( A = E_{21} ^{-1}E_{31}^{-1}E_{32}^{-1} U\)</span>，<span displaypfx="inline-" class="mathjax-container">\(L\)</span>就是那三个逆矩阵的乘积。<span style="background-color: #c0c0c0;">这些逆的乘积，要比初等矩阵的乘积简单</span>。</p>
<p>下面的例子，假设矩阵<span displaypfx="inline-" class="mathjax-container">\(A\)</span>的第三行第一列已经为0，不需要<span displaypfx="inline-" class="mathjax-container">\(E_{31}\)</span>，需要两个初等矩阵完成消元。计算它们的乘积，得到消元矩阵E：</p>
<span displaypfx="" class="mathjax-container">\[\underset{E_{32}}{\left[\begin {array}{} {1} &amp; {0} &amp; {0} \\ {0} &amp; {1} &amp; {0} \\ {0} &amp; {-5} &amp; {1}\end{array}\right]}{\ }\underset{E_{21}} {\left[\begin{array}{ccc}{1} &amp; {0} &amp; {0} \\ {-2} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]}=\left[\begin{array}{ccc}{1} &amp; {0} &amp; {0} \\ {-2} &amp; {1} &amp; {0} \\ {10} &amp; {-5}&amp;{1}\end{array}\right] = E\]</span>
<p>好了，从消元矩阵上看，为了得到上三角矩阵的第三行，需要第一行参与的线性组合。这是为何？原因是<span displaypfx="inline-" class="mathjax-container">\( E_{21} \)</span>时第二行已经加上了-2倍的第一行，<span displaypfx="inline-" class="mathjax-container">\( E_{32} \)</span>是在已经组合之后的行2的基础上在进行组合，又加上了-5倍第二行，相当于是，为了消第三行第二列，需要组合10被的行一。这也是消元矩阵左下角的10的来由。</p>
<p>现在，换个角度，用初等矩阵的逆计算：</p>
<span displaypfx="" class="mathjax-container">\[\underset{E_{21}^{-1}} {\left[\begin{array}{ccc}{1} &amp; {0} &amp; {0} \\ {2} &amp; {1} &amp; {0} \\ {0} &amp; {0} &amp; {1}\end{array}\right]}{\  }\underset{E_{32}^{-1}}{\left[\begin {array}{} {1} &amp; {0} &amp; {0} \\ {0} &amp; {1} &amp; {0} \\ {0} &amp; {5} &amp; {1}\end{array}\right]}=\left[\begin{array}{ccc}{1} &amp; {0} &amp; {0} \\ {2} &amp; {1} &amp; {0} \\ {0} &amp; {5}&amp;{1}\end{array}\right] = L \]</span>
<p>可以看到，构成<span displaypfx="inline-" class="mathjax-container">\(L\)</span>的矩阵，相乘的顺序非常好，<span style="background-color: #c0c0c0;">求得L不需要任何计算</span> —— 只需<span style="background-color: #c0c0c0;">将所有消元乘数（来自初等矩阵）写出来就可以（在不需要换行的情况下）得到L</span>。</p>
<div class="blog_h1"><span class="graybg">转置-置换-向量空间R</span></div>
<div class="blog_h2"><span class="graybg">置换矩阵</span></div>
<p>当消元过程中，遇到主元为0的情况，需要更换行的位置，保证主元非零。这种置换操作叫Permutation。</p>
<p>能够完成两行或多行置换的矩阵，叫做置换矩阵。对于3阶方阵，这种矩阵有6个，例如：</p>
<span displaypfx="" class="mathjax-container">\[P_{12} = \left[ \begin{array}{ccc}{0} &amp; {1} &amp; {0}\\ {1}&amp;{0}&amp;{0}\\{0}&amp;{0}&amp;{1}\end{array}\right]\]</span>
<p>这群矩阵很特别，不管如何相乘，结果仍然是6个之一。</p>
<p>一个n阶的置换矩阵的总数，是$n^!$，因此4阶的置换矩阵有24个。</p>
<p>置换矩阵就是<span style="background-color: #c0c0c0;">进行了换行的单位矩阵</span>。单位矩阵也是置换矩阵，只是它什么事情也不做而已。</p>
<p>置换矩阵有个性质，其<span style="background-color: #c0c0c0;">逆矩阵等于其转置矩阵</span>：<span displaypfx="inline-" class="mathjax-container">\(\begin{aligned}P^{-1} = P^T\\P^T P = I \end{aligned}\)</span></p>
<p>很多情况下矩阵不够好，需要引入置换矩阵才能完成消元。对于Matlab，它甚至对于非常小的主元（非零）也会进行换行，原因是影响了计算准确性。为了进行LU分解，可能需要先对$A$应用置换矩阵：</p>
<p>\[P{ }A = L{ }U\]</p>
<p>才能得到右上角全零、对角线为1的$L$，以及左下角全零的$U$。</p>
<div class="blog_h2"><span class="graybg">转置</span></div>
<p>转置操作可以用于任何矩阵，就是将第N行变为第N列：</p>
<p>\[\begin{bmatrix} 1 &amp;3 \\ 2&amp;3 \\4&amp;1 \end{bmatrix}^T = \begin{bmatrix}1 &amp;2 &amp;4 \\ 3 &amp;3 &amp;1\end{bmatrix}\]</p>
<p>明显，对于任意元素，存在：$(A^T)_{ij} = A_{ji}$</p>
<div class="blog_h2"><span class="graybg">对称矩阵</span></div>
<p>对称（Symmetric）矩阵就是转置后没有变化的矩阵，即$A^T = A$。这种矩阵沿着左上-右下对角线对称，例如：$\begin{bmatrix}3&amp;1&amp;7\\1&amp;3&amp;9\\7&amp;9&amp;4\end{bmatrix}$</p>
<p>对于任何矩阵$R$，$R^T R $ 都是对称矩阵，因为结果矩阵的转置等于自己：$(R^TR)^T = R^T R^{TT} = R^TR$</p>
<div class="blog_h2"><span class="graybg">向量空间</span></div>
<p>向量可以支持以下运算：</p>
<ol>
<li>加上一个向量，可能导致其方向改变</li>
<li>乘以个标量，方向不变</li>
</ol>
<p>向量空间（Vector Spaces）具有以下性质：</p>
<ol>
<li>其中的任意向量经过任意加、乘，也就是线性组合，仍然落在向量空间中，或者说向量空间必须对于加、乘操作是<span style="background-color: #c0c0c0;">封闭</span>的。对于二维空间来说，第一象限不是向量空间，因为尽管其中的向量任意相加不会跑出去，但是乘以一个负数则跑到第3象限了</li>
</ol>
<p>$R^n$表示所有$n$维实向量（其所有分量Component都是实数）的整体，它覆盖整个$n$维空间的所有点，很明显它是一个向量空间。</p>
<div class="blog_h2"><span class="graybg">子空间</span></div>
<p>那么，是否$R^n$的一部分也可以是向量空间（即子空间）呢：</p>
<ol>
<li>由于任何向量乘以0，都是原点，因此<span style="background-color: #c0c0c0;">任何向量空间都必然经过原点</span></li>
<li>$R^2$的子空间包括：
<ol>
<li>$R^2$本身</li>
<li>任何过原点的直线$L$</li>
<li>原点，也就是零向量$Z$</li>
</ol>
</li>
<li>推广到$R^3$，它的子空间包括：
<ol>
<li>$R^3$本身</li>
<li>所有过原点的平面</li>
<li>所有过原点的直线</li>
<li>原点</li>
</ol>
</li>
</ol>
<div class="blog_h3"><span class="graybg">矩阵角度</span></div>
<p>现在从矩阵角度来考虑子空间。如何得出矩阵$A$所在的子空间？或者说，如何得出矩阵所有列向量所属的子空间。</p>
<p>该子空间必须满足，对矩阵列向量进行任意线性组合，结果仍然在此子空间中。或者说，<span style="background-color: #c0c0c0;">矩阵列向量的所有线性组合构成了子空间，该子空间也叫列空间（Column space）</span>，记作$C(A)$。</p>
<p>对于只有3行2列的矩阵$\begin{bmatrix}a&amp;d\\b&amp;e\\c&amp;f\end{bmatrix}$，其线性组合最大构成的子空间是平面，也可能是直线，或者是原点。</p>
<div class="blog_h1"><span class="graybg">列空间和零空间</span></div>
<div class="blog_h2"><span class="graybg">子空间的并集</span></div>
<p>两个子空间的并集通常不是子空间，考虑$R^3$中相交的$L$和$P$，很明显两者中取出的向量，相加后通常不在$L$或$P$中。</p>
<div class="blog_h2"><span class="graybg">子空间的交集</span></div>
<p>两个子空间的交集，仍然是子空间。以$R^3$为例，$L$和$P$的交集可能是零向量，也可能是$L$。</p>
<p>推广到任意$R^n$中的两个子空间$S$和$T$，它们的交集$S\cap T$必然也是子空间。</p>
<div class="blog_h2"><span class="graybg">推广到R4</span></div>
<p>考虑矩阵$A = \begin{bmatrix}1&amp;1&amp;2\\2&amp;1&amp;3\\3&amp;1&amp;4\\4&amp;1&amp;5\end{bmatrix}$，它是包含3个4维列向量。就像2个3维列向量不管如何组合都无法覆盖三维空间那样，这些4维列向量不管如何组合都无法覆盖四维空间，最多覆盖3维。</p>
<p>根据矩阵中列的不同，列空间可能是3维空间、平面、直线或零向量，它们的共同点是都经过零向量。</p>
<p>再次强调一下，<span style="background-color: #c0c0c0;">列空间就是列向量的所有线性组合</span>。</p>
<div class="blog_h2"><span class="graybg">Ax = b</span></div>
<p>结合上一小节的3x4矩阵，回到本课最初的问题上：</p>
<ol>
<li>对于任意$b$这个方程组总是有解么。也就是说，对于一组列向量$A = \begin{bmatrix}1&amp;1&amp;2\\2&amp;1&amp;3\\3&amp;1&amp;4\\4&amp;1&amp;5\end{bmatrix}$，是否总是存在它们的线性组合（系数为$x$，亦即方程组的解）以得到任意的$b$。任意的$b$就代表着$R^n$，答案显然是否：
<ol>
<li>从方程组角度看：因为方程组有4个方程，却只有3个未知数</li>
<li>从线性组合的角度看：线性组合被局限在3维空间里面，无法达到4维空间的任何点</li>
</ol>
</li>
<li>对于什么样的$b$，方程组 $Ax = \begin{bmatrix} 1&amp;1&amp;2\\2&amp;1&amp;3\\3&amp;1&amp;4\\4&amp;1&amp;5 \end{bmatrix} \times \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} =\begin{bmatrix} b_1 \\ b_2 \\b_3 \\ b_4\end{bmatrix}  $是有解的。这个问题其实可以转化为，什么样的$b$位于$A$的列空间中：
<ol>
<li>零向量是满足需求的$b$</li>
<li>1个第一列组合0个第2、3列</li>
<li>……</li>
</ol>
</li>
</ol>
<p>结论就是：$A_x=b$有解，当且仅当$b$位于$A$的列空间中时。</p>
<div class="blog_h2"><span class="graybg">线性无关</span></div>
<p>一组列向量线性无关，意味着它们每个人对线性组合都有贡献。例如上面的矩阵，列1和列2方向不同，线性无关。但是列1和列2组合后的向量，和量3可以方向一致（3位于1和2构成的平面上），这种情况下，列3对线性组合没有贡献，亦即它和前两个列是线性相关的。</p>
<p>线性相关的向量，可以去除，对列空间没有影响。留下的称为主列（Pivot Columns）。保留的原则是，<span style="background-color: #c0c0c0;">优先保留左侧的</span>。</p>
<div class="blog_h2"><span class="graybg">零空间</span></div>
<p>零空间（Null space）是一种完全不同的子空间，它由所有能解$A x = 0$的$x$组成。也就是线性组合结果为0的系数（Coefficients）的集合。</p>
<p>对于$Ax = \begin{bmatrix} 1&amp;1&amp;2\\2&amp;1&amp;3\\3&amp;1&amp;4\\4&amp;1&amp;5 \end{bmatrix} \times \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = 0 $来说，列空间是$R^4$的子空间，而零空间只有三个维度（因为方程只有3个未知数），是$R^3$的子空间。</p>
<p>零空间包含那些向量呢？首先零向量必然在其中，能称之为空间，必然包含零向量，这是封闭性的必然（任何向量都可以线性组合为0向量）。用零向量带入，明显符合预期。</p>
<p>此外，$\begin{bmatrix}1\\1\\-1\end{bmatrix}$也在零空间中，由此也可以推导出对于任意的$C$，有$\begin{bmatrix}C\\C\\-C\end{bmatrix} $位于零空间中：$C \times A \times \begin{bmatrix}1\\1\\-1\end{bmatrix}  = C \times 0 ⇨ A \times C \times \begin{bmatrix}1\\1\\-1\end{bmatrix}  = 0 ⇨ A \times \begin{bmatrix}C\\C\\-C\end{bmatrix}  = 0$。注意<span style="background-color: #c0c0c0;">标量在乘法中支持交换律</span>。</p>
<p>因此，对于该例子中的$A$来说，它的零空间是$R^3$中的一条直线。 </p>
<div class="blog_h3"><span class="graybg">任意矩阵</span></div>
<p>对于任意$Ax = 0$，它的解构成一个子空间。证明如下：</p>
<ol>
<li>对于方程的任意解$v$、$w$，有$\begin{cases} Av = 0\\ Aw = 0\end{cases}$</li>
<li>等式相加，使用分配率（Distributive law），即$Av + Aw = A(v + w) = 0$。即，如果$v$、$w$位于零空间内，那么$v + w$也在零空间内</li>
<li>同样，对于任意$v$（或者$w$），有$A(Cv) = C (Av) = Av = 0$</li>
<li>因此方程的任意解位于零空间中</li>
</ol>
<div class="blog_h1"><span class="graybg">主变量、特解</span></div>
<p>考虑线性方程组$A = \begin{bmatrix}1&amp;2&amp;2&amp;2\\2&amp;4&amp;6&amp;8\\3&amp;6&amp;8&amp;10\end{bmatrix} \begin{bmatrix}x_1 \\ x_2 \\x_3\\ x_4\end{bmatrix} = 0$，第2列是第1列的2倍 ，第1行+第2行=第3行，它们是线性相关的，这一情况会在消元过程中表现出来：</p>
<p>\[\begin{bmatrix}1&amp;2&amp;2&amp;2\\2&amp;4&amp;6&amp;8\\3&amp;6&amp;8&amp;10\end{bmatrix} ⇨ \begin{bmatrix}1&amp;2&amp;2&amp;2\\0&amp;0&amp;2&amp;4\\0&amp;0&amp;2&amp;4\end{bmatrix}  ⇨ \begin{bmatrix}1&amp;2&amp;2&amp;2\\0&amp;0&amp;2&amp;4\\0&amp;0&amp;0&amp;0\end{bmatrix} \]</p>
<p>第2步消元我们就遇到了麻烦，简单情况下，行2的第1列被消除，这里<span style="background-color: #c0c0c0;">第2列也被消除了。我们自然的将第3列作为主元</span>，执行第2步消元，将行3消为0。最终得到的<span style="background-color: #c0c0c0;">不典型的阶梯形式（Echelon form）</span>的$U$</p>
<p>需要注意的一点，消元不会改变方程组的解，因此，对于上例来说，消元不会改变零空间。</p>
<div class="blog_h2"><span class="graybg">秩</span></div>
<p>秩（Rank）就是消元完毕后，矩阵的主元的数量。对于上面的矩阵$A$，其秩为2。</p>
<div class="blog_h2"><span class="graybg">主变量和自由变量</span></div>
<p>所谓主变量，就是主列，也就是消元后包含主元（每行的第1个非0 元素）的列所对应的未知数。在上例中，列1列3包含主元，因此主变量是$x_1$、$x_3$。</p>
<p>与主变量对应的是自由变量，自由变量对应的列没有主元，即$x_2$、$x_4$。所谓<span style="background-color: #c0c0c0;">自由变量，是指它的取值是任意的，不影响方程组的解</span>。</p>
<p>我们可以取$ x_2 = 1 \\ x_4 = 0$可以得到解$x=\left[\begin{array}{c}{-2} \\ {1} \\ {0} \\ {0}\end{array}\right]$。这个解是$R^4$中的一个点。很明显$x=C\left[\begin{array}{c}{-2} \\ {1} \\ {0} \\ {0}\end{array}\right]$成立，解延续为一条直线。</p>
<div class="blog_h2"><span class="graybg">特解</span></div>
<p>前面提到，自由变量可以随意取值。我们已经得到一个解$\left[\begin{array}{c}{-2} \\ {1} \\ {0} \\ {0}\end{array}\right]$，类似的在随意更换一下自由变量，可以再得一个解$\left[\begin{array}{c}{2} \\ {0} \\ {-2} \\ {1}\end{array}\right]$。这样手工选出来的解，叫做特解（Special solutions）。</p>
<p>有了特解，就可以构造出整个零空间，<span style="background-color: #c0c0c0;">特解的任意线性组合即所有解，亦即零空间</span>。那么特解到底有几个？<span style="background-color: #c0c0c0;">每个自由变量对应一个特解</span>。自由变量的数量为列数减去秩$n - r $。</p>
<div class="blog_h2"><span class="graybg">回顾Ax=0解法</span></div>
<ol>
<li>消元，如果遇到主元位置为零的情况，不用管它，继续消元</li>
<li>得到关键的，主元个数即秩，以及自由变量数量</li>
<li>根据自由变量数量选出特解</li>
<li>将特解进行线性组合，得到零空间，亦即解</li>
</ol>
<div class="blog_h2"><span class="graybg">简化行阶梯形式</span></div>
<p>行阶梯矩阵可以继续化简：</p>
<p>\[\begin{bmatrix}1&amp;2&amp;2&amp;2\\0&amp;0&amp;2&amp;4\\0&amp;0&amp;0&amp;0\end{bmatrix} \]</p>
<p>回顾一下第3行是怎么来的？它是由行1和行2进行线性组合得到的。我们可以继续通过线性组合进行消元，让<span style="background-color: #c0c0c0;">主元的上方也变为零、所有主元变为1</span>。</p>
<p>\[\begin{bmatrix}1&amp;2&amp;2&amp;2\\0&amp;0&amp;2&amp;4\\0&amp;0&amp;0&amp;0\end{bmatrix} ⇨ \begin{bmatrix}1&amp;2&amp;0&amp;-2\\0&amp;0&amp;2&amp;4\\0&amp;0&amp;0&amp;0\end{bmatrix}  ⇨ \begin{bmatrix}1&amp;2&amp;0&amp;-2\\0&amp;0&amp;1&amp;2\\0&amp;0&amp;0&amp;0\end{bmatrix} \]</p>
<p>现在我们得到了$R$，所有主元为1，主元上下方都是0，这样的$R$叫做$A$的<span style="color: #000000;">简化行阶梯形式</span>。在Matlab中一个命令RREF（Reduced Row Echelon Form of A）即可完成矩阵到$R$的转换。这种最简化的形式包含了所有足够的信息。</p>
<p>我们可以注意到，由于主元都变为1，且它们的上下都是0，因此$R$中隐含了单位矩阵，它在主行（1、2）和主列（1、3）的交汇之处。</p>
<p>第3行全零，没有意义，因为它可以是任意行的线性组合，$0 = 0$也总是满足。</p>
<p>求解$Ax = 0$转换为中间过程$Ux = 0$，最终变为求$Rx = 0$。</p>
<p>我们把主列放在一起，自由列放在一起，可以得到<span style="background-color: #c0c0c0;">化简行阶梯的典型形式</span>：</p>
<p>\[ R = \begin{bmatrix}I&amp;F\\0&amp;0\end{bmatrix} = \begin{bmatrix}1&amp;0&amp;2&amp;-2\\0&amp;1&amp;0&amp;2\\0&amp;0&amp;0&amp;0\end{bmatrix} \]</p>
<div class="blog_h2"><span class="graybg">零空间矩阵</span></div>
<p>所谓零空间矩阵$N$，它的所有列都是特解，特解进行线性组合即可得到零空间。</p>
<p>如果$N$的每一列都是特解，那么等式$RN = 0$成立，原因是$N$的任何列满足$Rx = 0$，因此RN相乘应该是零矩阵。</p>
<p>什么样的$N$满足需求？很明显是$N=\begin{bmatrix}-F\\I\end{bmatrix}$，这就是特解构成的零空间矩阵。在Matlab中使用NULL指令可以计算出零空间矩阵。</p>
<div class="blog_h2"><span class="graybg">转置</span></div>
<p>矩阵<span style="background-color: #c0c0c0;">转置之后，主列（包含主元的列）数量不变</span>。上面的矩阵$A$主列数量为2，它的转置矩阵的主列数量仍然是2：</p>
<p>\[\begin{bmatrix}1&amp;2&amp;3\\2&amp;4&amp;6\\2&amp;6&amp;8\\2&amp;8&amp;10\end{bmatrix}  ⇨ \begin{bmatrix}1&amp;2&amp;3\\0&amp;2&amp;2\\0&amp;0&amp;0\\0&amp;0&amp;0\end{bmatrix} ⇨ \begin{bmatrix}1&amp;0&amp;1\\0&amp;1&amp;1\\0&amp;0&amp;0\\0&amp;0&amp;0\end{bmatrix}  \]</p>
<p>上述矩阵自由列数量为1，因此它的特解只有一个，取$x_3 = 1$，得到特解$\begin{bmatrix}-1\\-1\\1\end{bmatrix}$，它可以乘以任何倍数，因此零空间是一条直线。我们可以将零空间记作$x = C\begin{bmatrix}-1\\-1\\1\end{bmatrix}$，而那个<span style="background-color: #c0c0c0;">特解叫做零空间的基（Basis）</span>。</p>
<p>&nbsp;</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/linear-algebra-study-note">线性代数学习笔记</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/linear-algebra-study-note/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LaTex语法速查</title>
		<link>https://blog.gmem.cc/latex-quick-ref</link>
		<comments>https://blog.gmem.cc/latex-quick-ref#comments</comments>
		<pubDate>Thu, 28 Nov 2019 02:11:37 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://blog.gmem.cc/?p=30353</guid>
		<description><![CDATA[<p>基本 控制序列 所谓控制序列，是以[crayon-6a038ddd037b6453687272-i/]开头，以第一个空格或非字母字符结束的一段序列。控制序列不会输出到文档中，但是能够影响文档的样式或效果。 控制序列可以包含参数，参数放在[crayon-6a038ddd037ba181924001-i/]中。部分控制序列还有被方括号 [crayon-6a038ddd037bd121074604-i/] 包括的可选参数。 documentclass 设置文档类型，例如： [crayon-6a038ddd037bf739444953-i/] [crayon-6a038ddd037c1767639816-i/]：使用UTF8编码，文档类设置为ctexart usepackage 使用某个包，例如[crayon-6a038ddd037c3896171478-i/]启用中文支持。 begin和end 必须成对使用，定义一个“环境”，参数名为环境的名字：[crayon-6a038ddd037c5228499982-i/]。 title 设置文档标题：[crayon-6a038ddd037c7149482772-i/]。 author 设置作者：[crayon-6a038ddd037c9298351658-i/]。 date 设置日期：[crayon-6a038ddd037cb600204144-i/]。 maketitle 将导言区定义的标题、作者、日期，按照预定的格式展示： <a class="read-more" href="https://blog.gmem.cc/latex-quick-ref">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/latex-quick-ref">LaTex语法速查</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">基本</span></div>
<div class="blog_h2"><span class="graybg">控制序列</span></div>
<p>所谓控制序列，是以<pre class="crayon-plain-tag">\</pre>开头，以第一个<span style="background-color: #c0c0c0;">空格或非字母字符</span>结束的一段序列。控制序列不会输出到文档中，但是能够影响文档的样式或效果。</p>
<p>控制序列可以包含参数，参数放在<pre class="crayon-plain-tag">{}</pre>中。部分控制序列还有被方括号 <pre class="crayon-plain-tag">[]</pre> 包括的可选参数。</p>
<div class="blog_h3"><span class="graybg">documentclass</span></div>
<p>设置文档类型，例如：</p>
<ol>
<li><pre class="crayon-plain-tag">\documentclass{article}</pre></li>
<li><pre class="crayon-plain-tag">\documentclass[UTF8]{ctexart}</pre>：使用UTF8编码，文档类设置为ctexart</li>
</ol>
<div class="blog_h3"><span class="graybg">usepackage</span></div>
<p>使用某个包，例如<pre class="crayon-plain-tag">\usepackage{ctex}</pre>启用中文支持。</p>
<div class="blog_h3"><span class="graybg">begin和end</span></div>
<p>必须成对使用，定义一个“环境”，参数名为环境的名字：<pre class="crayon-plain-tag">\begin{document}...\end{document}</pre>。</p>
<div class="blog_h3"><span class="graybg">title</span></div>
<p>设置文档标题：<pre class="crayon-plain-tag">\title{hello, world!}</pre>。</p>
<div class="blog_h3"><span class="graybg">author</span></div>
<p>设置作者：<pre class="crayon-plain-tag">\author{Alex}</pre>。</p>
<div class="blog_h3"><span class="graybg">date</span></div>
<p>设置日期：<pre class="crayon-plain-tag">\date{\today}</pre>。</p>
<div class="blog_h3"><span class="graybg">maketitle</span></div>
<p>将导言区定义的标题、作者、日期，按照预定的格式展示：</p>
<pre class="crayon-plain-tag">\documentclass[UTF8]{ctexart}
\title{hello, world!}
\author{Alex}
\date{\today}
\begin{document}
\maketitle
hello, world!
\end{document}</pre>
<div class="blog_h3"><span class="graybg">tableofcontents</span></div>
<p>插入目录。</p>
<div class="blog_h2"><span class="graybg">段落</span></div>
<p>以下几个控制序列用于生成段落：</p>
<ol>
<li><pre class="crayon-plain-tag">\section{·}</pre></li>
<li><pre class="crayon-plain-tag">\subsection{·}</pre></li>
<li><pre class="crayon-plain-tag">\subsubsection{·}</pre></li>
<li><pre class="crayon-plain-tag">\paragraph{·}</pre></li>
<li><pre class="crayon-plain-tag">\subparagraph{·}</pre></li>
</ol>
<div class="blog_h2"><span class="graybg">注释</span></div>
<p>以<pre class="crayon-plain-tag">%</pre> 开头的行被看作是注释。如果需要输出%字符，则需要转义：<pre class="crayon-plain-tag">\%</pre>。</p>
<div class="blog_h2"><span class="graybg">空格</span></div>
<p>默认情况下文字之间的空格被忽视，需要转义，方式有：<pre class="crayon-plain-tag">{ }</pre>、<pre class="crayon-plain-tag">\ </pre></p>
<div class="blog_h2"><span class="graybg">换行</span></div>
<p>单个换行符被当作空格看待，如果需要换行，可以用两个换行符（一个空行）。</p>
<div class="blog_h1"><span class="graybg">数学公式</span></div>
<p>如果需要使用AMS-LaTeX提供的数学公式支持，需要在导言区引入包：<pre class="crayon-plain-tag">\usepackage{amsmath}</pre> 。</p>
<div class="blog_h2"><span class="graybg">数学模式</span></div>
<p>LaTex支持两种数学模式。</p>
<div class="blog_h3"><span class="graybg">行内模式</span></div>
<p>数学公式内联在文字流中，需要使用以下语法之一：</p>
<ol>
<li>美元符号 ... 美元符号</li>
<li><code><pre class="crayon-plain-tag">\(...\)</pre></code></li>
<li><pre class="crayon-plain-tag">\begin{math} ... \end{math}</pre></li>
</ol>
<div class="blog_h3"><span class="graybg">行间模式</span></div>
<p>数学公式在独立的行中居中显示：语法：</p>
<ol>
<li>\左方括号 ... \右方括号</li>
<li><pre class="crayon-plain-tag">\begin{displaymath} ... \end{displaymath}</pre></li>
<li><code></code><pre class="crayon-plain-tag">\begin{equation*} ... \end{equation*}</pre></li>
</ol>
<p>对于需要编号的行间公式，需要使用：</p>
<pre class="crayon-plain-tag">\begin{equation*} ... \end{equation*}</pre>
<div class="blog_h2"><span class="graybg">上下标</span></div>
<p>上标使用<pre class="crayon-plain-tag">^</pre>符号，例如<pre class="crayon-plain-tag">M^x</pre> 、<pre class="crayon-plain-tag">M^{xy}</pre> 生成<span displaypfx="inline-" class="mathjax-container">\(M^x\)</span>、<span displaypfx="inline-" class="mathjax-container">\(M^{xy}\)</span></p>
<p>下表使用<pre class="crayon-plain-tag">_</pre>符号，例如<pre class="crayon-plain-tag">E^{ij}</pre> 生成<span displaypfx="inline-" class="mathjax-container">\(E^{ij}\)</span></p>
<div class="blog_h2"><span class="graybg">根式</span></div>
<p>根式用 <pre class="crayon-plain-tag">\sqrt{·}</pre> 来表示。</p>
<div class="blog_h2"><span class="graybg">分式</span></div>
<p>分式用 <pre class="crayon-plain-tag">\frac{·}{·}</pre>，第一个参数为分子，第二个参数为分母。</p>
<p>在行内模式、行间模式下，分是显示的大小不同。使用<pre class="crayon-plain-tag">\dfrac</pre>强制以行间模式显示，<pre class="crayon-plain-tag">\tfrac</pre>强制以行内模式显示。</p>
<div class="blog_h2"><span class="graybg">运算符</span></div>
<table class="full-width fixed-word-wrap">
<tbody>
<tr>
<td><strong>\pm  </strong></td>
<td>$\pm$</td>
<td><strong>\times </strong></td>
<td>$\times$</td>
<td><strong>\div </strong></td>
<td>$\div$</td>
<td><strong>\cdot </strong></td>
<td>$\cdot$</td>
</tr>
<tr>
<td><strong>\cap </strong></td>
<td>$\cap$</td>
<td><strong>\cup </strong></td>
<td>$\cup$</td>
<td><strong>\geq </strong></td>
<td>$\geq$</td>
<td><strong>\leq </strong></td>
<td>$\leq$</td>
</tr>
<tr>
<td><strong>\neq </strong></td>
<td>$\neq$</td>
<td><strong>\approx </strong></td>
<td>$\approx$</td>
<td><strong>\equiv </strong></td>
<td>$\equiv$</td>
<td><strong>\sum </strong></td>
<td>$\sum$</td>
</tr>
<tr>
<td><strong>\prod</strong></td>
<td>$\prod$</td>
<td><strong>\lim</strong></td>
<td>$\lim$</td>
<td><strong>\int</strong></td>
<td>$\int$</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td><strong>\iint</strong></td>
<td>$\iint$</td>
<td><strong>\iiint</strong></td>
<td>$\iiint$</td>
<td><strong>\iiiint</strong></td>
<td> </td>
<td><strong>\idotsint </strong></td>
<td> </td>
</tr>
</tbody>
</table>
<p>在行内模式下，连加（sum）、连乘（prod）、极限（lim）、积分（int）等操作符会被压缩，以适应行高。可以用<pre class="crayon-plain-tag">\limits</pre> 和 <pre class="crayon-plain-tag">\nolimits</pre>来强制的指定是否压缩高度：<pre class="crayon-plain-tag">\sum\nolimits _{i=1}^n i</pre> 。</p>
<div class="blog_h3"><span class="graybg">上下标</span></div>
<p>操作符同样可以使用上下标，例如：<pre class="crayon-plain-tag">\prod_{i=1}^n</pre> 生成$\prod_{i=1}^n$</p>
<div class="blog_h2"><span class="graybg">定界符</span></div>
<table class="full-width fixed-word-wrap">
<tbody>
<tr>
<td>(</td>
<td>$($</td>
<td>)</td>
<td>$)$</td>
<td>[</td>
<td>$[$</td>
<td>]</td>
<td>$]$</td>
</tr>
<tr>
<td>\{</td>
<td>$\{$</td>
<td>\}</td>
<td>$\}$</td>
<td>\langle</td>
<td>$\langle$</td>
<td>\rangle</td>
<td>$\rangle$</td>
</tr>
<tr>
<td>\lvert</td>
<td> </td>
<td>\rvert</td>
<td> </td>
<td>\lVert</td>
<td> </td>
<td>\rVert</td>
<td> </td>
</tr>
</tbody>
</table>
<p>可以使用<pre class="crayon-plain-tag">\big</pre>, <pre class="crayon-plain-tag">\Big</pre>, <pre class="crayon-plain-tag">\bigg</pre>, <pre class="crayon-plain-tag">\Bigg</pre>来调整括号的大小。 放在括号前面。</p>
<div class="blog_h2"><span class="graybg">省略号</span></div>
<table class="full-width fixed-word-wrap">
<tbody>
<tr>
<td>\dots</td>
<td>\[\dots\]</td>
<td>\cdots</td>
<td>\[\cdots\]</td>
</tr>
<tr>
<td>\vdots</td>
<td>\[\vdots\]</td>
<td>\ddots</td>
<td>\[\ddots\]</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">矩阵</span></div>
<p>pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix等环境可以在矩阵两边加上各种风格的括号。</p>
<p>&amp; 用于分隔一行中的各元素，\\用于换新行。</p>
<p>示例：</p>
<pre class="crayon-plain-tag">\begin{pmatrix} a&amp;b\\c&amp;d \end{pmatrix} \quad
\begin{bmatrix} a&amp;b\\c&amp;d \end{bmatrix} \quad
\begin{Bmatrix} a&amp;b\\c&amp;d \end{Bmatrix} \quad
\begin{vmatrix} a&amp;b\\c&amp;d \end{vmatrix} \quad
\begin{Vmatrix} a&amp;b\\c&amp;d \end{Vmatrix}</pre>
<p>效果： </p>
<p>\[ \begin{pmatrix} a&amp;b\\c&amp;d \end{pmatrix} \quad<br />\begin{bmatrix} a&amp;b\\c&amp;d \end{bmatrix} \quad<br />\begin{Bmatrix} a&amp;b\\c&amp;d \end{Bmatrix} \quad<br />\begin{vmatrix} a&amp;b\\c&amp;d \end{vmatrix} \quad<br />\begin{Vmatrix} a&amp;b\\c&amp;d \end{Vmatrix} \]</p>
<p>使用smallmatrix可以生成行内小矩阵：<pre class="crayon-plain-tag">( \begin{smallmatrix} a&amp;b\\c&amp;d \end{smallmatrix} )</pre>。</p>
<div class="blog_h2"><span class="graybg">跨行显示</span></div>
<p>有些公式特别长，单行显示不了，可以使用多行显示。</p>
<div class="blog_h3"><span class="graybg">不对齐</span></div>
<p>无需对齐的长公式，可以使用multline环境。例如：</p>
<pre class="crayon-plain-tag">\begin{multline}
x = a+b+c \\
d+e+f
\end{multline}</pre>
<p>生成：</p>
<p>\[ \begin{multline}<br />x = a+b+c \\<br />d+e+f<br />\end{multline} \]</p>
<div class="blog_h3"><span class="graybg">对齐</span></div>
<p>需要对齐的长公式，可以使用aligned环境，例如： </p>
<pre class="crayon-plain-tag">\begin{aligned}
x = a+b+c \\
d+e+f
\end{aligned}</pre>
<p>生成：</p>
<p>\[ \begin{aligned}<br />x = a+b+c \\<br />d+e+f<br />\end{aligned} \] </p>
<div class="blog_h2"><span class="graybg">公式组</span></div>
<p>无需对齐的公式组，使用gather环境，需要对齐的使用align环境。例如：</p>
<pre class="crayon-plain-tag">\begin{gather}
a = b+c+d \\
x = y+z
\end{gather}
\begin{align}
a &amp;= b+c+d \\
x &amp;= y+z
\end{align}</pre>
<div class="blog_h2"><span class="graybg">分段函数</span></div>
<p>使用cases环境，例如：</p>
<pre class="crayon-plain-tag">y= \begin{cases}
-x,\quad x\leq 0 \\
x,\quad x&gt;0
\end{cases}</pre>
<p>生成：</p>
<p>\[ y= \begin{cases}<br />-x,\quad x\leq 0 \\<br />x,\quad x&gt;0<br />\end{cases} \]</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/latex-quick-ref">LaTex语法速查</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/latex-quick-ref/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>吴恩达机器学习笔记</title>
		<link>https://blog.gmem.cc/machine-learning-notes</link>
		<comments>https://blog.gmem.cc/machine-learning-notes#comments</comments>
		<pubDate>Tue, 12 Dec 2017 11:17:00 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">https://blog.gmem.cc/?p=26437</guid>
		<description><![CDATA[<p>机器学习的动机与应用 课程的四块内容 监督学习 Supervised Learning，我们为算法提供了“标准答案”，并希望算法去学习标准输入 - 标准答案之间的联系。 房屋价格预测的问题，自变量为平米数，因变量为价格。这类问题属于回归（Regression）问题 —— 需要预测的变量是连续的。 分类问题，例如癌症诊断，简化为自变量为大小，因变量为是否恶性。这类问题是离散的。 自变量可以有多个，甚至无限个，每个自变量叫做一个特征（Feature）。支持向量机算法，用于将数据映射到无限维空间。 学习理论 需要多少样本才能满足目标？ 无监督学习 没有“标准答案“，算法必须从样本中发现结构（规律）。 聚类问题就是无监督学习的例子。所谓聚类，不同于分类，后者已经知道有哪些类别，聚类需要通过分析数据集来发现类别 —— 自动将数据聚合到不同的簇（Cluster）中。 聚类算法的例子，包括谷歌新闻。它能够分析成千上万的新闻，并进行分类，识别新闻主题。 鸡尾酒会问题：从叠加的数据中分离出信息。 工具 <a class="read-more" href="https://blog.gmem.cc/machine-learning-notes">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/machine-learning-notes">吴恩达机器学习笔记</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">机器学习的动机与应用</span></div>
<div class="blog_h2"><span class="graybg">课程的四块内容</span></div>
<div class="blog_h3"><span class="graybg">监督学习</span></div>
<p>Supervised Learning，我们为算法提供了“<span style="background-color: #c0c0c0;">标准答案</span>”，并希望算法去学习<span style="background-color: #c0c0c0;">标准输入 - 标准答案</span>之间的联系。</p>
<p>房屋价格预测的问题，自变量为平米数，因变量为价格。这类问题属于<span style="background-color: #c0c0c0;">回归（Regression）问题 —— 需要预测的变量是连续的</span>。</p>
<p><span style="background-color: #c0c0c0;">分类问题</span>，例如癌症诊断，简化为自变量为大小，因变量为是否恶性。这类问题是离散的。</p>
<p>自变量可以有多个，甚至无限个，每个自变量叫做一个<span style="background-color: #c0c0c0;">特征（Feature）</span>。<span style="background-color: #c0c0c0;">支持向量机算法</span>，用于将数据映射到无限维空间。</p>
<div class="blog_h3"><span class="graybg">学习理论</span></div>
<p>需要多少样本才能满足目标？</p>
<div class="blog_h3"><span class="graybg">无监督学习</span></div>
<p>没有“标准答案“，算法必须从样本中发现结构（规律）。</p>
<p>聚类问题就是无监督学习的例子。所谓聚类，不同于分类，后者已经知道有哪些类别，聚类需要通过<span style="background-color: #c0c0c0;">分析数据集来发现类别</span> —— 自动将数据聚合到不同的簇（Cluster）中。</p>
<p>聚类算法的例子，包括谷歌新闻。它能够分析成千上万的新闻，并进行分类，识别新闻主题。</p>
<p>鸡尾酒会问题：从叠加的数据中分离出信息。</p>
<div class="blog_h3"><span class="graybg">工具</span></div>
<p>建议先使用Octave建立模型进行研究，最后才迁移到工业级语言。</p>
<pre class="crayon-plain-tag">sudo add-apt-repository ppa:octave/stable
sudo apt-get update
sudo apt-get install octave</pre>
<div class="blog_h1"><span class="graybg">线性回归</span></div>
<p>第一个介绍的算法是线性回归（Linear Regression），本节课程将了解到模型长什么样子、监督学习的过程。 </p>
<div class="blog_h2"><span class="graybg">定义</span></div>
<p>在统计学中，线性回归是利用称为<span style="background-color: #c0c0c0;">线性回归方程</span>的<span style="background-color: #c0c0c0;">最小二乘函数</span>对一个或多个自变量和因变量之间<span style="background-color: #c0c0c0;">关系进行建模</span>的一种回归分析。这种函数是一个或多个称为<span style="background-color: #c0c0c0;">回归系数</span>的模型参数的<span style="background-color: #c0c0c0;">线性组合</span>。只有一个自变量的情况称为简单回归，大于<span style="background-color: #c0c0c0;">一个自变量情况的叫做多元回归</span>（Multivariable linear regression）。</p>
<div class="blog_h3"><span class="graybg">最小二乘法</span></div>
<p>Least squares method，也叫最小平方法。从字面上看，此方法追求平方值的最小化。算术平均法是最小二乘法的特例，也是它的起源。</p>
<p>测量可能因为各种原因导致误差，最自然的处理误差的方式就是求算术平均：</p>
<span displaypfx="" class="mathjax-container">\[\bar{x}=\frac{10.2+10.3+9.8+9.9+9.8}{5}=10\]</span>
<p>如何证明这种处理误差的方式是合理的呢？</p>
<p>如果误差是随机的，应该围绕真值上下波动 —— 从这个猜想可以衍生出：如果真值为y，那么，所有测量值与y的差的绝对值之和应该最小。为了免去处理绝对值的正负号，直接将求绝对值转换为求平方：</p>
<span displaypfx="" class="mathjax-container">\[\left|y-y_{i}\right| \rightarrow\left(y-y_{i}\right)^{2}\]</span>
<p>求真值就转换为求解下面的表达式何时最小：</p>
<span displaypfx="" class="mathjax-container">\[S_{\epsilon^{2}}=\sum\left(y-y_{i}\right)^{2}\]</span>
<p>很明显，这是一个二次函数，底部（导数为零时）的值最小（<span displaypfx="inline-" class="mathjax-container">\({\epsilon}\)</span>表示误差）：</p>
<span displaypfx="" class="mathjax-container">\[\begin{aligned} \frac{d}{d y} S_{\epsilon^{2}} &amp;=\frac{d}{d y} \sum\left(y-y_{i}\right)^{2}=2 \sum\left(y-y_{i}\right)=2\left(\left(y-y_{1}\right)+\left(y-y_{2}\right)+\left(y-y_{3}\right)+\left(y-y_{4}\right)+\left(y-y_{5}\right)\right)=0 \end{aligned}\]</span>
<p>注意求导的方式，是把求和式作为整体看待，<span displaypfx="inline-" class="mathjax-container">\(x^{2}\)</span>的导函数是<span displaypfx="inline-" class="mathjax-container">\({2x}\)</span></p>
<p>上述等式即算术平均数：</p>
<span displaypfx="" class="mathjax-container">\[y=\frac{y_{1}+y_{2}+y_{3}+y_{4}+y_{5}}{5}\]</span>
<div class="blog_h3"><span class="graybg">最小二乘法的推广</span></div>
<p>算术平均数只是最小二乘法的特例 —— 根据多个测量值求一个真值。推广起来，就是求真值的函数，最简单的情况是一元函数，每个自变量对应一个测量值。</p>
<p>下面是根据温度预测冰淇淋销量的例子，已知数据采样如下：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">温度</td>
<td style="text-align: center;">销量</td>
</tr>
</thead>
<tbody>
<tr>
<td>25</td>
<td>110</td>
</tr>
<tr>
<td>27</td>
<td>115</td>
</tr>
<tr>
<td>31</td>
<td>155</td>
</tr>
<tr>
<td>33</td>
<td>160</td>
</tr>
<tr>
<td>35</td>
<td>180</td>
</tr>
</tbody>
</table>
<p>我们假设销量和温度之间是一种线性关系：<span displaypfx="inline-" class="mathjax-container">\(f(x)=a x+b\)</span>，带入最小二乘法，误差平方和为：</p>
<span displaypfx="" class="mathjax-container">\[S_{\epsilon^{2}}=\sum\left(f\left(x_{i}\right)-y_{i}\right)^{2}=\sum\left(a x_{i}+b-y_{i}\right)^{2}\]</span>
<p>不同的a,b会导致不同的<span displaypfx="inline-" class="mathjax-container">\(S_{\epsilon^{2}}\)</span>，根据多元微积分的知识，对系数a,b求偏导，偏导数都为0时<span displaypfx="inline-" class="mathjax-container">\(S_{\epsilon^{2}}\)</span>达到最小值：</p>
<span displaypfx="" class="mathjax-container">\[\left\{\begin{array}{l}{\frac{\partial}{\partial a} S_{\epsilon^{2}}=2 \sum\left(a x_{i}+b-y_{i}\right) x_{i}=0} \\ {\frac{\partial}{\partial b} S_{\epsilon^{2}}=2 \sum\left(a x_{i}+b-y_{i}\right)=0}\end{array}\right.\]</span>
<p>将<span displaypfx="inline-" class="mathjax-container">\(x_{i}\)</span>和<span displaypfx="inline-" class="mathjax-container">\(y_{i}\)</span>用上面的数据采样带入，解线性方程组，可得到大概：<span displaypfx="inline-" class="mathjax-container">\(f(x)=7.2 x - 73\)</span>，是一条拟合了采样数据的直线。</p>
<p>销量和温度之间也可能不是线性的，例如可以假设是<span displaypfx="inline-" class="mathjax-container">\(f(x)=a x^{2}+b x+c\)</span>，参考上面的方式带入，可以得到一条拟合了采样数据的二次曲线。</p>
<div class="blog_h2"><span class="graybg">模型描述</span></div>
<div class="blog_h3"><span class="graybg">训练集</span></div>
<p>在监督学习中，我们需要一个数据集，叫做训练集（Traning Set），房价预测的例子中，训练集可以如下：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="text-align: center;">输入变量x（平方数）</td>
<td style="text-align: center;">输出变量y（价格）</td>
</tr>
</thead>
<tbody>
<tr>
<td>2104</td>
<td>460</td>
</tr>
<tr>
<td>1416</td>
<td>232</td>
</tr>
<tr>
<td>1534</td>
<td>315</td>
</tr>
<tr>
<td>852</td>
<td>178</td>
</tr>
<tr>
<td>……</td>
<td>……</td>
</tr>
</tbody>
</table>
<p>机器学习的目标就是<span style="background-color: #c0c0c0;">从训练集中学习</span>如何预测房价。 </p>
<div class="blog_h3"><span class="graybg">符号定义</span></div>
<p> 本课程定义了一系列的符号： </p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 25%; text-align: center;">符号</td>
<td style="text-align: center;">定义</td>
</tr>
</thead>
<tbody>
<tr>
<td>$m$</td>
<td>训练样本的数量，训练集的长度</td>
</tr>
<tr>
<td>$x^{'}$</td>
<td>输入变量，也叫特征</td>
</tr>
<tr>
<td>$y^{'}$</td>
<td>输出变量，也叫目标变量</td>
</tr>
<tr>
<td>$(x, y)$</td>
<td>表示单个训练样本（Example）</td>
</tr>
<tr>
<td>$(x^{(i)},y^{(i)})$</td>
<td>第i个训练样本</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">假设函数</span></div>
<p>所谓<span style="background-color: #c0c0c0;">假设函数（Hypothesis Function），其作用是以特征为输入， 以目标变量的预测值为输出</span>的函数，这是机器学习领域的标准术语。</p>
<p>对于一元 （单变量，Univariate）线性回归，假设函数的形状如下：</p>
<p>\[  h_θ(x) = θ_0 + θ_1*x \]</p>
<p>上述公式中的$θ_0$、$θ_1$称为<span style="background-color: #c0c0c0;">模型参数</span>，x是输入变量。选择合理的参数是得到合理假设函数的关键，好的假设函数能更好的拟合。</p>
<div class="blog_h2"><span class="graybg">代价函数</span></div>
<div class="blog_h3"><span class="graybg">最小化问题</span></div>
<p>在线性回归中，我们需要解决的是一个最小化问题，寻找合理的模型参数$θ_0$、$θ_1$使得右侧的求和值最小：</p>
<p>\[ \begin{array}{c}{\text { minimize }} \\ {\theta_{0} \ \theta_{1}}\end{array} \frac{\sum_{i = 1}^m \Big( h_θ(x^{(i)}) - y^{(i)} \Big)^2}{2m} \]</p>
<p>也就是说，尽可能的选择一个假设函数，使得针对所有训练样本的预测值与真实值的差的平方和最小，亦即<span style="background-color: #c0c0c0;">预测值的平均误差最小</span>。这其实就是一个最小二乘法的思路。</p>
<p>能解决最小化问题的假设函数，也叫<span style="background-color: #c0c0c0;">目标函数</span>。而\[ J(θ_0,θ_1) = \frac{\sum_{i = 1}^m \Big( h_θ(x^{(i)}) - y^{(i)} \Big)^2}{2m} \]叫做<span style="background-color: #c0c0c0;">代价函数（Cost Function）</span>。代价函数也叫平方误差（代价）函数，这种函数对于<span style="background-color: #c0c0c0;">大部分问题，特别是回归问题，是一个合理的选择</span>。除以$m$表示求平均值，除以$2$没有任何意义，仅用于求导时消除，让等式更加自然。</p>
<p>代价函数，也较损失函数（Loss Function），代价函数的自变量就是模型参数。尝试寻求代价函数的最小值，就是解决最小化问题。</p>
<div class="blog_h3"><span class="graybg">θ0=0</span></div>
<p>我们首先把问题简化一下，仅仅考虑一个模型参数$θ_1$。这种情况下，假设函数是穿过原点的一条斜线，$θ_1$控制它的斜率。代价函数假设为：</p>
<p>\[ J(θ_1) = \frac{\sum_{i = 1}^m \Big( θ_1 x^{(i)} - y^{(i)} \Big)^2}{2m} \]</p>
<p>讲训练样本带入进行计算，可以看到函数$J(θ_1)$的图像是一条抛物线。其底部值（也就是平均误差）最小，对应的$θ_1$就是我们的调参结果。</p>
<div class="blog_h3"><span class="graybg">一般化</span></div>
<p>我们再看看保留两个模型参数的情况。代价函数会变成抛物面的形状，类似的，$J(θ_0,θ_1)$会在抛物面的底部达到最小值。</p>
<p>为了展示的方便，一般将三维抛物面转换为等高线图，两个参数分别对应纵横轴。</p>
<div class="blog_h2"><span class="graybg">梯度下降</span></div>
<p>机器学习算法的目标就是最小化代价函数，梯度下降（Gradient descent）就是这样的一种算法。</p>
<p>梯度下降是一种很通用的算法，被广泛应用在机器学习的众多领域。 它不仅仅可以最小化线性回归的代价函数$J$。</p>
<div class="blog_h3"><span class="graybg">概要</span></div>
<p>梯度下降算法的工作方式如下：</p>
<ol>
<li>从某个$θ_0,θ_1,...θ_n$初始值开始，通常初始值中，每个模型参数都取值$0$</li>
<li>不断的<span style="background-color: #c0c0c0;">一点点</span>的 改变$θ_0,θ_1,...θ_n$，来减小代价函数$J(θ_0,θ_1,...θ_n)$。直到获取$J$的<span style="background-color: #c0c0c0;">最小值</span>，或者<span style="background-color: #c0c0c0;">局部最小值</span>（Local minium）</li>
</ol>
<p>考虑下面的代价函数图像：</p>
<p> <a href="https://blog.gmem.cc/wp-content/uploads/2019/06/gradient-descent-1.png"><img class="aligncenter  wp-image-30671" src="https://blog.gmem.cc/wp-content/uploads/2019/06/gradient-descent-1.png" alt="gradient-descent-1" width="325" height="156" /></a></p>
<p>&nbsp;</p>
<p>纵轴方向的值代表了代价函数的大小，下方深蓝色是它的最小值所在。可以把这图像看做一座山，当你站在红色的山顶上，环视四周，并问自己，如果我想尽快下山的话，应该向什么方向走？</p>
<p>你可能尝试向各个方向分别试探一小步（这个步长称为$\alpha$），然后判断哪个方向下降的<span style="background-color: #c0c0c0;">最快</span>。这意味着选择<span style="background-color: #c0c0c0;">不同的初始点，可能走的路径不一样。例如你可能到达图像右侧的局部最优（Local Optimum）处</span>。</p>
<p>当到达局部最优解处时，导数项为0，$\theta$不会再变化。逼近最优解的过程中，导数项趋向于无穷小，$\alpha$和它的乘积也趋向于无穷小。这意味着我们不需要在逼近的过程中减小$\alpha$，梯度下降算法会<span style="background-color: #c0c0c0;">自动减小步进</span>。</p>
<div class="blog_h3"><span class="graybg">算法特点</span></div>
<ol>
<li>选择不同的初值，可能达到不同的局部最优解</li>
</ol>
<div class="blog_h3"><span class="graybg">数学原理</span></div>
<p>梯度下降算法的数学定义是，对于每个模型参数$j$，<span style="background-color: #c0c0c0;">反复同步执行</span>$ \theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}...\right) $直到<span style="background-color: #c0c0c0;">收敛</span>。</p>
<p>在本课程中$:=$表示赋值，$=$则表示断言/比较。</p>
<p>$\alpha$是一个数字，叫做<span style="background-color: #c0c0c0;">学习率（Learning Rate）</span>，它控制<span style="background-color: #c0c0c0;">梯度下降时，迈的步子有多大</span>。</p>
<p>学习率后面的是一个偏导数项（Derivative Term），它表示了在某个特征方向上代价函数变化的激烈程度。</p>
<p>梯度算法的一个微妙之处是，要求所有特征同步更新：</p>
<p>\[\begin{array}{l}{\operatorname{temp} 0:=\theta_{0}-\alpha \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)} \\ {\operatorname{temp} 1:=\theta_{1}-\alpha \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right)} \\ {\theta_{0}:=\operatorname{temp} 0} \\ {\theta_{1}:=\operatorname{temp} 1}\end{array}\]</p>
<p>把上述代码的第2、3行交换位置，是不正确的实现方法，尽管它可能有效。</p>
<div class="blog_h3"><span class="graybg">理解导数项</span></div>
<p>从单个模型参数开始理解。对于$J(\theta_{1})$，梯度下降的过程是反复进行$\theta_{1}:=\theta_{1}-\alpha \frac{d}{d \theta_{1}} J\left(\theta_{1}\right)$。右边的微分项，即$\theta_{1}$点处的斜率。 </p>
<p>我们可以用一个抛物线（代价函数是误差平方和，二次函数）来带入测试，可以发现梯度下降会逐步的将$\theta_{1}$移向最低点，也就是达成最小化的目标：</p>
<ol>
<li>学习率总是取一个小的正数</li>
<li>在左侧，斜率（Slope）为负，导致$\theta_{1}$右移</li>
<li>在右侧，斜率为正，导致$\theta_{1}$左移</li>
</ol>
<p>回到两个模型参数的房价预测。求导变为求偏导：</p>
<p>\[ \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right)=\frac{\partial}{\partial \theta_{j}} \cdot \frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}  =\frac{\partial}{\partial \theta_{j}} \cdot \frac{1}{2 m} \sum_{i=1}^{m}\left(\theta_0 + \theta_1x^{(i)}-y^{(i)}\right)^{2}  \]</p>
<p>即（这里不写具体计算过程，总之求偏导时将其它模型参数看做常量，应用求导公式即可）：</p>
<p>\[\begin{cases} \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \\ \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x^{(i)} \end{cases} \]</p>
<p>现在可以把上面的偏导数带入到线性回归算法：</p>
<p>\[\begin{array}{l}{\text { repeat until convergence }\{} \\ {\qquad \begin{aligned} \theta_{0} &amp;:=\theta_{0}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \\ \theta_{1} &amp;:=\theta_{1}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x^{(i)} \end{aligned}} \\ {\}}\end{array}\]</p>
<div class="blog_h3"><span class="graybg">理解学习率</span></div>
<p>如果学习率太小，则梯度下降的速度会很慢，需要很多次迭代才能达到全局最优解。</p>
<p>如果学习率太大，则可能无法收敛甚至发散（Diverge）。一次迭代就可能从抛物线左侧跳到右侧。</p>
<div class="blog_h3"><span class="graybg">局部最优陷阱</span></div>
<p>使用梯度下降算法，很容易陷入到局部最优解。</p>
<p>不过对于线性回归来说，其代价函数总是凸函数（Convex Function），其形状类似于一个碗。这种函数很简单，没有局部最优解（Loal Optimum），只有一个全局最优解。</p>
<div class="blog_h3"><span class="graybg">Batch梯度下降</span></div>
<p>本节介绍的梯度下降的每个步骤，都需要使用所有训练样本（带入偏导数求出模型参数），因此叫做Batch梯度下降。后续会讲解不需要迭代整个训练集的方法。</p>
<p>在线性代数中有一种方法叫做正规方程组（Normal Equations），可以最小化代价函数$J$，而不需要使用梯度下降算法。但是梯度下降更加适合大规模数据集。</p>
<div class="blog_h1"><span class="graybg">线性代数复习</span></div>
<div class="blog_h2"><span class="graybg">矩阵和向量</span></div>
<p>通常矩阵用大写，向量用小写。</p>
<p>矩阵的维度（Dimension）即$rownum \times column $。</p>
<p>$\mathbb{R}^{4 \times 2}$表示所有4x2矩阵的集合。</p>
<p>$A_{ij}$表示矩阵A的第i行j列的元素。</p>
<p>向量可以看做是特殊的矩阵，只有一列的矩阵。其行数为向量的维度，4维向量的集合记作$\mathbb{R}^{4}$。$v_i$表示向量的第i个维。本课程默认第一个维为1而非0。</p>
<div class="blog_h2"><span class="graybg">矩阵加法</span></div>
<p>形状（维度）相同才可以相加，对应元素相加即可。</p>
<div class="blog_h2"><span class="graybg">矩阵乘法</span></div>
<div class="blog_h3"><span class="graybg">矩阵乘以标量</span></div>
<p>所有元素都分别乘以此标量即可。满足<span style="background-color: #c0c0c0;">交换律</span>。本课程中，讨论乘法的时候，需要考虑行图像，每行代表了一组自变量，将其和模型参数（一个列）进行线性组合，结果就是预测值。</p>
<div class="blog_h3"><span class="graybg">矩阵乘以向量</span></div>
<p>矩阵乘以向量，结果是向量。</p>
<p>假设有假设函数$h_{(\theta)} = -40 + 0.25 x$，怎么一次性预测$\begin{bmatrix} 2104 \\ 1416 \\ 1534 \\ 852 \end{bmatrix}$这4个尺寸房子的价格？</p>
<p>我们可以将其看做矩阵$\begin{bmatrix} 1 &amp; 2104 \\ 1 &amp;1416 \\ 1 &amp;1534 \\ 1 &amp;852 \end{bmatrix}$，应用矩阵乘法即可，在它右边乘以$\begin{bmatrix} -40 \\ 0.25 \end{bmatrix}$。以行图像角度理解，相当于40个1+*个x的线性组合，结果是一个向量，对应每个尺寸的预测价格。</p>
<p>在Octave或者工业语言中，这种矩阵乘法更加简洁，运行效率也更加高效。 </p>
<div class="blog_h3"><span class="graybg">矩阵乘以矩阵</span></div>
<p>矩阵乘以矩阵，结果是矩阵。</p>
<p>假设我们有三个假设函数$\begin{array}{l}{h_{\theta}(x)=-40+0.25 x} \\ {h_{\theta}(x)=200+0.1 x} \\ {h_{\theta}(x)=-150+0.4 x}\end{array}$，都要应用来预测上面四个房子的价格，实际上可以转换为高效的矩阵计算：</p>
<p>\[\left[\begin{array}{cc}{1} &amp; {2104} \\ {1} &amp; {1416} \\ {1} &amp; {1534} \\ {1} &amp; {852}\end{array}\right] \times\left[\begin{array}{ccc}{-40} &amp; {200} &amp; {-150} \\ {0.25} &amp; {0.1} &amp; {0.4}\end{array}\right]= \left[\begin{array}{ccc}{486} &amp; {410} &amp; {692} \\ {314} &amp; {342} &amp; {416} \\ {344} &amp; {353} &amp; {464} \\ {173} &amp; {285} &amp; {191}\end{array}\right]\]</p>
<p>右侧矩阵的每列，对应一个假设函数。结果矩阵的每列，对应不同的假设函数。这里单次矩阵运算就可以完成12次预测。</p>
<div class="blog_h2"><span class="graybg">矩阵乘法的特征</span></div>
<p>不支持交换律。支持结合律。</p>
<p>单位矩阵是n阶方阵，任何同阶矩阵乘以它，不变。$A I = I A = A$</p>
<div class="blog_h2"><span class="graybg">逆</span></div>
<p>方阵和它的逆相乘，得到单位矩阵。</p>
<p>不是所有方阵都有逆，例如明显的零矩阵就没有逆。</p>
<p>没有逆的矩阵也叫奇异（Singular）或退化（Degenerate）矩阵。</p>
<div class="blog_h1"><span class="graybg">多特征线性回归</span></div>
<p>之前房价预测的例子，仅仅有一个特征，就是尺寸。实际上房价和多个维度有关系，包括尺寸、房间数量、楼层数量、房龄，等等。这种情况下可以使用更强大的多变量线性回归。</p>
<div class="blog_h2"><span class="graybg">新的记号</span></div>
<p>$x_1$、$x_2$、$x_3$、$x_4$分别表示第1、2、3、4个特征。</p>
<p>$n$表示特征的数量。</p>
<p>$x_{j}^{(i)}$表示第$i$个副本的第$j$个特征的值。</p>
<p>向量$x^{(i)}$表示第$i$的训练样本，例如$ x ^{(2)} = \begin{bmatrix} 1416 \\ 2 \\ 2 \\ 40 \end{bmatrix} $</p>
<div class="blog_h2"><span class="graybg">假设函数</span></div>
<p>线性回归算法下，即使有多个特征，假设函数仍然是线性的：</p>
<p>\[ h_{\theta}(x) = \theta_0 + \theta_1x_1+ \theta_2x_2+ \theta_3x_3+ \theta_4x_4\]</p>
<p>为了矩阵计算的方便，我们为样本加一个特征$x_0$，其值总是为$1$，对应到参数$\theta_0$：</p>
<p>\[ h_{\theta}(x) = \theta_0x_0 + \theta_1x_1+ \theta_2x_2+ \theta_3x_3+ \theta_4x_4 \ (x_0 = 1) \] </p>
<p>现在具有$n$个特征的训练样本可以记作$n+1$维向量：$x=\left[\begin{array}{c}{x_{0}} \\ {x_{1}} \\ {x_{2}} \\ {\vdots} \\ {x_{n}}\end{array}\right] \ \ \in \mathbb{R}^{n+1}$，相应的$n+1$个模型参数可以记作：$\Theta=\left[\begin{array}{c}{\theta_{0}} \\ {\theta_{1}} \\ {\theta_{2}} \\ {\vdots} \\ {\theta_{n}}\end{array}\right] \in \mathbb{R}^{n+1}$。</p>
<p>而假设函数可以简单的记作$h_{\theta}(x) = \theta^Tx$，此向量内积（Inner Product，点积，两个等维向量得到一个标量，几何意义是第一个向量和它在第二个向量方向上投影的乘积，因此两个向量方向越接近则点积越大）即本节最上面的假设函数。</p>
<div class="blog_h2"><span class="graybg">代价函数</span></div>
<p>仍然是误差项的平方和：</p>
<p>\[ J\left(\theta_{0}, \theta_{1}, \ldots, \theta_{n}\right) = J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \]</p>
<div class="blog_h2"><span class="graybg">梯度下降</span></div>
<p>梯度下降的逻辑是类似的，仍然是对$n+1$个模型参数中得每一个重复进行：</p>
<p>\[ \begin{array}{l}{\text { Repeat }\{} \\ {\qquad \begin{aligned} \theta_{j}:= \theta_{j} - \alpha\frac{\partial}{\partial \theta_{j}} J(\theta) = \theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} \\ \text { (simultaneously update } \theta_{j} \text { for } \\j=0, \ldots, n) \end{aligned}} \\ \} \end{array} \]</p>
<p>\[\begin{array}{l}{\theta_{0}:=\theta_{0}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{0}^{(i)}} \\ {\theta_{1}:=\theta_{1}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{1}^{(i)}} \\ {\theta_{2}:=\theta_{2}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{2}^{(i)}} \\ \cdots \end{array}\]</p>
<p>即从一组任意选择的模型参数（通常选择零向量）开始，对每个参数、同步的减去学习率乘以偏导数，直到收敛。</p>
<div class="blog_h2"><span class="graybg">梯度下降技巧</span></div>
<p>这些技巧的目的都是<span style="background-color: #c0c0c0;">让梯度下降算法快速收敛，减少计算量</span>。</p>
<div class="blog_h3"><span class="graybg">特征缩放</span></div>
<p>特征缩放（Feature Scaling），它的想法是，保证所有特征在相似的范围（Scale）上，也就是说让所有特征的值大小近似，不要差距过大。</p>
<p>以房价预测为例，假设有两个维度，尺寸和房间数。尺寸的数量级是1000，房间则是个位数。以这两个维的模型参数作为轴绘制等高线，你会发现它的等值线近似于长短轴比非常大椭圆。在这种等值线上梯度下降需要消耗相当多的步骤。</p>
<p><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/gradual-descent.png"><img class="aligncenter  wp-image-30875" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/gradual-descent.png" alt="gradual-descent" width="287" height="279" /></a></p>
<p>&nbsp;</p>
<p>特征缩放的具体做法就是，对各特征除以适当的倍数，使它们近似的都落入$-1 \leq x_{i} \leq 1$这个（没有数量级差异即可，例如小至$\frac{1}{3}$大至$3$）范围，进而让等高线更接近于圆形。这样，梯度下降的过程就<span style="background-color: #c0c0c0;">不会是剧烈的来回震荡，而是更加直接的朝着最优解方向</span>。</p>
<p>算法应用完成后，只需要对最小化后得到的模型参数反向的缩放一下即可。</p>
<div class="blog_h3"><span class="graybg">均值归一化</span></div>
<p>均值归一化（Mean Normalization），就是对所有样本的每个特征进行转换，让它的<span style="background-color: #c0c0c0;">平均值接近零</span>。</p>
<p>以房价预测为例，假设尺寸取值在0-2000之间，平均值大概1000，房间数取值在1-5之间，平均值大概5，则可以用下面的公式进行归一化：</p>
<p>\[\begin{array}{l}{x_{1}=\frac{\operatorname{size}-1000}{2000}} \\ {x_{2}=\frac{\# \text { bedrooms }-2}{5}}\end{array}\]</p>
<p>更一般的说，对于第i个特征$x_i$，归一化使用公式$\frac{x_i - u_i}{s_i}$。其中$u_i$是此特征的平均值，$s_i$是此特征最大值和最小值之差。同样的，$s_i$或$u_i$不需要非常精确。</p>
<div class="blog_h3"><span class="graybg">判断收敛程度</span></div>
<p>以迭代次数为横轴，代价函数（平均误差）为纵轴，绘制图像，<span style="background-color: #c0c0c0;">理想情况下曲线应该逐步下降，并且从陡峭渐渐变得平缓</span>。</p>
<p>可能第300次迭代到400次迭代之间，平均误差基本没有什么变化，这提示迭代到这里就足够了。</p>
<p>解决不同问题，需要迭代的次数可能差异很大。</p>
<p>如果此曲线<span style="background-color: #c0c0c0;">不降反升、或者反复升降，这提示算法有问题，通常意味着需要选择更小的学习率</span>$\alpha$。</p>
<p>从数学上已经证明，只要<span style="background-color: #c0c0c0;">学习率足够小，那么梯度下降的每一步都会让代价函数变小</span>。但是，如果<span style="background-color: #c0c0c0;">学习率太小，就会导致需要迭代很多次数</span>，收敛太慢。调参时，可以去足够小的值开始，然后每次增加N倍，绘制曲线看效果。</p>
<div class="blog_h2"><span class="graybg">多项式回归</span></div>
<p>多项式回归（Polynomial Regression）允许你基于线性回归的方法来拟合（Fit）非常复杂的函数，甚至是非线性函数。</p>
<div class="blog_h3"><span class="graybg">特征选取</span></div>
<p>仍然是房价预测的例子，假设我们需要关注的两个特征是临街宽度（frontage）和纵深（depth，垂直于道路的那边长度）。应用线性回归时，假设函数长这个样子：</p>
<p>\[h_{\theta}(x)=\theta_{0}+\theta_{1} \times \text { frontage }+\theta_{2} \times \text { depth }\]</p>
<p>但是实际上，决定房子价格的可能是其面积，因此我们可以根据上面两个特征，创造出新的特征area，这样问题就变成了经典的单变量线性回归。有时候审视特征可以创建出更理想的模型。</p>
<div class="blog_h3"><span class="graybg">多项式回归</span></div>
<p>多项式回归是和特征选取紧密相关的想法。所谓多项式，是由<span style="background-color: #c0c0c0;">称为未知数的变量</span>和<span style="background-color: #c0c0c0;">称为系数的常数</span>通过<span style="background-color: #c0c0c0;">有限次加减法、乘法以及自然数幂次的乘方</span>运算得到的代数表达式，多项式是整式的一种。未知数只有一个的多项式称为<span style="background-color: #c0c0c0;">一元多项式</span>。</p>
<p>考虑下面的训练样本，它体现了平方数和房价的关系：</p>
<p><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/polynomial-regression.png"><img class="aligncenter  wp-image-30913" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/polynomial-regression.png" alt="polynomial-regression" width="300" height="144" /></a>从图像上看，明显两者<span style="background-color: #c0c0c0;">不是线性关系</span>。你可能考虑用二次模型$h(\theta)(x) = \theta_0 + \theta_1 x + \theta_2 x^2$来拟合，但是二次模型最终会下降，而房价明显是随着面积是递增的。所以另一个多项式模型，例如三次函数（Cubic Function）$h(\theta)(x) = \theta_0 + \theta_1 x + \theta_2 x^2 + \theta_3 x^3 $。</p>
<p>利用特征选取的技巧，我们很容易修改上述模型，让其可以进行线性回归：</p>
<p>\[\begin{aligned} h_{\theta}(x) &amp;=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{3} \\ &amp;=\theta_{0}+\theta_{1}(\text {size})+\theta_{2}(\text {size})^{2}+\theta_{3}(\text {size})^{3} \\ x_{1} &amp;=(\text {size}) \\ x_{2} &amp;=(\text {size})^{2} \\ x_{3} &amp;=(\text {size})^{3} \end{aligned}\]</p>
<p>也就是，将多项式中的高次部分看做是<span style="background-color: #c0c0c0;">从原始特征衍生出来的新特征</span>。现在问题已经转换为具有三个特征：面积、面积平方、面积三次方的线性回归了。</p>
<p>需要提及的一点是，这种特征抽取后，<span style="background-color: #c0c0c0;">特征缩放更加重要了</span>，因为面积和它的三次方差了很多数量级。 </p>
<p>根据图像的形状，你也可以选择$h_{\theta}(x)=\theta_{0}+\theta_{1}(s i z e)+\theta_{2} \sqrt{(\operatorname{size})}$这样的假设函数而非三次方。手工选择模型可能很困难，有一些算法可以根据给出的训练集，自动选择2次，3次或者其他函数作为模型。</p>
<div class="blog_h2"><span class="graybg">正规方程法</span></div>
<p>正规方程法（Normal Equation）能够解析式的求解线性回归，而不需要像梯度下降那样一步步的迭代。  </p>
<p>为数据集加一个额外的特征$x_0$，对应假设函数中的常数项。然后，将所有特征写成矩阵：</p>
<p>\[X=\left[\begin{array}{ccccc}{1} &amp; {2104} &amp; {5} &amp; {1} &amp; {45} \\ {1} &amp; {1416} &amp; {3} &amp; {2} &amp; {40} \\ {1} &amp; {1534} &amp; {3} &amp; {2} &amp; {30} \\ {1} &amp; {852} &amp; {2} &amp; {1} &amp; {36}\end{array}\right]\]</p>
<p>将所有目标变量写成向量：$\begin{bmatrix}460\\232\\315\\178\end{bmatrix}$。</p>
<p>然后用公式：$\theta=\left(X^{T} X\right)^{-1} X^{T} y$即可立即求出最小化的模型参数。 在Octave中，此公式对应代码<pre class="crayon-plain-tag">pinv(X' * X) *X'*y</pre>，pinv函数表示求伪逆矩阵，即使矩阵不可逆也能计算。</p>
<p>使用正规方程法，不需要特征缩放。</p>
<div class="blog_h3"><span class="graybg">优势</span></div>
<p>和梯度下降相比，正规方程法的优势是：</p>
<ol>
<li>不需要尝试和选择学习率</li>
<li>不需要进行迭代</li>
</ol>
<p>它的缺点是：</p>
<ol>
<li>特征数量极大，例如上百万，会非常慢。因为矩阵求逆的复杂度大概是$O(n^3)$。一般上万级别的特征数量就需要犹豫了</li>
</ol>
<div class="blog_h3"><span class="graybg">矩阵不可逆</span></div>
<p>绝大部分情况下不会出现不可逆的情况。</p>
<p>导致不可逆的原因可能是：</p>
<ol>
<li>存在冗余特征（线性相关），例如$x_1$、$x_2$都表示面积，只是单位不同，一个是平方英尺，一个是平方米</li>
<li>特征数量太多，例如样本数量$m$小于等于特征数量$n$。解决办法可以是删除部分特征，或者使用正则化（Regularization）</li>
</ol>
<div class="blog_h1"><span class="graybg">Logistic回归</span></div>
<div class="blog_h2"><span class="graybg">线性回归用于分类问题</span></div>
<p>对于Yes/No型分类（两个值1/0），缺陷包括：</p>
<ol>
<li>引入一个自变量很大或很小的样本，会导致预测结果严重错误</li>
<li>会出现预测值大于1或小于0的情况</li>
</ol>
<div class="blog_h2"><span class="graybg">简介</span></div>
<p>这是一个分类算法，名字中带有回归是历史原因。此算法用于目标变量是离散值1或0的情况。</p>
<p>此算法期望分类器输出0或1，对应着假设函数值的范围$0 \leq h_{\theta}(x) \leq 1$。此算法的假设函数是一个复合函数：</p>
<p>\[\begin{array}{c}{h_{\theta}(x)=g\left(\theta^{T} x\right)} \end{array}\]</p>
<p>其中：</p>
<p>\[ {g(z)=\frac{1}{1+e^{-z}}} \]</p>
<p>这个$g(z)$叫做Sigmoid函数，也叫Logistic函数。也就是说，此算法的假设函数，就是在线性回归假设函数外面套了一层Logistic函数。</p>
<p>把复合函数展开来写，假设函数即：</p>
<p>\[h_{\theta}(x)=\frac{1}{1+e^{-\theta^{\top} x}}\]</p>
<p>Logistic函数能够把值映射到0到1的范围内，它的图像如下：</p>
<p><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/sigmoid.jpg"><img class="aligncenter  wp-image-31075" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/sigmoid.jpg" alt="sigmoid" width="505" height="320" /></a></p>
<p>&nbsp;</p>
<div class="blog_h2"><span class="graybg">假设函数</span></div>
<p>上节我们了解到Logistic回归的假设函数是Sigmoid，也就是说它的值域是0-1之间。</p>
<p>那么其值的含义是什么？在Logistic回归中，假设函数的值表示$y=1$的<span style="background-color: #c0c0c0;">概率</span>。以肿瘤良恶分类的例子来说，特征$x = \begin{bmatrix}x0\\x1\end{bmatrix} = \begin{bmatrix}1\\tumorSize\end{bmatrix} $应用假设函数后的结果是$h_{\theta}(x) = 0.7$，这意味着病人有70%的概率得了恶性肿瘤。</p>
<p>用概率学的术语可以表述为：$h_{\theta}(x)=p(y=1 | x ; \theta)$ ，即对于给定的$x$，在基于${\theta}$进行参数化的情况下，$y = 1$的概率是多少。另外需要注意：</p>
<p>\[\begin{array}{l}{P(y=0 | x ; \theta)+P(y=1 | x ; \theta)=1} \\ {P(y=0 | x ; \theta)=1-P(y=1 | x ; \theta)}\end{array}\]</p>
<p>由于这是一个分类算法，因此结果只能是0或1，而不是给个概率。我们的做法是，当假设函数输出大于等于0.5的情况下，设置结果为1。</p>
<p>看一下Sigmoid的样子，我们可以知道，当自变量大于等于0时，其值大于等于0.5。也就是说，当$\theta^{\top} x \geq 0$的情况下$y = 1$。</p>
<div class="blog_h2"><span class="graybg">决策边界</span></div>
<p>所谓决策边界（Descsion Boundary），就是指划分了样本类别的那条边界。</p>
<p>对于有两个特征的训练集，如果我们应用线性的假设函数，即：$h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}\right)$，则样本分布情况可能如下（两个轴表示特征值，圆圈和红叉分别表示0和1）：</p>
<p style="text-align: center;"><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/db.png"><img class=" wp-image-31111 inlineBlock" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/db.png" alt="db" width="167" height="134" /></a><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/db2.png"><img class=" wp-image-31117 inlineBlock" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/db2.png" alt="db2" width="155" height="128" /></a></p>
<p>&nbsp;</p>
<p>我们可以画出一条粉色的直线，其左边都预测为0，右边都预测为1，该直线就是假设函数的决策边界。</p>
<p>这条直线怎么画？上节提到过，Sigmoid函数的自变量也就是内层函数的值大于等于0时预测为1。也就是 $\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2} \geq 0$的情况预测为1，如果参数取值-3、1、1时，则决策边界如上图粉色线。</p>
<p>对于更加复杂的假设函数，例如包含高阶多项式的$\begin{aligned} h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}\right.\left.+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\right) \end{aligned}$，我们会得到更加复杂的决策边界，如右上图。</p>
<p>绘制上面两个例子时，我们都是手工选择了模型参数，后续我们会介绍自动选择模型参数的方法。</p>
<p>再次强调一下，<span style="background-color: #c0c0c0;">决策边界不是训练集的属性，而是假设函数及其模型参数的属性</span>。给定模型参数，决策边界的图像就确定了。训练集的价值在于可以用来拟合模型参数。</p>
<div class="blog_h2"><span class="graybg">代价函数</span></div>
<p>我们回顾一下线性回归的代价函数：$J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \frac{1}{2}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}$，此代价函数的目标是选择适当的模型参数，让误差平方和最小。</p>
<p>我们可以改写一下上面的代价函数：$\operatorname{cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right)=\frac{1}{2}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}$。</p>
<p>上述代价函数的本质是最小二乘法，在线性回归中能够很好的工作。但是，将这种代价函数应用到Logistic回归时，我们会得到一个非凸函数。因为Logistic的假设函数是一个Sigmoid函数，它不是关于$\theta$的线性函数。将训练样本带入代价函数，你无法得到类似线性回归的抛物线，而是会得到具有多个局部最小值的复杂的非凸函数。</p>
<div class="blog_h3"><span class="graybg">Logistic回归的代价函数</span></div>
<p>我们期望的是，得到一个凸的代价函数，这样才能够利用梯度下降迭代出全局最优解。</p>
<p>我们通过极大似然法得到的，用于Logistic回归的代价函数如下：</p>
<p>\[  \operatorname{cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned}-\log \left(h_{\theta}(x)\right) &amp; \text { if } y=1 \\-\log \left(1-h_{\theta}(x)\right) &amp; \text { if } y=0 \end{aligned}\right. \]</p>
<p>对于目标变量$y$，假设函数$h_\theta(x)$的代价的计算方式取决于$y$，我们看一下该代价函数的图像。</p>
<div class="blog_h3"><span class="graybg">函数性质</span></div>
<p>对于分类为“是”（也就是$ y = 1 $）的训练样本，代价函数的图像（<span style="background-color: #c0c0c0;">纵轴为代价，横轴为假设函数的输出</span>）如下：<a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/mlogx.jpg"><img class="aligncenter  wp-image-31147" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/mlogx.jpg" alt="mlogx" width="513" height="333" /></a></p>
<p>&nbsp;</p>
<p>此高阶函数的定义域仅仅在$(0, 1)$之间，因为Sigmoid函数的值域即$(0, 1)$。</p>
<p>这个代价函数具有很好且有趣的性质：</p>
<ol>
<li>如果$ y = 1 $且预测结果为$h_\theta(x) = 1$，则代价为0</li>
<li>反之，当预测结果趋向于0时，代价变得无穷大</li>
</ol>
<p>假设你选取了一些模型参数，然后应用假设函数进行预测。带入$y = 1$的样本，却预测得到0.00001，代价就是高昂的。对于肿瘤预测的场景，相当于告诉恶性肿瘤病人你绝对没问题。</p>
<p>从另外一个角度来说，你选取不同的模型参数，也势必对应到此曲线上不同的值，我们算法的目标就是自动找出合理的模型参数，让代价值尽量小。</p>
<p>对于分类为“否”（也就是y=0）的训练样本，该代价函数有着类似的性质：预测结果趋向于1时代价变得无穷大。</p>
<p>凸分析不在本课程的讨论范围，但是可以证明我们选择的这种代价函数是一种凸函数。</p>
<div class="blog_h2"><span class="graybg">简化的代价函数和梯度下降</span></div>
<p>本节将用一个简化版本来替换上一节的代价函数，同时阐述如何利用梯度下降拟合出Logistic回归的参数。</p>
<div class="blog_h3"><span class="graybg">简化代价函数</span></div>
<p>上节的代价函数等价于：$cost\left(h_{0}(x), y\right)=-y \log (\log (x))-(1-y) \log \left(1-h_{0}(x)\right)$这种简写形式。</p>
<p>相应的平均代价：</p>
<p>\[\begin{aligned}<br />J(\theta) &amp;=\frac{1}{m} \sum_{i=1}^{m} \operatorname{cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right) \\<br />&amp;=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]<br />\end{aligned}\]</p>
<div class="blog_h3"><span class="graybg">梯度下降</span></div>
<p>对于这个代价函数，我们要做的是，尝试找到使$J(\theta)$最小的$\theta$。具体做法仍然是梯度下降：$\theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)$，也就是对所有模型参数同步的减去学习率和偏导数的乘积，直到收敛。</p>
<p>你可能会注意到，这里的算法和线性回归完全一样。但是需要注意，两者的假设函数是不同的。线性回归是$h_\theta(x)=\theta^Tx$，Logistic回归则是$h_{0}(x)=\frac{1}{1+e^{-0^{T} x}}$。</p>
<p>监控梯度下降是否收敛的方法、以及特征缩放，在这里同样适用。</p>
<div class="blog_h2"><span class="graybg">高级优化</span></div>
<p>本节介绍一些优化技巧，可以提升Logistic回归的速度，以适合大规模机器学习的场景。</p>
<p>可以用来替换梯度下降的最小化算法包括<span style="background-color: #c0c0c0;">共轭梯度法（Conjugate Gradient）、BFGS、L-BFGS</span>等。这些算法有一些共同的特点：</p>
<ol>
<li>不需要手工选择学习率，算法会有一个内部“智能”循环，来选择一个好的学习率，甚至可以每次迭代选取不同的学习率</li>
<li>收敛速度远远高于梯度下降</li>
<li>更加复杂</li>
</ol>
<p>除非你是数值计算方面的专家，不需要手工实现这些算法。</p>
<div class="blog_h2"><span class="graybg">多类别分类</span></div>
<p>本章一直讨论非黑即白的分类问题，实际上多类别分类（Multiclass Classification）也很常见，这类问题的特点是$y$的离散值超过2个。</p>
<p>多类别分类问题的解决方案是，转换为多个二元分类问题。例如从症状诊断是健康、感冒、还是流感，可以<span style="background-color: #c0c0c0;">转换为</span>是否健康、是否感冒、是否流感这三个<span style="background-color: #c0c0c0;">独立的二元分类</span>问题。</p>
<p>对于第一个二元分类，我们需要从原始训练集导出一个“伪”训练集，将健康设定为正类，感冒、流感设定为负类。对于第二、第三个二元分类，进行类似的处理。</p>
<p>在预测阶段，对于任何输入，我们需要带入三个分类器，然后选择$y$最大，也就是是正类可能性最大的分类器。</p>
<div class="blog_h1"><span class="graybg">正则化</span></div>
<div class="blog_h2"><span class="graybg">过拟合问题</span></div>
<p>当将线性回归、Logistic回归应用于某些场景下时，可能会面临过拟合（Overfitting）问题，导致算法表现很差。</p>
<p>所谓欠拟合（Underfitting）是指假设函数不能很好的你和训练数据，偏差较大。</p>
<p>所谓过拟合，也叫高方差（High Variance，在概率论和统计学中，一个随机变量的方差描述的是它的离散程度，也就是该<span style="background-color: #c0c0c0;">变量离其期望值的距离</span>），则是<span style="background-color: #c0c0c0;">假设函数太过努力的尝试通过所有的数据点，却导致它无法泛化到新的样本中的情况</span>。所谓泛化是指假设函数拟合不存在于训练集的样本的能力。</p>
<p><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/overfitting.png"><img class="aligncenter  wp-image-31295" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/overfitting.png" alt="overfitting" width="541" height="166" /></a></p>
<p>&nbsp;</p>
<p>上图是房价预测（线性回归）的三个假设函数，线性函数存在欠拟合问题，二次函数很好的拟合，而四次多项式函数则存在过拟合，它的波动曲线很明显不符合房价随着尺寸变化的实际情况。</p>
<p>过拟合往往发生在具有很多特征的情况下，学习得到的假设函数可能很好的拟合训练集，但是无法生成新的样本，也就是无法正确的进行预测。</p>
<p>对于Logistic回归，同样存在欠拟合、过拟合的问题：</p>
<p><a href="https://cdn.gmem.cc/wp-content/uploads/2019/12/overfitting-2.png"><img class="aligncenter  wp-image-31297" src="https://cdn.gmem.cc/wp-content/uploads/2019/12/overfitting-2.png" alt="overfitting-2" width="487" height="194" /></a></p>
<p>&nbsp;</p>
<p>上面是癌症预测的三个假设函数，可以看到第三个假设函数为了拟合训练样本，过分的扭曲了其决策边界。</p>
<div class="blog_h3"><span class="graybg">解决过拟合问题</span></div>
<p>在最初的房价预测的例子中，特征只有1+1个，因此可以绘制图像来发现过拟合。</p>
<p>实际应用中，特征数量会非常多，没法绘图。如果训练样本过少，而特征过多，则很难确定哪些特征和目标变量有关，也就很容易出现过拟合问题。</p>
<p>解决过拟合的思路有：</p>
<ol>
<li>减少特征数量：
<ol>
<li>手工选择哪些特征需要保留</li>
<li>建模出一种自动化的特征选取算法</li>
</ol>
</li>
<li>正则化：
<ol>
<li>保留所有特征，但是降低特征$J$的数量级，或者减小模型变量$\theta_j$的大小</li>
</ol>
</li>
</ol>
<p>减少特征数量的缺点是：你舍弃了某些和问题相关的信息。</p>
<p>正则化的优点是：在特征很多的场景下能够很好的工作，每个特征都可以对$y$的预测作出应有的贡献。</p>
<div class="blog_h2"><span class="graybg">代价函数</span></div>
<p>&nbsp;</p>
<div class="blog_h1"><span class="graybg">参考</span></div>
<ol>
<li><a href="https://www.zhihu.com/question/37031188/answer/411760828">最小二乘法的本质是什么？</a></li>
</ol>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/machine-learning-notes">吴恩达机器学习笔记</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/machine-learning-notes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
