迁移学习简介及用途[通俗易懂]

迁移学习简介及用途 https://mp.weixin.qq.com/s/5_EYEJUycTtpfbxM_uGwHw  ———————本文来自mishidemudong的CSDN博客  深度神经网络,相比于之前的传统机器学习方法,可以看成是一个全新的物种,这背后的原因,最明显的还是深度学习对机器算力的巨大需求,在深度学习入门最少需要知…

大家好,又见面了,我是你们的朋友全栈君。

迁移学习简介及用途

 

https://mp.weixin.qq.com/s/5_EYEJUycTtpfbxM_uGwHw

 

 

——————— 本文来自 mishidemudong 的CSDN 博客 
 

深度神经网络,相比于之前的传统机器学习方法,可以看成是一个全新的物种,这背后的原因,最明显的还是深度学习对机器算力的巨大需求,在深度学习入门最少需要知道什么?中介绍了深度学习所需的显卡资源,而当前大内存的机器不贵,而高性能,大显存的显卡就没那么便宜了。这使得使用深度学习去处理实际生活中遇到的问题,例如图像和语音的识别时,需要消耗大量的资源。而迁移可以改变这一切,显著的降低深度学习所需的硬件资源。

 

本文会先介绍迁移学习的定义,接着说说预先训练好的网络是什么,为什么有用?使用预训练的网络又有那两种方法?之后会通过MINST数字识别的例子,来展示该如何应用迁移学习。

 

让我们通过一个直观的例子来说明什么是迁移学习。假设你穿越到了古代,成为了太子,为了治理好国家,你需要知道的实在太多了。若是从头学起,肯定是来不及的。你要做的是找你的皇帝老爸,问问他正在做了什么,而他也希望能将他脑子的知识一股脑的转移到你脑中。这正是迁移学习。即将一个领域的已经成熟的知识应用到其他的场景中。

                                                迁移学习简介及用途[通俗易懂]

 

用神经网络的词语来表述,就是一层层网络中每个节点的权重从一个训练好的网络迁移到一个全新的网络里,而不是从头开始,为每特定的个任务训练一个神经网络。这样做的好处,可以从下面的例子中体现,假设你已经有了一个可以高精确度分辨猫和狗的深度神经网络,你之后想训练一个能够分别不同品种的狗的图片模型,你需要做的不是从头训练那些用来分辨直线,锐角的神经网络的前几层,而是利用训练好的网络,提取初级特征,之后只训练最后几层神经元,让其可以分辨狗的品种。

迁移学习简介及用途[通俗易懂]

 

从上述的例子引申出来,迁移学习的理念,其实有广泛的应用。人类的语言使得代际之间的迁移学习变得可能,在语言出现之前,每一代能够教给下一代的东西极其有限,而有了语言,人类的知识得以爆炸性的增长。而随着现代科学的进步,每门学科都产生了很多术语,这些术语相当于抽象层次更高的表述,所需的学习时间也会变长,这使得童年这个文化概念得以产生。迁移学习的道理应用到现实生活中,还意味着教育和娱乐的区别。教育要有阐释,有背景,有对情境复杂性的分析,追求的是宽度,而当前娱乐式的知识传授,则只追求深度,从一个有趣的案例,一路衍生出看似深刻的道理,或者停留在事实本身,将知识变成一个个孤岛而不是网络。

 

回到技术问题。迁移学习相当于让神经网络有了语言,新一代的神经网络可以站在前人的基础上更进一步,而不必重新发明轮子。使用一个由他人预先训练好,应用在其他领域的网络,可以作为我们训练模型的起点。不论是有监督学习,无监督学习还是强化学习,迁移学习的概念都有广泛的应用。

 

举图像识别中最常见的例子,训练一个神经网络。来识别不同的品种的猫,你若是从头开始训练,你需要百万级的带标注数据,海量的显卡资源。而若是使用迁移学习,你可以使用Google发布的Inception或VGG16这样成熟的物品分类的网络,只训练最后的softmax层,你只需要几千张图片,使用普通的CPU就能完成,而且模型的准确性不差。

 

使用迁徙学习时要注意,本来预训练的神经网络,要和当前的任务差距不大,不然迁徙学习的效果会很差。例如如果你要训练一个神经网络来识别肺部X光片中是否包含肿瘤,那么使用VGG16的网络就不如使用一个已训练好的判断脑部是否包含肿瘤的神经网络。后者与当前的任务有相似的场景,很多底层的神经员可以做相同的事,而用来识别日常生活中照片的网络,则难以从X光片中提取有效的特征。

 

另一种迁移学习的方法是对整个网络进行微调,假设你已训练好了识别猫品种的神经网络,你的网络能对50种猫按品种进行分类。接下来你想对网络进行升级,让其能够识别100种猫,这时你不应该只训练网络的最后一层,而应该逐层对网络中每个节点的权重进行微调。显然,只训练最后几层,是迁移学习最简单的1.0版,而对节点权重进行微调(fine turing),就是更难的2.0版,通过将其他层的权重固定,只训练一层这样的逐层训练,可以更好的完成上述任务。

 

 

另一种迁移学习的方式是借用网络的结构,即不是使用已训练好的网络的权重,而是使用相同的网络结构,例如多少层,每层多少节点这样的信息,然后使用随机生成的权重作为训练的起点。例如你要训练世界上第一个识别fMRI图像的神经网络,你就可以借鉴识别X光图片的神经网络。

 

