说在开头
最近我正在做毕业设计,我的毕业设计其中有一项是证件照背景替换,起初我是用聚类的方法对背景提取,发现那种方法过于简单,而且是针对性太强,只能完成证件照的背景替换,我想尝试用深度学习图像语义分割的方法,实现对任何一张图片中,将人提取出来。这是我第一次接触深度学习,想使用百度的飞桨开启我的深度学习生涯。一开始我想一口吃个胖子,直接上手了代码,发现根本不行,因为一旦出现Bug,根本不知道是哪里有问题,所以还是要从最基本的开始学习,这是我开始学习深度学习的第一篇博客,大家有兴趣的话可以跟着我一起学习,我是在这个百度飞桨进行学习的,下面得博客,也是参考这个课程的,我会尽量转换成我自己理解的话,更加通俗的表达出来,希望我的博客对大家有帮助。
什么是深度学习?
说到深度学习,不得不提的还有人工智能,机器学习,这三个基本概念是大家挂在嘴边,却远在天边的,很多人只是听说过,只知其一不知其二。他们之间的关系可以简单的概括为如下:
- 人工智能:人工智能的目标是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的科学。人工智能只提出了目标,并没有提出具体的方法,所以在各个领域都有涉及人工智能的方面,他不局限于计算机的理论,导致其变成一个“大杂烩”式的学科。
- 机器学习:机器学习的目标是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,从这句话可以看出机器学习与人工智能的不同,机器学习已经开始考虑怎么实现,并提出了监督学习和无监督学习的方式,具体细讲,可以将机器学习的实现步骤分为两步:训练和预测。训练的过程就是发现规律的过程,预测的过程就是利用训练过程发现的规律对新样本进行预测。可以简单的看作函数,比如Y=F(X), 我们想知道Y与X之间符合什么函数规律,就要通过大量的训练来发现Y与X之间的函数关系,比如经过训练我们发现了
Y
=
2
∗
X
+
1
Y=2*X+1
Y=2∗X+1,这就是训练的结果,那么随便给一个X,我们都能轻松得到Y,这就是预测的过程。
上面说明了机器学习的最终目标,就是得到输入和输出的关系,再具体来说,机器学习的过程是确定参数的过程。比如我们知道弹簧的弹力和弹簧的长度的变化量是线性关系,那么我们可以得出数学模型, F = k ∗ X + b F=k*X+b F=k∗X+b,其中k,b是未知参数,我们通过大量的训练得出k,b。具体的训练过程可以抽象成下图:
H ( θ , X ) H(\theta,X) H(θ,X)叫做模型假设,也就是我们提出弹簧弹力和变化量成线性关系的过程。
E v a l ( ) Eval() Eval()叫做评价函数。
M i n θ ( ) Min_\theta() Minθ()叫做损失函数,也叫做寻解函数。
想要得出k,b这两个参数,我们有大量的实验数据,我们要根据这些数据来评价k,b是不是最优的。起初随机给定k,b我们根据每一个样本的X,我们有一个根据k,b预测的Y和一个真实的数据Y,那么 E v a l ( Y 预 测 , Y 真 实 ) Eval(Y预测,Y真实) Eval(Y预测,Y真实),就可以评价出k,b的好坏,关于下一步训练k,b的变化,k要变大还是变小,b要变大还是变小,就是最外层的 M i n θ ( ) Min_\theta() Minθ(),也就是寻解算法需要考虑的事情了,寻解算法的好坏直接决定了k,b收敛的速度,寻解算法越好,就可以用更少的时间获取最优的k,b,如此循环下去直至k,b收敛,这就是训练的过程。 - 深度学习:深度学习是机器学习的一个分支,深度学习也存在模型假设、评价函数和优化算法,最根本的差别在于假设的复杂度上。
如上图所示,不是所有的任务都可以抽象成简单的线性模型。对于一张图片,人脑接收到五颜六色的光学信号,计算机则接收到一个数字矩阵。人脑以极快的速度反应出这张图片是一位美女,而且是程序员喜欢的类型。这个结果是一个非常高级的语义概念,从像素到高级语义概念中间要经历怎样复杂的信息变换是难以想象的!这种变换已经复杂到无法用数学公式表达,所以研究者们借鉴了人脑神经元的结构,设计出神经网络的模型。
人工神经网络包括多个神经网络层(卷积层、全连接层、LSTM等),每一层又包括很多神经元,超过三层的非线性神经网络都可以被成为深度神经网络。通俗的讲,深度学习的模型可以视为是输入到输出的映射函数,比如中文到英文的映射,足够深的神经网络理论上可以拟合任何复杂的函数,因此,神经网络非常适合学习样本数据的内在规律和表示层次,对文字\图像和声音任务有很好的适用性,因为这几个领域的任务是人工智能的基础模块,所以深度学习被称为实现人工智能的基础也就不足为奇了 。
深度学习的发展
深度学习有悠久的发展历史,但是在2010年后才逐渐成熟。这与深度学习成功所依赖的先决条件有关。
- 大数据是它有效的前提。神经网络和深度学习是非常强大的模型,但也需要足够量级的训练数据。时至今日,很多传统机器学习算法和人工特征依然是足够有效的方案,原因在于很多场景下没有足够的标记数据来支撑深度学习这样强大的模型。深度学习的能力特别像科学家托罗密的豪言壮语:“给我一根足够长的杠杆,我能撬动地球!”,它也可以发出类似的豪言:“给我足够多的数据,我能够学习任何复杂的关系”。但在现实中,足够长的杠杆与足够多的数据一样,往往只能是一种美好的愿景。直到近些年,各行业IT化程度提高,累积的数据量爆发式的增长,才使得应用深度学习模型成为可能。
- 依靠硬件的发展和算法的优化。现阶段依靠更强大的计算机,GPU,Autoencoder预训练和并行计算等技术,深度网络在训练上的困难已经被逐渐克服。其中,数据量和硬件是更主要的原因。没有前两者,科学家们想优化算法都无从进行。
在深度学习框架出现之前,机器学习工程师处于手工业作坊生产的时代。为了完成建模,工程师需要储备大量数学知识,并为特征工程工作积累大量行业知识。每个模型是极其个性化的,针对性很强。而今,“深度学习工程师”进入了工业化大生产时代。只要掌握深度学习必要但少量的理论知识,掌握Python编程即可以在深度学习框架实现极其有效的模型,甚至与该领域最领先的实现模型不相上下。建模这个被“老科学家”们长期把持的建模领域面临着颠覆,也是新入行者的机遇。