
<a id="n09-title"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-title)


# 先选一只鞋，下一只就不能随便来

王德泉 · Coding with AI · Lecture 04


<a id="n09-a15bc30962b3"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-a15bc30962b3)

N03 已经发现一条要求：左右鞋各自正常，不保证整双鞋同色。现在把这条要求变成生成程序。先选一只左鞋；如果本次选的是红左鞋，下一步就在“左鞋已经为红色”的条件下选右鞋，红右鞋成立，蓝右鞋不成立。


<a id="n09-5abc32696e58"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-5abc32696e58)

蓝右鞋没有变得不像鞋。它不合适，是因为前一步已经作出了红色选择。若先选蓝左鞋，蓝右鞋又可以组成一双合法结果。于是多样性和一致性并不矛盾：整双鞋可以有不同颜色，但每一条具体生成路径要接住自己的已有选择。


[课程图解] 不同左鞋起点允许不同的完整鞋对；每次右鞋都须接住本次已有选择。；图中标签与关系：交付：同款、同色、左右各一只 先选的左鞋 下一只 另一条合法路径 蓝左鞋 → 蓝右鞋 先前的选择，成为后续的条件
不同左鞋起点允许不同的完整鞋对；每次右鞋都须接住本次已有选择。


<a id="n09-457d653cb93b"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-457d653cb93b)

这就是自回归的核心：把完整结果拆成一串条件问题。用两个位置的写法表达，完整配对的概率等于“选中左鞋的概率”乘以“在这只左鞋条件下选中右鞋的概率”。这里没有假设左右独立，恰恰把它们的关系放进第二项。网络先给出下一只鞋的条件概率，选择规则再从中取出具体鞋；当前显示的一只鞋是一次选择，不是概率分布本身。反过来，若分别只照各自的红蓝频率抽签，即便两边频率都对，也会抽出违约组合。


<a id="n09-90c144a6bbe1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-90c144a6bbe1)

**“必须先左后右吗？”** 不必。先右后左也能组织同样的依赖；图像按哪个位置先生成，更不是在声称物体从那个角落诞生。顺序是建模与计算的选择，它决定当前步骤能利用哪些已确定信息，以及哪些信息还没有出现。


<a id="n09-7682faa01388"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-7682faa01388)

这种拆法可以用于词、像素、图块或其他表示。它提供了重复使用的预测接口，同时带来顺序成本：常规生成必须等前面的选择出现，才能在它的条件下继续。学会这种分解也不保证模型把每一项条件概率学对，早期失误仍可能改变后面的情境。


<a id="n09-a52e5ca18fb3"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-a52e5ca18fb3)

鞋例中的前缀只是一只鞋。如果前缀变成一串放入、取出的事件，下一步需要记住的就不只是最后一个词，而是这些事件共同留下的状态。


<a id="n09-states"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-states)


## 画面怎样推进


<a id="n09-b0"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-b0)

红左鞋已经选定，成为下一步的新条件。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N09.html?step=b0)


<a id="n09-b1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-b1)

蓝右鞋没有变得不像鞋，但与当前前缀不相容。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N09.html?step=b1)


<a id="n09-b2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-b2)

从蓝左鞋开始可生成另一双合法结果；前缀来源于这次实际选择。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N09.html?step=b2)


<a id="n09-materials"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-materials)


## 继续阅读与实验


<a id="n09-learning-unit-001"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-learning-unit-001)


### 相乘条件概率，怎样把鞋对关系保留下来？


<a id="n09-learning-unit-002"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-learning-unit-002)

先以一半概率选红左鞋，再令“已选红左鞋”条件下红右鞋概率为 1，红红这条完整路径的概率就是 0.5×1=0.5。蓝分支同理。不相容组合不是靠最后修图消除，而是下一项的条件分布已经接住前一步选择。若独立选右鞋，红蓝就会重新取得 0.25 概率。


<a id="n09-learning-unit-003"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-learning-unit-003)

链式法则没有要求各位置独立；它把依赖写进前缀条件。先右后左也可以定义同一分布，但有限模型的学习难度和计算顺序可能不同。自检：生成程序采到蓝左鞋，却沿红色分支选右鞋，概率表本身即使都正确，实际联合分布也已经改变。


<a id="n09-learning-unit-004"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-learning-unit-004)

[继续读：条件链与额外独立假设](https://codingai-lec04.pages.dev/lecture.html#ch02-chain-rule)


<a id="n09-chapter-reading"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-chapter-reading)


### [CLS 02 · 自回归：学习条件与产生序列](https://codingai-lec04.pages.dev/lecture.html#ch02)

按连续正文理解这条方法的训练信号、使用过程与算例；数学与实践在相关问题旁展开。

先看：第2章，从对象和问题开始


<a id="n09-lab01-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-lab01-practice)


### [LAB 01 · 自回归：联合概率、贪心与温度](https://codingai-lec04.pages.dev/course/notebooks/39071d41f84d4621ad69c6140a6dccc9.html)

先读本册保存结果，再按实现顺序核对一个算例；最后只改一个变量。

先看：先看保存结果与读图解释


<a id="n09-material-1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-material-1)


### [LAB 01 · 自回归：联合概率、贪心与温度](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/6f83a923-d155-47be-be58-680db701ff7f/notebook/39071d41f84d4621ad69c6140a6dccc9?utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_content=39071d41f84d4621ad69c6140a6dccc9&utm_term=get_notebook)

先手算每条序列的联合概率，再对照精确枚举。检查条件化与独立抽取怎样产生不同组合；这是手工模型，不是真实语言模型性能实验。

先看：固定对象：两个位置、四条序列


<a id="n09-material-2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N09.html#n09-material-2)


### [Autoregressive Models](https://mit-6s978.github.io/assets/pdfs/lec3_ar.pdf#page=10)

把两步鞋例推广到更长序列，理解顺序如何组织条件，而不假设各位置独立。

先看：第10–27页：概率链式分解

