深度学习入门知识

来源:互联网 发布:淘宝新店能开通直播吗 编辑:程序博客网 时间:2024/05/11 18:36

神经网络模型

人脑视觉机理

大致机理:从原始信号,叫做低级抽象,逐渐到高级抽象迭代。
人类的逻辑思维,经常使用高度抽象的概念,例如人类看到一个气球并识别出它是一个气球的大体流程(对应图2-2左):
瞳孔摄入像素Pixels——>大脑皮层某些细胞发现边缘和方向——>大脑判断眼前物体的形状是圆形的——>大脑进一步判定该物体是个气球
这个流程对应的人脑抽象阶段就是:
原始信号摄入——>做初步处理——>抽象——>进一步抽象
这里写图片描述
总的来说,人的视觉系统的信息处理是分级的,如图2-2右图,从低级的V1区提取边缘特征,再到V2区的形状或者目标的部分结构,再到最高层,形成整个目标和目标行为。也就是说高层的特征是底层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图。而抽象层面越高,存在的可能猜测就越少,越有利于分类。

人工神经网络

人工神经网络实在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及功能的一种抽象数学模型。

人工神经元模型

这里写图片描述
如图2-4显示了作为人工神经网络(Artificial Neural Network)的基本单元的神经元模型,它有三个要素:
(1):一组连接(对应神经元上的突触(神经元之间的连接接口,由于突触的信息传递特性是可变的,形成了神经元间连接的柔性,称为结构的可塑性)),连接强度由各连接上的权值表示,权值为正表示激活,为负表示抑制
(2):一个求和单元,用于求取各输入信号的加权和(线性组合)。
(3):一个非线性激活函数,起非线性映射作用将神经元输出幅度限制在一定范围内
(详解见蓝皮书P16)

BP神经网络

通过对神经网络模型的了解我们知道人脑对信息的传递和对外界刺激所产生的反应都是由神经元控制的,人脑平均由上百亿这样的神经元组成。刺激在神经网络的传播是遵循一定规则的,一个神经元并非每次接到其他神经元传来的刺激都产生反应,它首先会将其相邻神经元传来的刺激进行积累,到一定时候产生自己的刺激并传递给一些与它相邻的神经元。而人脑对外界刺激的学习机制就是通过调节这些神经元之间联系及其强度

BP(Back Propagation)网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用的最广泛的神经网络模型之一。BP网络能学习和存储大量的输入-输出模式映射关系。它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(Input)、隐层(Hide layer)和输出层(Output layer)

BP神经网络构成

示意图:
这里写图片描述

简单的描述:

输入层将刺激传递给隐藏层,隐藏层通过神经元之间连接的强度(权值)和传递规则(激活函数)将刺激传到输出层,输出层整理隐藏层处理后的刺激产生最终结果。若有正确的结果,那么将正确的结果和产生的结果进行比较,得到误差,再逆推对神经网中的链接权重进行反馈修正,从而来完后才能学习过程。
这就是BP神经网络的反馈机制,也正是BP(Back Propagation)名字的来源,即运用向后反馈的学习机制,来修正神经网中的权重,最终达到输出正确结果的目的。

BP算法由数据流的前向计算(正向传播)和识别信号的反向传播两个过程构成。
正向传播时,传播方向为输入层——>隐层——>输出层,每层神经元的状态只影响下一层神经元。
如果在输出层得不到期望的输出,则转向误差信号的反向传播流程。
通过这两个过程的交替执行,使网络误差函数达到最小值,从而完成信息提取和记忆过程。
(具体正反向传播算法见蓝皮书P21。)

卷积神经网络(ConvNet/CNNs)

卷积神经网络是人工神经网络的一种
卷积网络是为识别二维形状特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者其他形式的变形具有高度不变性
ConvNet的四项基本原则:局部互联(局部感知)、共享权值(参数共享)、下采样(池化)、多个卷积层
权值共享意味着更少的参数量,使之更类似于生物神经网络,降低了网络模型的复杂度,使图像可以直接作为网格的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。

卷积神经网络的网络结构

卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成,如图2-9所示:(纵向的Input、C1、S2、C3、S4就是所谓的层)
这里写图片描述
原理:
输入图形通过三个可训练的滤波器可加偏置进行卷积,卷积后在C1层产生三个特征映射图(feature map),然后特征映射图中每组的四个像素再进行求和、加权值、加偏置,通过一个激活函数(Sigmoid)得到三个S2层的特征映射图。这些特征映射图再经过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素被光栅化,并裂解成一个向量输入到传统的神经网络,进而得到输出。
一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来
S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性
此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C层)都紧跟着一个用来求局部平均与二次提取的计算层(S层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力

卷积网络的基本原则

局部感知

卷积神经网络有两种技术可以降低参数数目,第一种技术叫做局部感知野(局部连接)
一般认为人对外界的认识是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因此,每个神经元其实没有必要对全局图像进行感知(全局连接),只需对局部进行感知(局部连接),然后在更高层将局部信息综合起来就得到了全局信息。
如图:
这里写图片描述
图2-10左图为全连接,右图为局部连接,在右图中,假如每个神经元只与10×10个像素值相连,因为该图有1000000个神经元,那么权值数据为1,000,000×100个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

权值共享

如果采用局部连接处理后参数还是过多,那么就需要新的策略,即权值共享
在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的(即这1000000个神经元共享参数),那么参数数目就为100了。
可以把这100个参数(也就是卷积操作)看做是提取特征的方式,该方式与位置无关。
这其中隐含的原理是:图像的一部分的统计特性与其他部分是一样的,这也意味着我们在这一部分学习到的特征也能用在另一部分上,所以对与这个图像上的所有位置,我们都能使用相同的学习特征。
更直观一些,当从一个大尺寸图像中随机选取一小块,比如8×8作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这8×8样本中学习到的特征作为探测器,应用到这个图像的任意地方去。特别地,我们可以用从8×8的样本中学习到的特征跟原本的大尺寸图案做卷积,从而这个大尺寸图像的任一位置获得一个同的激活值。

多卷积核

上述例子只有100个参数时,表明只有1个10×10的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如图2-11所示(在图上表现就是从左图的一个球变成了好多个球一堆……):
这里写图片描述
图2-11右图对图片的不同部分进行卷积,他们表明了不同的卷积核。每个卷积核都会将图像生成为另外一幅图像。比如两个卷积核就可以生成两幅图像,这两幅图像可以看做一张图像的不同通道,如下图所示:
这里写图片描述
图中左半部分的四个矩形框就表示四个通道(有两个卷积核),右边部分的两个框表示两个生成通道。其中需要注意的是,四个通道上每个通道对应一个卷积核(这样的话按理说应该有四个卷积核,但是事实只有2个卷积核,所以理解为一个卷积核可以被多个通道对应?),现将w1忽略,只看w0,那么w0的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加再取激活函数值得到的。
所以,由四个通道卷积得到两个通道的过程中,参数的数目为4× 2× 2 ×2 个,其中4表示4个通道,第一个2表示生成2个通道,后两个2表示卷积核大小为2× 2.

池化(下采样)

在通过卷积获得了特征(features)之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取到的特征去训练分类器,但是这样做面临计算量的挑战,并且容易出现过拟合(因为得到的特征太多了)。
过拟合:用白话来说就是老师给你的题你都会做了,考试给你换个花样你就懵逼了。好,老师给你的题就相当于我们的训练数据,考试的题相当于测试数据,“过拟合”就是深度网络把训练的数据拟合的特别好,但是有点好过头了,对训练数据当然是100%好用,但是一来测试数据就疯了,那这样的网络训练出来其实是没有用的,训练集已经是监督学习了,拟合的再好也没用。(网络设计的太好太完美了,导致模型“记住了”训练集,但是到测试的时候就会表现的很差)。
为了解决这一问题,我们应该回到起点,我们之所以决定采用卷积后的特征,是因为图像具有一种“静态性”,这也就意味着在一个图像区域中有用的特征极有可能在另外一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计。
例如,人们可以计算图像的一个区域上的某个特定特征的平均值(或最大值)。这些概要统计特征不仅具有低得多的维度(相比于使用所有提取到的特征),同时能改善结果(不容易出现过拟合)。这种聚合的方法就叫做池化(Pooling),有时也叫作平均池化或最大池化(取决于计算池化的方法)。

深度学习的反思

深度学习看似万能,实则有很多调参技巧在里面,掌握得当可以快速获得模型,否则可能费力不讨好:

模型参数远大于数据量

相当于求解一个欠定方程,存在多解的可能性大,容易产生过拟合问题。

模型参数远小于数据量

相当于求解超定方程,可能无解,或者有解但准确率很低,这属于欠拟合问题。

模型参数与数据量匹配

相当于求解恰定方程,既能避免过拟合,也能兼顾准确率,但模型参数量和数据量怎样做到匹配,是一个工程问题。

所以,如果你选择用某个模型处理数据,那么应该考虑这个因素,越大的模型越难训练,因为需要与之匹配的数据量,一系列避免过拟合的方法才能训练一个较为理想的模型。
幸运的是,我们可以将大模型首先在较大的数据集(如ImageNet)上预训练,得到模型(model),再对特定数据集(如人脸数据)进行精调(fine-tuning),即可得到较为理想的结果。

参考资料:
【1】:深度学习——Caffe之经典模型详解与实战 乐毅 王斌 编著
【2】:深度学习——21天实战caffe 赵永科 编著