DL8 - 迁移、多任务、端到端


title: DL8 - 迁移学习、多任务学习、端到端深度学习
date:
categories: deeplearning
tags: deeplearning

Welcome to MyBlog! This article was writed to take note my study of Machine Learning on Cousera.


1. 迁移学习

1.1 什么是迁移学习

是有时你可以把在一个任务中神经网络 学习到的东西,应用到另一个任务中去。 比如,你可以让神经网络 学习去识别物体,比如猫,然后用学习到的 (一部分)知识 来帮助你更好地识别X射线的结果。 这就是所谓的迁移学习。

例如放射扫描结果的诊断过程 即真实地读取X光扫描图像 你可以做的就是,取出这个神经网络的最后一层 并移除掉这一层以及其相关的权重 然后为最后一层神经网络创建一个新的随机初始化的权重 使用新建的这个输出层来进行放射结果的诊断 所以,具体来说,在训练模型的第一阶段, 当你在做图像识别的任务时, 你训练了所有常用的神经网络的参数,所有权值 所有层,然后这个模型 现在能够做出图像识别的预测。 训练得出了这样一个神经网络之后, 要实现迁移学习,你现在需要把数据集X和Y 设定为放射影像。 现在的Y是你想要预测的诊断结果, 你要做的是初始化最后一层的权值 我们叫这个为WL 和PL。 然后现在,重新在新的数据集上训练这个神经网络, 就是新的放射数据集上。

你有几种方法来重新训练这个放射数据的神经网络。 如果你只有一个小的放射数据集, 你可以只重新训练最后一层的权值,就是WL 和PL,同时保留其它所有参数。 如果你有足够的数据, 你也可以重新训练神经网络的其余所有层。 我们的经验就是如果你有一个小规模的数据集, 那么就去重新训练最后一层和输出层的神经网络, 或者你也可以训练最后一到两层的神经网络。 但是如果你有大量的数据, 你或许可以对这个神经网络的所有参数都进行重新训练。 要是你对神经网络的所有参数进行重新训练, 那么这样训练的初始化阶段 有时候被我们叫做预训练(pre-training) 原因是,你在是使用图像识别的数据 来预初始化(pre-initialize)或者说预训练神经网络的权重。 然后如果你在之后对所有的权重进行更新, 那么在放射扫描的数据上的训练有时候被我们叫做微调(fine tuning) 所以有时候你会在深度学习领域听到预训练(pre-training)和微调(fine tuning)这些词, 上面我所说的就是他们在迁移学习中 表达的真正含义。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sosBCgec-1610776152357)(https://i.loli.net/2019/09/09/Iuohf9DQGxSL4PO.png)]

一个迁移学习不适用的例子是, (上面讲到的)数据规模被颠倒过来的时候。

1.2 迁移学习什么时候适用
  • 如果你尝试 从某个任务A中学习到的信息迁移到某个任务B中, 那么当任务A和任务B在有相同的输入时,迁移学习才能适用。

  • 必须在任务A比任务B有更多的数据时,迁移学习才适用。 所有条件都是在想要把任务B做好的前提下 因为在任务B中的数据比在任务A中更加地有价值, 通常你需要为任务A准备更多的数据,因为 在任务A中的样本比任务B中的样本价值更低。

  • 迁移学习更加适用的场景 是当你认为,任务A中的低层次特征会帮助任务B达成目标。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0z6rUfI-1610776152359)(https://i.loli.net/2019/09/09/pGYs6W9uzi2O5XC.png)]

2. 多任务学习

2.1 什么是多任务学习
在多任务学习中,你(多个任务)一起开始 尝试让一个神经网络同时做几件事 
然后,每个任务将会帮助完成其他任务。 我们来看个例子让我们来看一个例子

你可以有一个神经网络以x作为输入和 输出为四维的y。 请注意这里的输出,我已经绘制了四节点。 第一个节点,我们试图检测是否有行人 在这张图片中 第二个输出会检测到是否有辆车 还会检测到是否有个停车标志和红绿灯

所以这里的y^是四维的。为了训练这个神经网络,你需要定义 这个神经网络的损失函数 预测输出的y^(i)是4x1维的。 损失是整个训练集的平均损失 为1除以m,乘以从i=1到m的总和 j从1到4各自预测的损失

它只是将4个部分行人、车、停车标志 红绿灯进行相加 这里的L是普通的逻辑斯蒂损失函数。

把这写下来 所以就是 yj(i)logŷj(i)+(1-yj(i))log(1-ŷj(i))

和softmax回归区别是,不像softmax 回归,它将单个标签分配给单个示例。 这一个图像可以有多个标签。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M6ynVWE0-1610776152360)(https://i.loli.net/2019/09/09/EoCB1hFp3YaOxVA.png)]

2.2 什么时候适用多任务学习

1 你要训练一系列的任务可以 共享一些低层次的特征 自动驾驶的例子中,在识别交通灯 汽车和行人时,都有相似的特征 这可以帮你识别停车标志,因为他们都是道路特征

2 其次——这不是硬性的规则,所以不总是存在的—— 但我看到很多成功的多任务学习,他们 每个单项任务的数据量非常相似。

如果神经网络不够大,多任务学习 与单项训练相比会损害准确率。 但如果你训练足够大的神经网络,那多任务学习 应该不会或很少影响性能。 与你分别单独训练不同任务相比, 它实际上能够提高性能。 这就是多任务学习。 实际上多任务学习要比迁移学习用得少得多。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5jFgKs88-1610776152361)(https://i.loli.net/2019/09/10/AvbUWpqhQwZiCjV.png)]

3. “端到端”的机器学习

什么是“端到端“的深度学习呢? 简单地说,我们有一些数据处理系统 或者是由多个阶段组成的学习系统 端到端的深度学习做的 就是它可以捕获所有的阶段 并且,通常可以将其替代为单个神经网络 也就是说运行速度更快

所以,如果端到端深度学习可行, 可以非常有效和简化系统,且 不用建立很多手工设计的单个组件。 但是它不是万能的, 它并不总是有效。

3.2 端到端的优缺点

优点1: 端到端学习真正地让数据发挥主导作用 所以如果你有足够的(X, Y)的数据 那么不论那个能最好地将X映射到Y的函数是什么样子 只要你有足够大的神经网络 顺利的话,神经网络都能拟合出来 通过单纯的使用机器学习方法 你的神经网络能够更好从输入的X->Y中 学习到数据内在的统计学特性 而不是被迫去反映人的先见

优点2:所需的人类动手设计的组件变的更少了 所以这可以简化你的设计工作流程 意味着你不需要话大量的时间去动手设计特征 手工设计这些中间表示形式

缺点1:第一,端到端学习需要大量的数据 所以为了使用机器学习直接得出X到Y的映射 你或许需要大量的(X,Y)数据

缺点2: 它排除了一些具有潜在用途的手工设计组件 所以机器学习研究人员往往会轻视手工设计的组件 但是如果你没有足够的数据 那么你的学习算法就不能够洞悉你数据中的规律 如果你的训练集很小 所以手工设计的组件的确是一条可行之路 去将人工知识融入到算法中 而且这并不总是个坏主意 我认为学习算法有两个主要的知识来源 一个是数据,另一个是你手工设计的东西 这些东西可以是算法中的组件,或者是特征,或者是其他的东西 所以如果你有很多很多的数据 手工设计就没那么重要了,但是如果你没有那么多的数据 那么有一个精心手工设计的系统实际上可以让人们向 算法中注入人类关于这个问题的知识

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQrS5894-1610776152362)(https://i.loli.net/2019/09/10/qfM29lj1mAUpPaQ.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值