深度学习基础聊一聊从感知机到神经网络
Posted 非晚非晚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习基础聊一聊从感知机到神经网络相关的知识,希望对你有一定的参考价值。
文章目录
1. 从机器学习到深度学习
1.1 简要了解机器学习到深度学习
我们知道,Machine Learning分为两大派别:频率派和贝叶斯派
;前者逐渐发展为统计学习,后者逐渐发展为概率图模型(PGM,Probability graph model)。
频率派
:常用的思想有:正则化、核化、集成化、层次化;概率图模型常见的模型有:有向图模型如Bayesian Network,无向图模型如:Markov Network,有向+无向(混合)模型:mixed Network。频率派中的层次化思想最主要的应用就是神经网络(Neural Network),神经网络有很多模型:MLP多层感知机,AutoEncoder自动编码机,CNN人工神经网络,RNN循环神经网络;这些统称为深度神经网络。贝叶斯派
:有向图如果加了Deep,就变成Deep Diercted Network,如Sigmoid 信念网络、GAN生成式对抗网络,VAE变分自编码器;无向图模型加了Deep,会有深层波尔兹曼机;有向+无向模型加了Deep,会有深度信念网络Deep Belief Network;他们统称为深化生成模型Deep Generative Model。
1.2 深度学习的发展浪潮
先两张深度学习发展历史图。
- 第一代神经网络(1958~1969)
最早的神经网络的思想起源于1943年的MCP人工神经元模型,当时是希望能够用计算机来模拟人的神经元反应的过程,该模型将神经元简化为了三个过程:输入信号线性加权,求和,非线性激活(阈值法)
。第一次将MCP用于机器学习(分类)的当属1958年Rosenblatt发明的感知机(perceptron)算法。
感知机算法使用MCP模型对输入的多维数据进行二分类,且能够使用梯度下降法从训练样本中自动学习更新权值。1962年,该方法被证明为能够收敛,理论与实践效果引起第一次神经网络的浪潮。
1969年,美国数学家及人工智能先驱Minsky在其著作中证明了感知器本质上是一种线性模型,只能处理线性分类问题,就连最简单的XOR(亦或)问题都无法正确分类
。这等于直接宣判了感知器的死刑,神经网络的研究也陷入了近20年的停滞。
- 第二代神经网络(1986~1998)
第一次打破非线性诅咒的当属现代DL大牛Hinton,其在1986年发明了适用于多层感知器(MLP)的BP算法
,并采用Sigmoid进行非线性映射,有效解决了非线性分类和学习的问题。该方法引起了神经网络的第二次热潮。
1989年,Robert Hecht-Nielsen证明了MLP的万能逼近定理,即对于任何闭区间内的一个连续函数f,都可以用含有一个隐含层的BP网络来逼近该定理的发现极大的鼓舞了神经网络的研究人员。也是在1989年,LeCun发明了卷积神经网络-LeNet,并将其用于数字识别,且取得了较好的成绩,不过当时并没有引起足够的注意。
值得强调的是在1989年以后由于没有特别突出的方法被提出,且NN一直缺少相应的严格的数学理论支持,神经网络的热潮渐渐冷淡下去。冰点来自于1991年,BP算法被指出存在梯度消失问题,即在误差梯度后向传递的过程中,后层梯度以乘性方式叠加到前层,由于Sigmoid函数的饱和特性,后层梯度本来就小,误差梯度传到前层时几乎为0
,因此无法对前层进行有效的学习,该发现对此时的NN发展雪上加霜。
1997年,LSTM模型被发明,尽管该模型在序列建模上的特性非常突出,但由于正处于NN的下坡期,也没有引起足够的重视。
- 第三代神经网络(2006年–至今)
2006年,DL元年。是年,Hinton提出了深层网络训练中梯度消失问题的解决方案:无监督预训练对权值进行初始化+有监督训练微调。其主要思想是先通过自学习的方法学习到训练数据的结构(自动编码器),然后在该结构上进行有监督训练微调。但是由于没有特别有效的实验验证,该论文并没有引起重视。
- 2011年,
ReLU激活函数被提出,该激活函数能够有效的抑制梯度消失问题
。- 2011年,微软首次将DL应用在语音识别上,取得了重大突破。
- 2012年,Hinton课题组为了证明深度学习的潜力,首次参加ImageNet图像识别比赛,其通过构建的CNN网络AlexNet一举夺得冠军,且碾压第二名(SVM方法)的分类性能。也正是由于该比赛,CNN吸引到了众多研究者的注意。
- 2013,2014,2015年,通过ImageNet图像识别比赛,DL的网络结构,训练方法,GPU硬件的不断进步,促使其在其他领域也在不断的征服战场。
- 2015年,Hinton,LeCun,Bengio论证了局部极值问题对于DL的影响,
结果是Loss的局部极值问题对于深层网络来说影响可以忽略
。该论断也消除了笼罩在神经网络上的局部极值问题的阴霾。具体原因是深层网络虽然局部极值非常多,但是通过DL的BatchGradientDescent优化方法很难陷进去,而且就算陷进去,其局部极小值点与全局极小值点也是非常接近
,但是浅层网络却不然,其拥有较少的局部极小值点,但是却很容易陷进去,且这些局部极小值点与全局极小值点相差较大。
- 其它的一些时间点
- 1986年,决策树方法被提出,很快ID3,ID4,CART等改进的决策树方法相继出现,到目前仍然是非常常用的一种机器学习方法。该方法也是符号学习方法的代表。
- 1995年,线性SVM被统计学家Vapnik提出。该方法的特点有两个:由非常完美的数学理论推导而来(统计学与凸优化等),符合人的直观感受(最大间隔)。不过,最重要的还是该方法在线性分类的问题上取得了当时最好的成绩。
- 1997年,AdaBoost被提出,该方法是PAC(Probably Approximately Correct)理论在机器学习实践上的代表,也催生了集成方法这一类。该方法通过一系列的弱分类器集成,达到强分类器的效果。
- 2000年,KernelSVM被提出,核化的SVM通过一种巧妙的方式将原空间线性不可分的问题,通过Kernel映射成高维空间的线性可分问题,成功解决了非线性分类的问题,且分类效果非常好。至此也更加终结了当时的NN时代。
- 2001年,随机森林被提出,这是集成方法的另一代表,该方法的理论扎实,比AdaBoost更好的抑制过拟合问题,实际效果也非常不错。
- 2001年,一种新的统一框架-图模型被提出,该方法试图统一机器学习混乱的方法,如朴素贝叶斯,SVM,隐马尔可夫模型等,为各种学习方法提供一个统一的描述框架。
2. 感知机
感知机(perceptron)是最早的监督式训练算法,是神经网络构建的基础。感知机是二类分类的线性分类模型
,其输入为实例的特征向量,输出为实例的类别。
它的结构如下所示:
输出和输入之间学习到一个线性关系,得到中间输出结果:
接着是一个神经元激活函数:
从而得到想要的结果1或者-1.
为了找出这样的超平面,即确定感知机模型参数w 和 b, 需要确定一个学习策略,即定义(经验)损失函数并将损失函数极小化
。损失函数的一个自然选择是误分类点的总数,但是这样损失函数不是参数w和b的连续可到函数,不易优化。损失函数的另一个选择是误分类点到超平面S的总距离
。
这种简单的感知机有一个明显缺陷:只能学习线性可分函数
。比如 XOR,这么简单的函数,都不能被线性分类器分类。为了解决这个问题,我们要使用一种多层感知机,也就是——前馈神经网络:事实上,我们将要组合一群这样的感知机来创建出一个更强大的学习机器。
3. 前馈神经网络
神经网络实际上就是将大量之前讲到的感知机进行组合,用不同的方法进行连接并作用在不同的激活函数上。
前向神经网络,它有以下属性:
- 一个输入层,一个输出层,一个或多个隐含层。上图所示的神经网络中有一个三神经元的输入层、一个四神经元的隐含层、一个二神经元的输出层。
- 每一个神经元都是一个上文提到的感知机。
- 输入层的神经元作为隐含层的输入,同时隐含层的神经元也是输出层神经元的输入。
- 每条建立在神经元之间的连接都有一个权重 w (与感知机中提到的权重类似)。
- 在 t 层的每个神经元通常与前一层( t - 1层)中的每个神经元都有连接(
但你可以通过将这条连接的权重设为0来断开这条连接
)。- 为了处理输入数据,将输入向量赋到输入层中。在上例中,这个网络可以计算一个3维输入向量(由于只有3个输入层神经元)。假如输入向量是 [7, 1, 2],你将第一个输入神经元输入7,中间的输入1,第三个输入2。这些值将被传播到隐含层,通过加权传递函数传给每一个隐含层神经元(这就是前向传播),隐含层神经元再计算输出(激活函数)。
输出层和隐含层一样进行计算
,输出层的计算结果就是整个神经网络的输出。
再多线性函数的组合还是线性函数
。如果我们限定只能使用线性激活函数的话,前馈神经网络其实比一个感知机强大不到哪里去,无论网络有多少层。正是这个原因,大多数神经网络都是使用的非线性激活函数
,如对数函数、双曲正切函数、阶跃函数、整流函数等。不用这些非线性函数的神经网络只能学习输入数据的线性组合。
4. 反向传播(Backpropagation)
假设有下列一个网络层:
- 第一层是输入层,包含两个神经元 i 1 , i 2 i_1,i_2 i1,i2,和截距项 b 1 b_1 b1;
- 第二层是隐含层,包含两个神经元 h 1 , h 2 h_1,h_2 h1,h2和截距项 b 2 b_2 b2;
- 第三层是输出 o 1 , o 2 o_1,o_2 o1,o2;
- 每条线上标的 w i w_i wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。
(1)step1:赋初始值
现在对他们赋初始值,如下图:
- 输入数据 i 1 = 0.05 , i 2 = 0.10 i_1=0.05,i_2=0.10 i1=0.05,i2=0.10;
- 输出数据 o 1 = 0.01 , o 2 = 0.99 o_1=0.01,o_2=0.99 o1=0.01,o2=0.99;
- 初始权重 w 1 = 0.15 , w 2 = 0.20 , w 3 = 0.25 , w 4 = 0.30 ; w 5 = 0.40 , w 6 = 0.45 , w 7 = 0.50 , w 8 = 0.55 w_1=0.15,w_2=0.20,w_3=0.25,w_4=0.30;w_5=0.40,w_6=0.45,w_7=0.50,w_8=0.55 w1=0.15,w2=0.20,w3=0.25,w4=0.30;w5=0.40,w6=0.45,w7=0.50,w8=0.55
(2)step2:前向传播
- 输入层---->隐含层
计算 h 1 h_1 h1的输入加权和:
n
e
t
h
1
=
w
1
∗
i
2
+
w
2
∗
i
2
+
b
1
∗
1
=
0.15
∗
0.05
+
0.2
∗
0.1
+
0.36
∗
1
=
0.3775
net_h_1=w_1*i_2+w_2*i_2+b_1*1=0.15*0.05+0.2*0.1+0.36*1=0.3775
neth1=w1∗i2+w2∗i2+b1∗1=0.15∗0.05+0.2∗0.1+0.36∗1=0.3775
计算
h
1
h_1
h1的输出
o
1
o_1
o1(使用sigmoid函数):
o
u
t
h
1
=
1
1
+
e
−
n
e
t
h
1
=
1
1
+
e
−
0.3775
=
0.593269992
out_h_1=\\frac11+e^-net_h_1=\\frac11+e^-0.3775=0.593269992
outh1=1+e−neth11=1+e−0.37751=0.593269992
同理计算
h
2
h_2
h2的输出
o
2
o_2
o2:
o
u
t
h
2
=
0.596884378
out_h_2=0.596884378
outh2=0.596884378。
- 隐含层---->输出层
n e t o 1 = w 2 ∗ o u t h 1 +以上是关于深度学习基础聊一聊从感知机到神经网络的主要内容,如果未能解决你的问题,请参考以下文章