【深度学习系列】迁移学习Transfer Learning
在前面的文章中,我们通常是拿到一个任务,譬如图像分类、识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性、时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型,所以这个时候迁移学习就派上用场了。 什么是迁移学习? 迁移学习通俗来讲,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的相似性,用成语来说就是举一反三。由于直接对目标域从头开始学习成本太高,我们故而转向运用已有的相关知识来辅助尽快地学习新知识。比如,已经会下中国象棋,就可以类比着来学习国际象棋;已经会编写Java程序,就可以类比着来学习C#;已经学会英语,就可以类比着来学习法语;等等。世间万事万物皆有共性,如何合理地找寻它们之间的相似性,进而利用这个桥梁来帮助学习新知识,是迁移学习的核心问题。 为什么需要迁移学习? 满足深度学习训练数据量的数据太少。对于一个机器学习的任务,譬如分类,如果数据量过小,我们是否一定要上深度学习呢?其实不必然。如果在实际的生产过程中,能够用规则就能得到好的效果的就用规则,能够用简单的模型就用简单的模型,我们常听到的“奥卡姆剃刀”其实就是这个意思,减少模型的复杂度,能够从某种程度上避免过拟合的情况。那么对于小量数据集,没有必要一定需要用深度学习的方法来做。同样,如果要对一个新任务分类,或者识别,搜集不了大量的正负样本,怎么训练呢?