文章目录
写在前面
本系列博客为斯坦福大学 Stanford CS330: Multi-Task and Meta-Learning 2019 的学习笔记。博客中出现的图片均为课程演示文档的截图。笔记为课程的内容整理,主要是为了方便自己理解和回顾,若有纰漏和错误,烦请指出,谢谢 ~ 。希望对你有帮助。如需转载,请注明出处。
CS330课程传送门
如果你也好奇什么元学习,好奇为什么要学习元学习,可以先搂一眼这篇元学习课程介绍
多任务学习:
- 模型 & 训练:
模型的类型、基础架构、多任务学习的训练过程 - 挑战:
处理多任务学习问题中可能遇到的挑战 - 真实世界多任务学习的案例研究
元学习:
- 问题陈述(problem formulation)
- 元学习算法的通用基本框架(general recipe)
- 黑盒适应方法(Black-box adaptation approaches)
多任务学习基础
符号说明(notation)
我们用
来描述网络的参数,
是网络的输入,
是网络的输出。即可以把该网络表示成:
对于单任务有监督学习问题来说,数据集
,目标为
。如用典型的损失函数,负对数似然函数(NLL损失函数):
通常我们会用反向传播来优化网络中的参数,运行诸如SGD,Adam等深度学习优化算法。
任务的定义
在上一篇就提到了这个定义,这节对“task”这个概念做一个更正式的定义
- : 输入 的概率分布
- : 在给定输入下,labels的概率分布
- : 损失函数
这两个概率就相当于取样分布(data generating distribution)。在训练中,我们通常会设置两个数据集 和 。我们会假设这两个集合的分布都等于取样分布 。
所以不同的任务就可能对应于不同概率分布的输入,给定输入下不同的标记分布和不同的损失函数。一般我们会将 来用作为 的简写。
常见任务举例
多任务分类问题(Multi-task classification)
在所有的任务中, 是相同的。如不同文字的手写识别,个人垃圾邮件过滤器。在这些情况中,损失函数是相同的,但是每个人收到的邮件种类是不一样的,即 不同。甚至对于同样的输入邮件,对于不同的人也可能是不同的标签。所以 也可能是不同的。
多标签学习问题(Multi-label learning)
是不同任务中是相同的。如输入同一张照片,任务一可能是需要判断照片中人物是否戴了帽子,任务二可能是判断人物的发色(CelebA attribute recognition)。或是其他例如场景识别等,在同样的输入条件下, 我们需要得到输入的深度,表面法线等等属性。
损失函数不同的情况
任务分别处在连续空间和离散空间
我们对不同task的重视程度不同,所以不同的task损失函数的权重可能不同。
基础结构
如果我们希望在神经网络中解决不同的任务,那我们肯定需要在网络中添加机制,告诉网络该做什么。即所谓的条件(condition)。
所以在此处,我们用
来表示任务描述符(task descriptor),将其添加到网络中以起到条件的作用。所以我们函数模型也就变为:
那我们该如何实现任务描述符呢?最简单的一种做法就是将其设置为任务状态索引(task index)的独热编码(one-hot encoding)。(e.g. 一个简单的告诉你这是哪个任务的向量。)描述符中也可以包含一些关于任务的元数据(meta-data)。如:
- 个性化:用户标签/属性
- 任务的语言描述
- 任务的正式规范
此时我们的目标函数也需要改写为:
此时我们已经有基本的模型和目标,那么在我们面前就有两个亟待解决的问题:
- 于模型来说,我们该如何设置 (Conditioning on the task)
- 于算法来说,我们该如何优化目标(Optimizing the objective)
Conditioning on the task
假定我们将 作为任务状态索引,其中包括了我们对该任务的所有已知信息。那问题来了:我们该如何添加条件使得构建出来的模型中在不同任务间分享的信息足够少?即,把问题推向极端,我们该如何构建一个在不同任务间尽可能少分享信息的神经网络?这个问题的答案其实也就是第一种,最朴素的conditioning方式:
选择一:分离每个任务的网络
答:各玩各的。对每一个任务都设置一个神经网络模型。在最后输出时,将
作为判断依据,再对每一个网络的输出施加影响(个人理解类似门控),最后即可得到总输出。在这种情况下,不同任务间没有共享的参数。
选择二:共享几乎所有的网络
此时我们来考虑另一个极端,如果直接把 插入到神经网络的某一层的输入或输出之后,然后正常训练网络。在这种情况下,除了插入点之后部分的参数没有被共享,其他的参数都会被所有的任务所共享。
我们还可以从参数的角度对多任务学习问题做一个解释:将
分为共享的参数
和任务特定的参数
,目标即为:
选择如何添加 的限制条件就相当于选择如何、在哪开始共享参数。
选择N:其他常见的conditioning方式
1. 基于连接的限制 (Concatenation-based conditioning)
2. 加法形式的限制 (Additive conditioning)
这两种方式虽然看起来不同,但其实最后结果是一样的。为什么呢?
答:传送门
3. 多输入结构(Multi-head architecture)
4. 乘法形式(Multiplicative conditioning)
为什么乘法形式的限制比较有优势呢?
- 模型更有表达性
- 其实可以看做是缓和版的方法一(recall: multiplicative gating)
5. more
但比较不好的是,这些结构都比较强依赖于特定问题,且通常都是由问题的相关知识启发得出的。所以模型的构建并不系统,它更像是艺术品。
Optimizing the objective
Tips:
- 不同于传统的有监督学习,在第一步和第二步中,我们会采样两次(对任务采样,对数据采样)。
- 同时前两步是为了确保每一个任务都可以在不同的数据量下被均匀取样。如果一个task较另一个task有更多的数据,这可以帮我们确保我们是用同样的比例对两者进行取样。
- 对于回归问题,确保所有任务的输出都在同一个数量级。
挑战
Negative transfer
出现这个情况的通常表现就是:有时独立训练的网络结果反而更好。
原因如下:
- 优化挑战(optimization challenges)
- 由任务之间的干扰导致(cross-task interference)
- 由不同任务的学习速度不同导致
- 受限于模型的表达性
通常情况下,多任务学习网络对应于单任务网络要大得多。如果模型不够大的话,很容易欠拟合。
那这种情况下应该怎么办呢?显然,少分享就可以缓解这个问题,但是除了二元的解决这个问题,我们还可以通过软参数分享(soft parameter sharing)来解决。
这样做,可以使得参数之间的相似性增加,从而减小因为参数之间差距较大所带来的影响。同时相较于直接copy任务间的参数,这样方式则更为缓和。
优点:
- 使得参数间的共享有更多的流动性(fluid degree)
- 需要更多设计/超参来控制(yet another set of design decisions\hyperparameters)
overfitting
出现这个情况的原因可能就是没有分享足够的信息。
多任务学习,某种程度上也可以理解为正则化。
案例学习
介绍
Recommending What video to Watch Next: A Multitask Ranking System
这是谷歌的一篇关于youtube视频推荐的文章。文章中将这个视频推荐问题总结为一个多任务学习问题。
conflicting objectives:
- 用户可能会评更高分的视频
- 用户可能会分享的视频
- 用户可能会看的视频
同时论文也关注了反馈(feedback)导致的隐式偏差:即用户观看的视频可能并不是因为他爱看,只是因为系统推荐了这个。
本文主要关注ranking过程,不考虑收集candidate video的过程
文章的最终目标主要评估了两大类:
- 参与度
- 满意度
每一类都对对应了一系列参数,最后通过手动调参的方式合在一起。
架构
多任务学习就到此为止啦~
下一节会接着介绍什么是元学习