二、如何实现迁移学习 : 深度学习 + 迁移学习
今天我讲的是如何实现迁移学习中的一个方面。从单层次来看一个东西,把一个领域里的模型和知识通过层次分解,就好比杭州有雷锋塔,我们可以从一个古典的建筑发展到像雷锋塔这样有层次的建筑,一层一层分析,深度学习恰恰为我们提供了分层和层次。
下面我就仔细地描述一下。深度学习如果是从左到右、从输入到输出的变化过程,中间是有很多非线性的转化,我们可以忽略不计。但是这些层次我们要迁移到新的领域,知识的迁移就相当于参数的迁移,这些参数就是权重。
这里我们看知识到底有多少可以从蓝色到橘色的、从源领域到目标领域,产生这样的迁移。我们可以看到,中间层有很多层参数可以共享;另外层次越高,可能它关心的高层的概念离得越远。我们关心的是领域之间的距离,能否把领域之间的距离刻画出来,在深度学习的初创期,有很多启发式的做法,其实很多概念是和迁移学习不谋而合的。
下面看看这样一种分层的研究对迁移学习到底产生了什么样的作用?我的学生魏颖就把最近的迁移学习和深度学习共同的工作画了表,这里面的名词像CNN、DDC都是最近发表的文章里面的系统名。横轴是年代,从2011年到最近,纵轴是准确率。左边是我的一些学生做的工作,把迁移学习在不同领域里的子空间,它们共享的知识找到,但是没有用到深度学习的概念,大概是2010年、2011年做的工作,叫TCA。
右边上面角是DAN,是深度学习加上迁移学习。我们看到深度学习加上迁移学习准确率大大提高,这不仅仅对理论有帮助,对工程的效率也是有帮助的。这里用一个距离的表述,使用MMD发现两个领域两个数据集之间的距离,这个距离是在网络的上层,从左到右,从下到上,更重要的是发现并且尽量减少这样的距离。
大家可以看到固定住,从一个领域迁移到另外一个领域,在下层比较容易迁移,在上层我们就关心领域之间的距离。
也有人把这个工作系统地进行了比较,我们可以看到代表迁移能力的红色是逐层下降的,从左到右逐层加深,如果是以深度学习的模型,下层在图像上比较容易迁移,在上层就不容易。我们在当中也可以做各种各样的演算和变化,比如可以让迁移过来的参数,让它在之后的领域里再得到重新训练,这样就会得到上面这条线。这条线放得越宽迁移能力就会变得越强,如果两个领域之间相差太大了,那么这个迁移是没办法进行的,就像下面这条蓝线直线下降,这个能力就不行。
关于模型迁移,我们关心两点。一是不同模型里面的一个层次,它的迁移量化。二是两个领域的距离有没有一个很好的衡量,这也为我们的研究提供了一个很好的指引方向,像这里几条线就是更进一步地说明我刚才表明的观点,第一个是细微的调参,就是目标领域帮助我们继续调参是有帮助的。
另外,从上层到下层是通用到个体的一种演化,大家看这些曲线是下降的。此外,我们关心两个领域之间的距离。
下面我们就可以利用这个观点,对于不同的知识迁移的场景进行总结。
●第一个是说我们在两个领域完全都没有标注的,目标和源数据都没有标注,这时就可以利用刚才的知识把下层固定住,直接迁移。在比较靠上层就可以放开,利用的方法是可以减少两个领域之间的距离,这个距离虽然没有标注,但我们还是可以把它衡量出来的,就像用刚才MMD的方法。
●还有一个方法就是用一个Loss描述,这也有所不同,比如两个领域之间的直接衡量。还有我们同时做两件事,第一件事是利用两个领域之间的距离,要把这个距离尽量减少;同时让每个领域能更好地表达它自己。