对偶学习的思路和前面生成式对抗学习会非常不一样。对偶学习的提出是受到一个现象的启发:我们发现很多人工智能的任务在结构上有对偶属性。比如说在机器翻译里面,我们把中文翻译成英文,这是一个任务,但是我们同样也需要把英文翻译成中文,这是一个对偶的任务。这种原任务和对偶任务之间,他们的输入和输出正好是反着来的。在语音处理里面,语音识别是把语音转化成文字,语音合成是把文字转化成语音,也是互为对偶的两个任务。在图像理解里面,看图说话,也就是给一张图生成一句描述性的语句,它的对偶任务是给一句话生成一张图,这两个任务一个是从图像到文本,另外一个是从文本到图像。在对话系统里面,回答问题和问题生成也是互为对偶的两个问题,前者是给定问题生成答案,后者是给定答案生成问题。在搜索引擎里面,给定检索词返回相关文档和给定文档或者广告返回关键词也是互为对偶的问题:搜索引擎最主要的任务是针对用户提交的检索词匹配一些文档,返回最相关的文档;当广告商提交一个广告之后,广告平台需要给他推荐一些关健词使得他的广告在用户搜索这些词能够展现出来被用户点击。
[color=rgb(255, 255, 255) !important]
对偶学习试图把这种结构的对偶属性应用在机器学习里。其基本思想比较简单,我们以机器翻译为例子来说明。我们想把一个中文句子翻译成英文,我们可以先用一个中文到英文的翻译模型,把这个句子翻译成英文的句子,因为我们没有英文的标注,所以不知道这个英文的翻译是好还是坏以及有多好多坏。我们再利用从英文到中文的翻译模型,把这个英文的句子翻译成中文的句子,这样一来,我们就得到了一个新的中文句子。整个过程包含了正向翻译和反向翻译互为对偶的两个步骤。然后我们比较原始中文的句子和后来得到的中文句子,如果两个翻译模型都很好的话,这两个中文的句子应该比较相似,如果两个模型不好或者有一个模型不好的话,得到的两个中文句子就不相似。因此我们可以通过这种对偶过程从无标注的数据获得反馈信息,知道我们的模型工作的好还是不好,进而根据这些反馈信息来训练更新正向反向模型,从而达到从无标注数据学习的目的。