Deep Learning Note: 3-6 从多个任务中学习

1. 迁移学习

  深度学习的一个强大之处在于,有时候可以将一个神经网络从某个任务中习得的知识应用到另一个任务上,这称为迁移学习(Transfer Learning)。例如一个网络学会了如何识别猫,可以将该网络学到的知识应用于读取 X 光片上。

  假设训练了一个用于图像识别的神经网络,如图 1 所示:

图 1

图 1

  现在想要将其学到的知识迁移到放射诊断上,即输入 X 光片,输出诊断结果。一种做法是移除原网络的输出层及其参数(图 1 中红框),然后创建一层新的网络,作为新的输出层,它的输出为诊断结果。接着对新输出层的参数进行随机初始化,使用新任务的数据集,即 X 光片的数据集作为输入,重新进行训练。如果新任务的数据集较小,可以只训练新的输出层,保持其他各层的参数不变。如果数据量足够,也可以重新训练其他各层,此时对原图像识别网络的训练就称为预训练(Pre-Training),在新的放射诊断的任务上的训练称为精调(Fine Tuning)。由此就将图像识别网络的知识迁移到了放射诊断的任务上,这样做的原因是,我们可以找到大量的数据用于训练图像识别网络,图像识别网络习得的很多低层特征,如检测边缘、曲线或是特定对象,有助于算法在放射诊断的任务上获得较好的性能。根据实际需要,也可以不仅仅替换一层输出层,而是追加更多层的网络。

  如果想要从任务 A 迁移到任务 B,需要满足:

  • 任务 A 和任务 B 具有相同的输入 x
  • 任务 A 的可用数据远远多于任务 B
  • 任务 A 的低层特征有益于任务 B 的学习

  对于上面第二条,之所以强调“远远多于”,是因为我们真正关心的是任务 B 的性能,任务 B 中单个样本的价值要高于任务 A 中的单个样本,如果任务 A 和任务 B 的样本数量差不多,那么直接使用任务 B 的样本训练模型直接解决任务 B 更有效。

  例如在前面从图像识别任务迁移到放射诊断任务的例子,两个任务的输入都是图像;我们可以很容易地收集到大量的带标签的图像用于图像识别任务,而在放射诊断任务上能收集到的 X 光片数量非常有限;图像识别和放射诊断都涉及图像处理,图像识别网络的很多知识,比如边缘检测,有助于放射诊断任务的学习。

2. 多任务学习

  迁移学习是一个连续的过程,首先在任务 A 上进行学习,然后迁移到任务 B。而多任务学习(Multi-Task Learning)则是训练一个网络来进行多个任务,每一个任务的学习都可能有助于其他任务的学习。

  举例来说,对于自动驾驶汽车,它需要能检测多种目标,比如行人、其他车辆、交通标志、信号灯等。算法的输入为汽车周边的图像,输出为图像中是否有关心的目标。此时一个样本会有对个标签,例如我们关心图像中是否有行人、其他车辆、交通标志和信号灯四种目标,则样本的标签是一个 $4 \times 1$ 的向量,其中的每一位表示样本图像中是否有对应的目标。神经网络要能够同时检测这四个目标,如图 1 所示,网络的输出层有四个节点,分别对四个目标进行检测,即 $\hat{y}\$ 是一个 $4 \times 1$ 的向量。

图 1

图 1

  此时的代价函数为:

\begin{equation}
J = \frac{1}{m} \sum_{i=1}^m \sum_{j=1}^4 L(\hat{y}_j^{(i)} – y_j^{(i)}) \tag{1}
\end{equation}

  其中 $m$ 为样本数量,$L(\hat{y}_j^{(i)} – y_j^{(i)})$ 为逻辑回归的代价函数,即:

\begin{equation}
L(\hat{y}_j^{(i)}, y_j^{(i)}) = -y_j^{(i)}\log{\hat{y}_j^{(i)}} – (1 – y_j^{(i)})\log(1 – \hat{y}_j^{(i)}) \tag{2}
\end{equation}

  优化式 (1) 的过程相当于让一个模型同时学会检测 4 种目标。注意这里与 Softmax 回归的不同之处:Softmax 回归中每个样本只能具有多种标签中的一个,而多目标学习中的每个样本可以同时具有多个标签。

  另一种做法是训练多个不同的网络,分别用于不同的任务,但如果多个任务具有一些共同的低层特征,则训练一个网络用于执行多个任务会获得更好的效果。

  值得一提的是,如果数据没有被完全标记,也可以使用多目标学习,此时只需把式 (1) 中通过 $\sum_{j=1}^4$ 计算全部标签的错误替换为只计算标记了标签的错误即可。例如某张图片只标记了有行人、没有其他车辆,而没有标记是否有交通标志或信号灯,算法预测为没有行人、没有其他车辆、有交通标志、没有信号灯,则只计入预测行人的错误;对于该样本,算法在交通标志和信号灯上预测什么都无所谓。

  多目标学习的使用场景为:

  • 所训练的多个任务具有共同的低层特征,能互相从学习中获益。
  • (通常)每个任务上能够使用的数据量很少。
  • 能够训练一个足够大的模型,以在各个任务上都具有很好的性能。

  通过多目标学习,只需训练一个网络,就可以完成多个任务。如果网络足够大,多目标学习的性能通常要优于为每个任务训练单独的网络。迁移学习和多目标学习都是非常有用的工具,但在实践中,迁移学习的使用频率要高于多目标学习,多目标学习更多地用于计算机视觉领域,如对象检测等任务。