[DeeplearningAI 笔记]第三章 2.7-2.8 多任务学习/迁移学习

2020-08-14 11:50:41 浏览数 (1)

2.7 迁移学习 Transfer Learninig

  • 神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中.例如:你已经训练好一个能够识别猫的系统,你利用这些知识或者这些知识的部分去完成更好的 阅读 X 射线扫描图.
  • 这就是所谓的-- 迁移学习

how-to

  • 假设你已经训练好一个图像识别神经网络,首先用一个神经网络,在(x,y)对上训练,其中 x 是图像,y 是对象的标签.
  • 现在把这个神经网络拿出来,将其适应(迁移)到不同任务中所学到的知识,比如放射科诊断.
    1. 把神经网络最后的输出层删除
    2. 进入到最后一层并将其权重删除
    3. 为最后一层重新赋予随机权重
    4. 然后将神经网络放在放射诊断数据上训练

Tips

  • 如果进行迁移学习的数据量比较小,只需要重新训练最后一两层权重.但是如果进行迁移学习的数据量较大,建议重新训练整个神经网络.
  • 预训练(pre-training):如果重新训练所有神经网络层,那么在图像识别数据的初期训练阶段,我们称这个过程为:预训练
  • 微调(fine tuning):在预训练后的模型上放入迁移学习的数据进行训练,这个过程称为:微调

why

  • 迁移学习的好处在于,以放射科图像检测的迁移学习为例 在预训练的过程中,我们学到了一些图像识别中低层次特征,很多结构信息,图像形状的信息,点,线,面的特征.-- 边缘检测(detecting edges),曲线检测(的 tecting curves),阳性对象检测(detecting positive objects) 应用或迁移到放射科诊断上来.从非常大的图像识别数据库中习得的这些能力,会有助于你的学习算法在放射科诊断做的更好.

Another Example

  • 假设你已经训练出一个语音识别系统(speech recognition system),现在 x 是音频(audio)或者音频片段输入(audio snippets),y 是听写文本(transcript). 我们要使用这个系统"迁移学习"建立一个"唤醒词"的系统.
  • 你可能需要去掉神经网络的最后一层,然后加入新的输出节点.但有时也可以不止加入一个新节点,或者甚至往你的神经网络加入几个新层.然后把唤醒词检测问题的标签"Y"喂进去训练.
  • 这取决于你的训练数据的多少,你可能只需要重新训练网络的新层,也许你需要重新训练网络中更多的层.

when Transfer learning makes sence

  • 迁移来源问题你有很多数据,但迁移目标问题你没有那么多数据.
    • 但是对于"触发字检测",也许你只有 1 小时数据,所以这数据太小,不能用来拟合很多参数.
    • 所以这种情况下,你需要预先学到很多人类声音的特征,人类语言的组成部分等等知识,可以帮你建立一个很好的唤醒字检测器(wake word detector).即使你的数据集相对较小.
    • 但是对于"放射科任务",也许你只有 100 个样本,所以你可以将图像识别预测的知识迁移到"放射科识别任务"中,即使你的放射科数据很少.
    • 例如:假如在图像识别任务中你有 100W 样本,数据量相当多,你可以学习低层次特征,可以在神经网络的前几层学到如何识别很多有用的特征.
    • 例如:在"语音识别"任务中,也许你已经有 1W 小时数据,训练过你的语言识别系统.所以你已经从这 1W 小时数据中学到了很多人类声音的特征.

summary

  1. 如果你想从任务 A 迁移一些知识到任务 B,当任务 A 和任务 B 都有相同的输入 X 时,迁移学习是有意义的.
  • 例如在第一个例子中,输入 X 都是图片;在第二个例子中 X 都是声音音频.
  1. 当任务 A 的数据比数据 B 多得多时,迁移学习意义更大.
  • 所有这些假设的前提都是,你希望提高任务 B 的性能.
  • 因为任务 B 的每个数据更有价值,对于任务 B 来说.通常任务 A 的数据量必须大得多,才有帮助.
  1. 如果你觉得任务 A 的低层次特征,可以帮助任务 B 的学习,那迁移学习更有意义一些.

2.8 多任务学习 Multi-task learning

  • 在迁移学习中,你的步骤是串行的,你从任务 A 里学到知识然后迁移到任务 B 中.在多任务学习中,你是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望这里的每个任务都能帮到其他所有任务.

Simplified autonomous driving Example

  • 假设你正在研发无人驾驶车辆,那么你的无人驾驶车可能需要同时检测不同的物体.(行人,车辆,停车标志,交通灯...)
  • 需要识别的物体假设即为上述讨论的四个,则最后一层设置 4 个神经元,一个 4 维向量,分别表示对"行人,车辆,停车标志,交通灯"的预测.
  • 其中多任务学习 Loss function 也有相应的变化.对于多任务学习:
Loss(hat{y}^{(i)}_{(4, 1)})=frac{1}{m}sum_{i=1}^{m}sum_{j=1}^{4}l(hat{y}^{(i)}_{j},y^{(i)}_{j})

对于此处的 loss 函数 l(交叉熵函数)的具体计算方式,详情请见:

交叉熵损失函数详解[2] >神经网络基础[3]

  • 其中与之前例子最大的不同在于需要对检测的多任务目标进行分别比较并相加
sum_{j=1}^{4}

.

  • 这与 softmax 回归的主要区别在于,softmax 回归将单个标签分配给单个样本,而这张图可以有很多不同的标签,所以不是说每张图都只是一张行人图片,汽车图片,停车标志图片,或者交通灯图片,多个物体可能同时出现在一张图里.
  • 你需要遍历所有的物体类型,检测那类物体有没有出现在图中.
  • 如果你训练了一个神经网络,需要最小化这个成本函数,你做的就是多任务学习

when multi-task learning makes sence

  • 你训练的一组任务可以共用低层次特征.例如对于无人驾驶车的例子,识别的物体都是道路上的标志.
  • 每个任务中学习的数据量很相近.
    • 假如你要识别 100 个任务,每个任务大概有 1000 个样本,所以如果你专注加强单个任务的性能,你只有 1000 个样本去训练这个任务,这是 100 项任务之一,但是通过其他 99 项任务的训练, 这些加起来一共有 99000 个样本,这可能大幅提升算法性能,可以提供很多知识来增强这个任务的性能
  • 如果你训练一个 足够大的神经网络,多任务神经网络和多个不同的单任务神经网络效果基本一致(即单独训练识别行人,单独识别交通标识牌...的神经网络).
  • 一般来说, 迁移学习比多任务学习运用更多 ,但是在 计算机视觉-物体检测 中有大量应用到多任务学习,并且比分别训练不同的神经网络检测物体效果更好.

参考资料

[1]吴恩达老师课程原地址: https://mooc.study.163.com/smartSpec/detail/1001319001.htm

[2]交叉熵损失函数详解: http://blog.csdn.net/u013555719/article/details/77585206

[3]神经网络基础: http://blog.csdn.net/u013555719/article/details/78228027

0 人点赞