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


# 没有标准答案，谁来告诉生成器哪里要改？

王德泉 · Coding with AI · Lecture 04


<a id="n21-99e386f2a610"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N21.html#n21-99e386f2a610)

上一页把表示接回图像，留下了一个训练问题：随机起点并没有配给一张唯一正确的照片，生成器怎样知道自己该改什么？GAN 引入一个会学习的判别器。它看到参考数据与当前生成候选，学习两组之间可区分的线索；生成器则利用这个反馈，让自己的候选更难被区分。


<a id="n21-71d467c6d9fa"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N21.html#n21-71d467c6d9fa)

先看杯子的例子。参考组的杯柄接在杯身上，当前候选却有不自然的连接。判别器如果学到了这个差别，就能通过可微的计算为生成器提供改进方向。它并不是把“杯柄向左移动三毫米”写成文字指令，而是由损失对生成图及生成器参数的导数，告诉训练过程怎样调整参数。课堂杯图用来说明这项关系；参考数据与生成候选是两组的角色名称，不是在鉴定图像是否来自实拍。


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

但反馈能负责到哪里，取决于判别器看到了什么。假设任务要求白色陶瓷杯，候选却是一只很逼真的金属杯。只读图像、学习外观自然度的判别器，可能没有理由拒绝它。若参考图与生成图的边框处理不同，它还可能学会识别边框，而不是我们关心的杯柄。**要检查“符合这个条件”，就必须把相应条件与图像的关系纳入训练。外观像真的，并没有自动回答任务是否做对。**


[课程图解] 没有把本次要求与候选的对应关系纳入训练，自然度反馈不能自动保证白色陶瓷要求。；图中标签与关系：参考数据 新候选 杯沿仍需检查 学到的反馈 生成器 外观自然 但要求白色陶瓷 条件须接入评价
没有把本次要求与候选的对应关系纳入训练，自然度反馈不能自动保证白色陶瓷要求。


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

**“生成器和判别器都在改变，会不会互相追着跑？”** 会，二者通常交替训练。训练判别器时，生成样本充当当前反例，这一步只更新判别器。训练生成器时，暂时固定判别器的参数，但仍让反馈经过判别器传回生成图，再传到生成器。固定参数不等于切断这条导数路径；如果整段判别计算都不记录梯度，生成器就收不到这项反馈。交替训练有清楚的目标，但有限数据、容量和优化过程并不保证稳定收敛。


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

从整体看，训练希望改变的是生成器在各种随机起点上产生的分布，而不只是修好眼前这只杯子。理想分析中会讨论足够强的判别器和达到平衡时的关系；实际训练还需检查是否只学会少数样式、是否出现不稳定。损失下降不能单独替这些检查作答。


<a id="n21-9bffdb7b0b97"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N21.html#n21-9bffdb7b0b97)

训练结束后的通常使用路径更短：抽取随机起点，送入生成器，得到一张候选。判别器帮助训练参数，并不要求每次生成都参与逐张筛选。任务若需要额外筛选，那是使用系统又增加的一道环节。


<a id="n21-537ee8c7fa04"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N21.html#n21-537ee8c7fa04)

下一页把视野从一张移到一批：如果每张杯子都很漂亮，但六张几乎只有同一种杯形，这个生成器学到了多少可能性？


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


## 画面怎样推进


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

参考数据与候选的差别，为学习到的判别器提供训练线索；这里先比较杯柄连接。

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


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

反馈可能改善外观，但没有收到白色陶瓷条件的判别器，不能自动检查该要求。

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


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

训练后的生成器通常直接由随机起点出图；判别器并非每次使用必经的选图部件。

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


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


## 继续阅读与实验


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


## 没有给每个随机起点配真图，G怎样获得学习信号？


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

设某个生成样本在当前D处的分数为0.2，G的非饱和损失是−log(0.2)≈1.609；若分数变为0.6，损失降到约0.511。训练并不是拿这个差值直接移动杯柄，而是计算损失经D到生成图、再到G参数的导数，让同一套G参数改变未来一批输出。


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

这一步固定D参数，仍保留D对输入的导数：固定函数f(x)=2x，df/dx仍为2。轮到D学习时则只把生成图当作数值反例，不更新G。通常生成新图只运行G；D的反馈已经留在学到的参数中。


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

接着读：[G步的目标](https://codingai-lec04.pages.dev/lecture.html#ch04-g-step)与[固定参数为何仍可反传](https://codingai-lec04.pages.dev/lecture.html#ch04-freeze-gradient)。


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


### [CLS 04 · 对抗反馈与图像翻译](https://codingai-lec04.pages.dev/lecture.html#ch04)

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

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


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


### [LAB 08 · 生成器与判别器的真实反馈](https://codingai-lec04.pages.dev/course/notebooks/f16324b960a446e2aa03168c17e9fc0b.html)

固定生成起点比较训练前中后；改变 D:G 更新比，分别读近模式比例与模式覆盖。

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


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


### [LAB 03 · CycleGAN：可逆不等于语义正确](https://codingai-lec04.pages.dev/course/notebooks/caf19cffbd744fafb371912863a03e30.html)

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

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


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


### [Generative Adversarial Networks](https://mit-6s978.github.io/assets/pdfs/lec4_gan.pdf)

先认清G与D各自更新哪组参数，再追踪生成器训练时反馈经过D返回的路径。

先看：第5–14、15–29页

