1.迁移学习
1.1.概念
神经网络经过任务A的学习,并将部分学习到的知识迁移到任务B中,从而使任务B的学习得到提升。
1.2.如何进行迁移学习
假设已经训练好一个图像识别的神经网络,这个神经网络的训练数据集是各种各样的图片,比如汽车、动物、花草等,我称之为任务A。现在有任务B,对医院放射科的图片进行识别,就需要把任务A中学习到的网络结构迁移到任务B中,网络结构如下图所示:
如果任务B的数据量较少,可以将网络的最后一层删去,然后重新初始化最后一层的权重(也可以调整最后两层),然后进行训练。如果任务B的数据量较多,也可以对网络整体进行训练,由于网络之前在任务A中已经训练成一个能图像识别的网络了(这个过程也叫预训练),因此在任务B中网络的训练需要再更新参数(这个过程也叫微调)。网络已经在先前任务累计了图像识别的基础,因此在现在的任务就能学习的更快,也需要更少的数据。
1.3.迁移学习的使用场景
1.任务A和任务B的输入都是x。比如任务A和任务B的输入都是图像或音频或文字。
2.任务A的数据量比任务B更多。因为任务B中的数据更贴近其工作场景,也就是说任务B中单个数据的价值比任务A中单个数据的价值大。
3.任务A的低层次特征可以帮到任务B。比如想要学习跑步,就需要先学会走,而任务A的作用就是学走路,可以帮助到任务B学跑步。在具体的图像识别就是任务A已经学习到一些图片的结构特征,比如色块、分辨率、边缘特征等,任务B也是图片,因此这些低层次的特征可以帮助到任务B。
但是注意,如果从数据量少的任务中迁移到数据量多的任务中,可能效果就不是那么好。
2.多任务学习
2.1.概念
神经网络同时学习多个任务,每个任务的学习又能帮助到其他任务,即网络的学习是并行的。
2.2.如何进行多任务学习
假设需要进行无人驾驶汽车模型的训练,对于一个图片,需要同时识别出图片中的汽车、行人、告示牌、交通信号灯,如果不进行多任务学习,就需要训练4个网络,而多任务学习只需要训练1个网络就可以完成4个任务。如下如所示,对于输入的标签,有m个,每个样本的标签为4*1的列向量,这4个位置分别就是4个任务对应识别标签。
网络的损失函数为:
其中对j求和就是对输出的标签那4个分量(汽车、行人、告示牌、交通信号灯)求和,对i求和就是对所有的样本输出求和。
上图所示的就是网络的结构,注意最后一层是4个神经元,每个神经元对应一个任务,同时输出4个任务的结果,因此才被称为多任务学习。实际上,对于输入的标签如果某个y列向量的4个位置有一些不清楚或无效数据,网络也可以运行的很好,因为在计算损失的时候,对于这些无效位置的数据,不计入损失。
2.3.多任务学习的使用场景
1.多个任务可以共用低层次特征。比如无人驾驶汽车的识别,道路上交通灯、告示牌,这都是汽车出现的场景中常见的存在,并且经常同时出现。
2.多个任务的数据量接近(不一定准确)。多任务之间通常具有一定程度的相似性,因此数据之间也可以提供一定的帮助,比如某个任务只有1000个样本,需要进行100个任务,但如果只专注于第100个任务的学习,那么网络只有1000个样本,利用上其余99个任务的数据,在多任务数据量接近的情况下,就多了99000个样本,对网络的性能就有大幅提升。但是如果任务的数据量参差不齐或者差别较大,可能就出现总数据量较少或某个任务表现不良的情况。就好比多条流水线组装汽车,只有每条流水线的速度相当,整体效率才能又快又没有冗余。
3.网络的规模大。多任务学习通常会提升网络的性能,但是如果出现多任务学习降低了网络的性能,只有一种可能就是网络的规模很小。
3.end-to-end learning(端对端学习)
3.1.什么是端对端的深度学习
对于一些数据处理系统或学习系统,可能需要多个阶段,端对端的深度学习就是使用一个神经网络来完成所有阶段的学习。
3.2.端对端学习的优缺点
优点:
1.只让数据说话
2.更少的手工设计组件
缺点:
1.需要大量的数据
2.可能排除了一些有用的手工设计组件
3.3.端对端学习的使用场景
一个关键的问题是:是否有足够多的数据可以直接学习x映射到y的足够复杂的函数?比如在X光判断骨龄的任务中:
处理这个问题目前较好的一种方式就是:1.将图片分割成每个骨头。2.根据不同的骨头部位,对照骨龄和长度对应表,查询年龄。相比之下,采用端对端的学习方式,就会缺少很多数据,因为根据骨相判断年龄常用于刑侦科,这种数据比较少,不足以训练出一个性能良好的网络。
而在语音识别领域,比如识别cat单词,需要经过:1.MFCC算法从音频提取一组特定的人工设计特征。2.应用机器学习算法提取音位。3.把音位串接起来组成单词。4.把词串接起来组成文本。如果较少的语音音频比如3000个小时,使用端对端的学习效果可能不好,但是一旦音频数量达到10000个小时以上,端对端的学习就开始发挥优良的作用。
总结:端对端学习通常需要较大的数据量,如果数据量较少,使用多阶段的学习方式效果更好。如果数据量很多,使用端对端学习可以简化学习步骤,一步到位。