引言
鉴于学校还未具体说明何时才能开学,则希望利用寒假剩余的时间完成一个早已预谋已久的计划——开始深度学习的旅程。在此之前,本人还未接触过任何一个机器学习框架,与身边大佬相比显得相形见绌。另一方面也是为了自己更为深入地了解计算机视觉领域。在目前看来,机器学习,或者进一步说,深度学习越来越成为计算机视觉的发展方向。包括opencv4.0版本对DNN的进一步优化,也揭示了传统计算机视觉对深度学习的友好态度。基于上述原因,我也将开始深度学习之旅。
准备知识
机器学习和深度学习的区别
谈到深度学习,就不得不说机器学习。关于二者的区别,较为官方的说法在以下链接中给出,这里我简要介绍一下我的愚见。
深度学习和机器学习有什么区别?
首先是二者的所属关系,这里一定要明确一点,那就是深度学习是机器学习的一个分支。而机器学习又作为人工智能的一个重要领域和手段。故三者的关系明确了,接下来我们来分别阐述一下。
什么是机器学习?
有人说机器学习事实上是一个优化问题,有人则认为机器学习是一个编程概念,也有人认为现阶段的机器学习是统计推断。从不同的角度看,这些说法都有道理。这里给出机器学习之父Tom Mitchell对学习任务的定义1:
每个机器学习都可以被精准地定义为:1)任务T;2)训练过程E;3)模型表现P。而学习过程则可以被拆解为为了实现任务T,我们通过训练过程E,逐步提高表现P的一个过程。
简单来说,就是机器通过一系列「任务」从「经验」(数据)中学习,并且评估「效果」如何。
比如我们想要做一个模型来判断一张图片是猫还是狗(任务T)。为了提高模型的准确度(模型表现P),我们不断给模型提供图片让其学习猫与狗的区别(训练过程E)。在这个学习过程中,我们所得到的最终模型就是机器学习的产物,而训练过程就是学习过程。相较于人类的学习,比较显著的差别是现阶段的机器学习更适合简单问题,大量数据的高效且准确的预测,而人类更适合复杂情况下面临有限数据做出决策。因此,在可预见的未来,我们很难说机器学习和人类学习谁更好。其实结合人类知识与机器学习的学习能力是非常自然的想法,比如现在比较流行的主动学习(active learning),比如人机互动(HCI)与机器学习的交叉研究等。
这里说一个普遍比较关心的问题。为什么叫做机器学习呢?一般编程语言的做法,是定义每一步指令,逐一执行并最终达到目标。而机器学习则相反,先定义好输出,然后程序自动学习出达到目标的步骤,而非人工定义指令。
机器学习可以分为:
- 监督学习:给出定义好的标签,程序学习标签和数据之间的映射关系
- 非监督学习:没有标签的数据集
- 强化学习:达到目标会有正向反馈
不论是哪一种机器学习方式,机器学习最终的目的都是得到学习目标的特征。比如垃圾邮件识别的问题,做法是先从每一封邮件中抽取对识别结果可能有影响的因素(称为特征feature),比如发件地址、邮件标题、收件人数量等等。然后使用算法训练数据中每个特征和预测结果的相关度,最终得到可以预测结果的特征。
然而即使算法再强大,如果无法从数据中学习到更好的特征表达,也是徒劳。同样的数据,使用不同的表达方法,可能会极大影响问题的难度。一旦解决了数据表达和特征提取的问题,很多人工智能任务也就迎刃而解。
为什么需要深度学习?
接上文,虽然机器学习的方法看起来似乎与学习的时间成正比例,给定足够的时间和正确的样本数据,机器学习似乎总能给出满意的答案(这种看法是错误的,例如过拟合的出现)。然而事实上,对于机器学习来说,特征提取并不简单。特征工程往往需要人工投入大量时间去研究和调整,就好像原本应该是机器解决的问题,却需要人一直在旁边给予帮助。
深度学习便是解决特征提取问题的一个机器学习分支。它可以自动学习特征和任务之间的关联,还能从简单特征中提取复杂的特征。
深度学习的引入
前面扯了那么多,现在终于到了重头戏。下面我将介绍一下什么是深度学习。
关于深度学习,百科给出的定义如下:
深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
深度学习的概念由Hinton等人于2006年提出。基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。
深度学习是机器学习中一种基于对数据进行表征学习的方法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。
同机器学习方法一样,深度机器学习方法也有监督学习与无监督学习之分.不同的学习框架下建立的学习模型很是不同.例如,卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称DBNs)就是一种无监督学习下的机器学习模型。
看完之后可能有一些大佬点了点头。但对于我这样的小白来说,上面的内容如同天书一样。那么如何来通俗的理解深度学习呢?这里我们首先要理解两个概念,机器学习和神经网络。关于机器学习上面已经提到,这里不再赘述。接下来就是神经网络。
神经网络
神经网络是一组粗略模仿人类大脑,用于模式识别的算法。神经网络这个术语来自这些系统架构设计背后的灵感,这些系统是用于模拟生物大脑自身神经网络的基本结构,以便计算机能够执行特定的任务。其雏形是发展于上世纪五六十年代的感知机。其发展过程如下。
1.从感知机到神经网络
感知机的模型如下图,它是一个有若干输入和一个输出的模型。
输入和输出之间学习得到一个线性关系,得到中间输出结果:
接着是一个神经元激活函数:
从而得到想要的结果1或者-1.
但这个模型只能用于二元分类,且无法学习比较复杂的非线性模型(实际上这种感知机甚至不能解决一些简单的非线性分类问题),因此无法在工业界使用。而神经网络则在感知机的模型上做了扩展,总结为以下三点:
1.加入了隐藏层。隐藏层可以有好多层,用于增强模型的表达能力,如下图,当然增加了隐藏层之后的模型的复杂度也相应增加了。
2.输出的神经元也可以不止一个输出,可以有多个输出,即多输出。这样模型可以灵活的应用于分类回归,以及其他的机器学习领域比如降维和聚类等。多个神经元输出的输出层对应的一个实例如下图,输出层现在有四个神经元。
3.对激活函数进行扩展,感知机的激活函数是
s
i
g
n
(
z
)
sign\left( z\right)
sign(z),虽然简单但是处理能力有限,因此神经网络中一般使用其他的激活函数。比如我们在逻辑回归里面经常使用的Sigmoid函数:
f
(
x
)
=
1
1
+
e
−
z
f\left( x\right) =\dfrac {1}{1+e^{-z}}
f(x)=1+e−z1
还有后来出现的tanx,softmax,以及ReLU等。通过使用不同的激活函数,神经网络的表达能力进一步增强。
更多关于激活函数的内容详见此文
2.DNN(深度神经网络)的基本结构
神经网络是基于感知机的扩展,而DNN可以理解为有很多个隐藏层的神经网络。多层神经网络和深度神经网络其实指的是一个东西,DNN有时也叫做多层感知机(Multi-Layer perceptron,MLP)。
如果DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层。如下图示例,一般来说第一层是输入层,最后一层是输出层,而中间的层都是隐藏层。
层与层之间是全连接的,也就是说,第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。虽然DNN看起来很复杂,但是从小的局部模型来说,还是和感知机一样,即一个线性关系
z
=
∑
w
i
x
i
+
b
z=\sum w_{i}x_{i}+b
z=∑wixi+b加上一个激活函数
σ
(
z
)
\sigma \left( z\right)
σ(z).
由于DNN层数多,则我们的线性关系系数w和偏倚b的数量也就是很多了。DNN中具体参数的定义在此先不作探讨,等后面实战的时候一起总结一下。
至此,我的准备工作到此就结束了。有余力者可以去下面的链接了解深度神经网络更进一步的发展。
DNN、RNN、DNN的区别