关于深度学习中迁移学习(Transfer learning)技巧的一些个人理解

迁移学习简介

迁移学习是深度学习中的一个技巧,是通过使用某种方式调用已经在某个数据集A上预训练过的模型并在新的数据集B上进行训练的学习方法,通常数据集A和数据集B具有相关性,比如猫狗分类和虎熊分类,由于进行过预训练,模型的特征提取模块对图像的某些细节已经具有一定的提取能力,所以再训练时,可以减少学习周期之类的超参数,降低计算资源并且兼顾了很好的效果。总的来说,迁移学习有三个方法:
完全冻结特征提取层(即学习率为零,参数不更新),只训练替换过的分类层(通常是全连接层)
特征提取层次和分类层都训练,但是各自的学习率不同,分类层的学习率要比特征提取层大一些,理由是特征提取层已经预先训练过,不需要做太大更新,反而分类层是随机初始化的,所以需要更大的学习率
特征提取层次和分类层都训练,各自的学习率相同。

还有一些对上列进行结合的方法,比如先①后③或先①后②之类的,但总的来说可以归结成以上三种。

由于我大学课题组的项目研究用到了迁移学习,所以我对此做了些实验,分别测试了以上三种方法,得出的结果是方法③的效果最好,以下是我对结果做的一些分析。

————————————

数学分析

以SGD优化算法为例,来讨论方法③对于其他方法的优势(为了简洁,忽略动量因子并假设batch size=1),SGD的数学表达式如下:
在这里插入图片描述
其中,θ是待更新的参数,η是学习率,t是时间步长,Loss是模型的损失函数(对于分类问题通常是交叉熵,对于回归通常是MSE),现在我们用θ_features代表特征提取层的参数,θ_classifier代表分类层的参数,则可以分别写出两个层的更新方程:
在这里插入图片描述

在这里插入图片描述
则对于整个模型而言,其参数的更新方向是两个层参数更新方向的线性叠加(向量加法),如下图所示:
在这里插入图片描述
加入两个层的学习率不同,即η1≠η2,那么可以等效看成Gradient(θ_features)≠Gradient(θ_classifier),从而造成Gradient(θ_model)的方向并不是梯度的方向,而是变成了某个方向导数,从而模型不会朝着最小点(不管是局部还是全局)收敛,而是会偏移到另一个方向,避开了最小点,我认为这是方法①和方法②不如方法③的原因所在。

总结

我认为可以把迁移学习理解成一种权重初始化的技巧(比如著名的He,或LSUV),因为本质上迁移学习并没有改变模型的结构,只是将原本随机生成的权重替换成了在某个数据集上预训练过的权重,这样一来,使用方法③感觉会变得更加合理,因为同样是权重初始化,当我们使用He或者Xavier时,我们并没有为不同的层设置各自的学习率,而是统一使用相同的学习率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值