迁移学习

今天看了cs231的迁移学习 http://cs231n.github.io/transfer-learning/

  1. 直接拿fc前的特征,再用svm 或者逻辑回归分类,或者直接计算特征距离
  2. fine-tune, 继承某个网络的某些层,对那些层的 权重,可以前几层的权重固定,也可以全部 用向后传播继续训练,微调权重 (比如imagenet 里面有很多不同品种的狗,可能前几层识别的是更通用的(几何形状,颜色),后几层是 学习不同品种的狗之间的差别)
  3. 用pretrained-model: 训练imagenet 要两到三周,用 别人训练好的就很方便啦

when and how to fine-tune?

  1. 新数据集小,和原数据集类似,因为数据集小,不建议fine-tune, 防止过拟合,建议直接那fc前的特征,训练一个线性分类器
  2. 新数据集大,和原数据集类似,可以直接fine-tune
  3. 新数据集小,和原数据集不一样,因为不一样,可以只取网络的 前几层,然后用svm训练分类器
  4. 新数据集大, 和原数据不太一样,可以重新训练,但是用原来的权重作为权重

tips

  1. fine-tune的话,conv/pooling层, 只要和stride 整除,是可以任意改变输入图像大小的。fc层可以转变为conv层,比如Alexnet, fc层前面的维度是 6x6x512 , fc 层等价于 【conv 6x6 ]
  2. 学习率 从一个fine-tune的训练,相比从头开始(weight随机初始化),学习率要设得smaller,因为我们假设这些权重是好的,我们不想对这些权重有过大的修改

论文How transferable are features in deep neural networks?

  1. 文中做了实验,把imagenet的1000类,随机分成500类,A,B,
    然后进行不同层的fine-tune( 固定或者 仅作为初始化)
    迁移学习_第1张图片

蓝色圆圈,在n=3,4,5 出现精度下降,说明这几层要和前面的一起训练,说明与前面几层的关联性比较大

蓝+的表现很合理

红色方块的,说明前2层还是很general的,后面的下降可以解释为两个原因
- co-adaptation 需要一起训练
- the drop from features that are less and less general

红色方块+ ,说明效果最好,其实也说明这两个A,B 是类似的任务,相当于用更多数据去训练了

你可能感兴趣的:(深度学习)