和传统的方法相比,迁移学习的另一个好处其可以做多任务目标的学习,传统的模型面对不同类型的任务,需要训练多个不同的模型。而有了迁移学习,可以先去实现简单的任务,将简单任务中的得到的知识应用到更难的问题上,从而解决标注数据缺少,标注不准确等问题。

                                                        
 

接下来看一个实际的例子,大家都熟悉的MINST手写数字识别,也可以用迁移学习来做,已有的训练数据是六万张图片,已有的模型是通用的图像识别模型VGG16,看起来,我们即可以将网络的最高层重新训练,也可以训练网络的最初几层,毕竟手写数字的图片,和我们日常见到的图片即相似也有明显不同。点击阅读原文,可以查看具体的python代码。

 

总结一下,迁移学习应用广泛,尤其是在工程界,不管是语音识别中应对不同地区的口音,还是通过电子游戏的模拟画面前期训练自动驾驶汽车,迁移学习已深度学习在工业界之所以成功的最坚实支柱,而学术界对迁移学习的研究则关注以下几点,一是通过半监督学习减少对标注数据的依赖,应对标注数据的不对称性,二是用迁移学习来提高模型的稳定性和可泛化性,不至于因为一个像素的变化而改变分类结果,三是使用迁移学习来做到持续学习,让神经网络得以保留在旧任务中所学到的技能。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127785.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于Auto.js的萌猫跳辅助

    基于Auto.js的萌猫跳辅助许久不见,甚是想念被学长唤醒的博客魂ing…这次是一个失去时效性的小脚本,但是其中包括一些东西或许对你们可以有帮助撒一些要点因为Auto.js并没有直接的对于触控位置的监听,所以需要对安卓API进行调用2.涉及对于画布的使用importClass(android.graphics.PorterDuffXfermode);importClass(android.graphics.PorterDuff);constBG_COLOR=colors.parseColor(“#2d

    2022年6月6日
    40
  • 史上最全的数字IC后端设计实现培训教程(整理版)

    史上最全的数字IC后端设计实现培训教程(整理版)史上最全的数字IC后端设计实现培训教程(整理版)由于最近比较忙,前几天才把五月份开展活动送的书全部寄出,预计最迟明后天就会送到各位手中,希望各位多多理解!本次活动共送出八本《LowPowerFlow》PhysicalImplementation(BackEnd)纸质书籍,请各位中奖的朋友注意查收!另外本次小编多打印了五六本,有需要的朋友可以按照成本价送出(小编微信ic-backend2018)。鉴于很多小伙伴们经常苦于找各类数字IC后端实现培训教程和培训视频,今天小编特此整理了一份非常全

    2022年7月19日
    25
  • 一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读

    一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读一点就分享系列(实践篇3—上篇)—“全网首发”正确手法修改YOLOV5魔刀小试+Trick心得分享现在部署大热,而我觉得回归原理和源码更加重要!在检测领域YOLOV5肯定是大家的炼丹必备模型,收敛快,精度高都是其爱不释手的理由,各种魔改基础backone或者别的trcik也层出不穷,这里我自己针对V5的head添加了ASFF自适应的特征融合检测层,分享下,也顺手告诉大家如何以正规的手法去修改YOLOV5的网络结构!文章目录一点就分享系列(实践篇3—上篇)—“全网首发”正确手法修改YOLOV5

    2022年5月23日
    41
  • linux查看端口是否被占用的命令是,Linux如何查看端口是否被占用

    linux查看端口是否被占用的命令是,Linux如何查看端口是否被占用Linux如何查看端口是否被占用Linux如何查看端口是否被占用?下面为大家推荐两种检测方法,对Linux系统不熟悉的小伙伴可以看看。1、使用lsof命令lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件。在linux系统下,基本上所有的东西都可以被当作文件来用。socket当然也是一种文件了。所以lsof可以用来查找谁用了某一个端口。具体方法:lsof-i:port_…

    2025年7月15日
    2
  • [深入研究4G/5G/6G专题-11]: 测试-高通QXDM 、QCAT与空口协议验证总体测试架构与测试步骤「建议收藏」

    [深入研究4G/5G/6G专题-11]: 测试-高通QXDM 、QCAT与空口协议验证总体测试架构与测试步骤「建议收藏」作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:https://blog.csdn.net/HiWangWenBing/article/details/124306527目录前言:第1步:硬件连接与网络配置1.1网络连接与测试架构1.2硬件连接与网络配置第2步:CPEWeb主要功能配置2.0http登录2.1获取设备状态信息2.2设置扫描频段(与基站的频段一致,避免其他干扰消息)2.3使能Radio

    2022年10月3日
    3
  • SQL聚合函数功能和用法解析

    SQL聚合函数功能和用法解析第一部分:介绍SUM和AVG  我们知道数据库通常包含大量数据,要从海量的数据中找到我们需要的某条记录无异于大海捞针,不过通过SQL语言我们可以找到很多方法从数据库中提取我们要查找的特定数据,就是通过这些方法我们才能找到“列举出七八两个月中购买了西伯利亚羊毛的所有顾客的姓名”这类问题的答案。  很多时候,我们还希望能够通过对数据进行分析,总结出规律和趋势或生成高水平的报表。例如,对于采购经理来说,…

    2022年6月21日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号