Pretext task 可以理解为是一种为达到特定训练任务而设计的间接任务。
比如,要训练一个网络来对 ImageNet 分类,可以表达为 $f_{ heta}(x): x
ightarrow y$ ,目的是获得具有语义特征提取/推理能力的 $ heta$ 。假设有另外一个任务 (Pretext task ),可以近似获得 $ heta$。 比如, $Auto-encoder$ ($mathrm{AE}$) , 表示为: $g_{ heta}(x): x
ightarrow x$ 。为什么 $AE$ 可以近似 $ heta$ 呢? 因为 AE 要重建 $x$ 就必须学习 $x$ 中的内在关系,而这种内在关系的学习又是有利于我们学习 $ f_{ heta}(x)$ 的。这种方式也叫做预训练,为了在目标任务上获得更好的泛化能力,一般还需要进行 $fine-tuning$ 等操作。
因此,Pretex task 的好处就是简化了原任务的求解,在深度学习里就是避免了人工标记样本,实现无监督的语义提取。
Pretext任务可以进一步理解为:对目标任务有帮助的辅助任务。这种任务目前更多用于 Self-Supervised learning,即一种更加宽泛的无监督学习。以往训练深度学习需要大量的人工标注的样本,这是费时耗力的,而自监督的提出就是为了打破这种人工标注样本的限制,目的是在没有人工标注的条件下也能高效的训练网络,自监督的核心问题是如何产生伪标签(Pseudo label),而这种伪标签的产生是不涉及人工的,比如上述的 AE 的伪标签就是自身。这里举几个在视觉任务里常用的 pretext task 伪标签的产生方式:
Rotation(图片旋转)
Colorization(图片上色)
Inpainting(图片补全)
Jigsaw Puzzle/Context Prediction(关系预测/上下文预测)