时间:2024-10-12
文 | 洪科
关键词:迁移学习
背景
AlphaGo对李世石如何利用网络搜索技巧追踪信息来源的胜利是一个标志性的事件如何利用网络搜索技巧追踪信息来源,一方面让大家领略了AI的力量如何利用网络搜索技巧追踪信息来源,另一方面对AI技术的普及起到了推动作用,AI技术在狭义的理解就是深度学习的技术。
对于众多的专业技术人员,如何参与到这个技术Party中,首先需要明确个人的定位:是研究者还是使用者?
对于大部分人,采用一种务实的态度可能更可取。如果不是做研究而仅仅是从实用的角度出发,运用深度学习的技术并不复杂。吃鸡蛋与理解鸡蛋的营养成分是两回事,这个道理同样可以运用在深度学习这个领域。
如何快速使用深度学习技术
深度学习的原理并不难,譬如图片识别,原始数据是大小为128*128黑白的图片必赢app,输入层每一个节点代表一个像素点的值,每一条边都有一个权重,隐藏层中的每一个节点是一个激励函数,输出层每个节点代表一个分类,图片属于哪一类的概率越高,对应的节点值就越大。
【注:上述描述实质是个多层感知机,真正的图片识别比这复杂不少,但基本原理和流程是差不多的】
对上面提到的概念不了解关系也不大,只要围绕着下面两点展开即可:
解决不同的问题,需要不同的网络结构定义;
深度学习(虽然深度学习不少模型属于非监督类的,但入门阶段以监督类的角度观察更容易理解些),基本学习过程如下:
网络定义越复杂,需要训练的参数就越多,个数达到百万级或者更多,训练过程需要大规模的数据集,同时计算量也是非常的巨大。
至于卷积核、参数共享等等深度学习概念,从实用的角度看可以采取不求甚解的态度,我们还是回到上面两个问题展开。
既然解决不同的问题需要不同的网络结构定义,那么如何根据我的业务场景定义网络呢,这里有一个坏消息和一个好消息。
坏消息是:深度学习中的网络结构定义,不是一般人能够做的,这个交给专业的牛人即可。深度学习中的网络结构定义,可以看作是传统机器学习中的算法,还是伪码层次的;好消息是:已经有不少牛人,针对不同领域的问题已经研究出了相应的网络结构定义并公开了成果。
解决了第一个问题,还有第二个问题需要解决,这时同样有一个好消息和一个坏消息。
好消息是:一群活雷锋,收集了大量已标注的训练数据集;另一群雷锋必赢客户端,根据前面牛人定义的网络结构和其他活雷锋提供的数据集,在某些计算框架上(TensorFlow、Caffe等)将整个过程实现了,并有结果输出(网络定义和已经训练好的模型)。
坏消息是:具体的问题总是与理想有点区别,譬如上例中的图片识别,如果不想只是泛泛的识别1000个类别,而是针对具体的领域,识别100个类别即可。更重要的一个问题是现代的深度学习取得很好的效果是基于我们有了海量的数据,那么我自己的数据量也没有那么大还能玩的转深度学习吗?于是具体的问题来了:
网络结构需要重新定义吗?如果需要,该如何定义?
原来的模型还可以使用吗?
少量的数据能够学习到较好的效果吗?
在回答上述问题,先对迁移学习这个概念进行一个说明:
迁移学习(Transfer Learning)的目标是将从一个环境中学到的知识用来帮助新环境中的学习任务。
举个例子,如果一个小朋友要学习画老虎,天天去动物园比较麻烦,好吧,那就在家里先学习画猫吧,等把画猫的技术练成后,再去动物园几次,就可以快速的将老虎画的很好。
互联网上的网络结构定义和参数就是那只猫,我们要做的就是借这只猫画出我们自己的老虎,而且更简单,现实中,存储大脑里的知识不能快速的从一个人转移到另一个人身上,但是在深度学习领域可以这么做。有了这个认识,再来回答上面两个问题:
针对具体的业务问题,网络结构的输出层需要进行微调,以适应具体的应用场景;
网络结构和业务场景变了,参数需要重新训练,但是原来的参数还是可以使用,见下图:
权重W1最佳值是 20,如果从零开始训练,系统随机初始化为1~100之间的一个数,假设是50,通过多轮迭代,不断的靠近20。如果直接给个实始值25,那么经过有限的运算就能非常靠近20这个理想值。
解决了上述两个问题,参照上面的思路,软件工程师就可以快速的在自己的应用系统中引入深度学习技术(如果需要的话)。
更进一步
按照上一节的描述的做法,软件工程师还是需要掌握一些深度学习的知识,互联网那么大,我怎么知道每个网络结构模型对应解决的问题呢?就是知道了,不是还有两件事情要做吗!可不可以这两件事情都可以不做?
答案是肯定的!
邬贺铨院士说:
这本书填补了大数据技术与实际应用系统性结合类书籍的空白。
当当和京东说:
这本书放在自营书店卖。
中兴大数据平台DAP团队说:这本书是我们的诚意之作。