1、深度学习,一、深度学习简介,1、智能的定义,现在假设宇宙还没有产生生命,我们来想象一个生存游戏。这个生存游戏就是躲避危险从而生存下来。,但这时我们追加另一个规则,环境会变。即便个体非常幸运的产生了能够满足生存的关联f,也会在下一次环境改变之际化为无机物。如果还用随机生成的方式,生命永远只能在最初始的阶段停留片刻,无法进入下一个阶段。 因此生命想要延续,就需要一种能力,可以适应变化的能力。 Intelligence is the ability to adapt to change.,进化核心:繁殖、变异、筛选的动态循环 关键在于,关联的更新速度环境的变化速度。,刚才的描述是蛋白质层面上的低等智
2、能,通过自我繁殖来进行进化。自然界无法瞬间产生特别复杂的功能,高等智能都是由低等智能迭代生成的。高等智能最具代表性的就是可以思考。但是思考的原理实在难以解读。还是用老方法,转而问为什么会进化出意识允许我们思考,它能够解决什么问题?因为环境的变化是随机的,所以进化并没有方向,但是却有增加差异性的趋势。通过自我复制的方式,能够产生的差异性还是较弱。所以自然界慢慢的开始形成了有性繁殖,两个不同的个体进行交配,增加子代的差异性。但是有性繁殖使得大范围移动成为了必然需求。环境会随着移动而变化,个体在上一环境中通过自然学习所学习到的关联,在下一个环境并不适用。,需要新的学习方式: 生长周期:无法自然选择试
3、错 大脑模拟:预测未来事件 神经网络:寻找过去事件到未来事件的关联f (任意两个空间),2、神经网络 2.1、神经元,2、神经网络 2.1、基本变换:层 神经网络是由一层一层构建的,那么每层究竟在做什么? 数学式子: = + 其中 是输入向量, 是输出向量, 是偏移向量,W是权重矩阵,a()是激活函数。每一层仅仅是把输入 经过如此简单的操作得到 。 数学理解:通过如下5种对输入空间(输入向量的集合)的操作,完成 输入空间 输出空间 的变换 (矩阵的行空间到列空间)。 升维/降维 放大/缩小 旋转 平移 弯曲这5种操作中,1,2,3的操作由 完成,4的操作是由+ 完成,5的操作则是由a()来实现
4、。,每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间。,例子: 是二维向量,维度是碳原子和氧原子的数量 C;O,数值且定为1,1,若确定 y 是三维向量,就会形成如下网络的形状 (神经网络的每个节点表示一个维度)。通过改变权重的值,可以获得若干个不同物质。右侧的节点数决定了想要获得多少种不同的新物质。(矩阵的行数),每层神经网络的物理理解:通过现有的不同物质的组合形成新物质。,2.2、理解视角 现在我们知道了每一层的行为,但这种行为又是如何完成识别任务的呢? 2.2.1、数学视角:“线性可分” 二维情景:平面的四个象限也是线性可分。但上图的红蓝两条线就无法找到一超平
5、面去分割。神经网络的解决方法是用所说的5种空间变换操作转换到另外一个空间下。比如经过放大、平移、旋转、扭曲原二维空间后,在三维空间下就可以成功找到一个超平面分割红蓝两线 (同SVM的思路一样)。,上面是一层神经网络可以做到的,如果把一层神经网络的输出当做新的输入再次用这5种操作进行第二遍空间变换的话,网络也就变为了二层。设想网络拥有很多层时,对原始输入空间的“扭曲力”会大幅增加,如下图,最终我们可以轻松找到一个超平面分割空间。当然也有如下图失败的时候,关键在于“如何扭曲空间”。所谓监督学习就是给予神经网络网络大量的训练例子,让网络从训练例子中学会如何变换空间。每一层的权重W就控制着如何变换空间
6、,我们最终需要的也就是训练好的神经网络的所有层的权重矩阵。线性可分视角:神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。 增加节点数:增加维度,即增加线性转换能力。 增加层数:增加激活函数的次数,即增加非线性转换次数。,2.2.2、物理视角:“物质组成”回想上文由碳氧原子通过不同组合形成若干分子的例子。从分子层面继续迭代这种组合思想,可以形成DNA,细胞,组织,器官,最终可以形成一个完整的人。不同层级之间都是以类似的几种规则再不断形成新物质。 例子:人脸识别,物质组成视角:神经网络的学习过程就是学习物质组成方式的过程。 增
7、加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。 增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。,2.3、神经网络的训练神经网络的学习过程就是学习控制着空间变换方式(物质组成方式)的权重矩阵 W ,那如何学习每一层的权重矩阵 W 呢? 2.3.1、激活函数激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。 可微性: 当优化方法是基于梯度的时候
8、,这个性质是必须的。 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效。,Sigmoid此外,sigmoid函数的输出均大于0,使得输 出不是0均值,这称为偏移现象,这会导致后 一层的神经元将得到上一层输出的非0均值的 信号作为输入。,sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoi
9、d交叉熵损失函数。然而,sigmoid也有其自身的缺陷,最明显的就是饱和性。 软饱和激活函数:硬饱和激活函数:由于在后向传递过程中,sigmoid向下传导的梯度包含了一个 () 因子,因此一旦输入落入饱和区, ()就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。,Tanhtanh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。然而,从途中可以看出,tanh一样具有软饱和性,从而造成梯度消失。,Re
10、LU可以看到,当x0时,则不存在饱和问题。所以,ReLU 能够在x0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。,ELU,融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更敏感。ELU的输出均值接近于零,所以收敛速度更快。,Maxout这个激活函数有点大一统的感觉,因为maxout网络能够近似任意连续函数,且当w2,b2,wn,bn为0时,退化为ReLU。Maxout能够缓解梯度消失,同时又规避了ReLU神经
11、元死亡的缺点,但增加了参数和计算量。,2.3.2、损失函数我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数,用于衡量预测值和目标值的差异的方程。损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。通常表示为如下:,0-1损失函数绝对值损失函数 log对数损失函数 逻辑回归算法 平方损失函数 指数损失函数 AdaBoost算法 Hing
12、e损失函数 y是预测值,在-1到+1之间,t为目标值(-1或+1)。多用于SVM。,3.2.3、梯度下降损失函数的输出值()越高表示差异性越大。那神经网络的训练就变成了尽可能的缩小的过程。 所用的方法是梯度下降:通过使loss值向当前点对应梯度的反方向不断移动,来降低。一次移动多少是由学习速率来控制的。 梯度:在微积分里面,对多元函数的参数求偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数(,), 分别对,求偏导数,求得的梯度向量就是( /, /) ,简称 (,) 。对于在点( 0 , 0 )的具体梯度向量就是( / 0 , / 0 ) ,如果是3个参数的向量梯度,就是
13、(/, /,/) 以此类推。 梯度的意义:从几何意义上讲,梯度就是函数变化增加最快的地方。 梯度下降:比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。,梯度下降的问题 梯度的计算:如何快速计算梯度+如何更新隐藏层的权重反向传播算法 局部极小值梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。,解决办法: 1.调节步伐:调节学习速率,
14、使每一次的更新“步伐”不同。 (1)随机梯度下降(SGD):每次只更新一个样本所计算的梯度 (2)小批量梯度下降(MGD):每次更新若干样本所计算的梯度的平均值 (3)动量(Momentum):不仅仅考虑当前样本所计算的梯度,还考虑到Nesterov动量(4)Adagrad、RMSProp、Adadelta、Adam:这些方法都是训练过程中依照规则降低学习速率,部分也综合动量 2.优化起点:合理初始化权重、预训练网络,使网络获得一个较好的“起始点”。常用方法有:高斯分布初始权重(Gaussian distribution)均匀分布初始权重(Uniform distribution)Glorot
15、 初始权重、He初始权重稀疏矩阵初始权重(sparse matrix),3.2.4、具体流程,收集训练集:也就是同时有输入数据以及对应标签的数据。 设计网络结构:确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。 数据预处理:将所有样本的输入数据和标签处理成能够使用神经网络的数据,标签的值域符合激活函数的值域。 权重初始化:每层的权重在训练前不能为空,要初始化才能够计算损失值从而来降低。 训练网络:训练过程就是用训练数据的输入经过网络计算出输出,再和标签计算出损失,再计算出梯度来更新权重的过程。 预测新值:训练过所有样本后,打乱样本顺序再次训练若干次。训练完毕后,当再来新
16、的数据输入,就可以利用训练的网络来预测了。,三、单层神经网络,感知机(perceptron)是由两层神经元组成的结构,输入层用于接受外界输入信号,输出层(也被称为是感知机的功能层)就是M-P神经元。 感知机能容易的实现逻辑与、或、非运算。 一般的,对于给定训练集,所需的权重以及阈值都可以通过学习得到。,感知器只能做简单的线性分类任务。,四、多层神经网络,4.1多层前馈神经网络要解决非线性可分问题,就要使用多层神经网络。最基础的多层神经网络就是多层前馈神经网络。,4.2、BP算法多层网络的学习能力显然要比单层感知机强的多。但是简单的感知机学习就不够了,需要更强大的学习算法。不得不提其中最杰出、最
17、成功的代表误差逆传播(error BackPropagation,简称BP)算法。,其中输出层第个神经元的阈值用 j 表示,隐层第个神经元的阈值用 h 表示。 假设隐层和输出层的激活函数都是函数。,对训练样例( , ),假定神经网络的输出为 =( 1 , 2 , ),即 =( ) (1)则该神经网络在( , )上的损失函数为: k = 1 2 =1 ( ) 2 (2)对于任意一个权重和阈值,在BP算法迭代过程中,参数的更新一般式如下: + (3)BP算法基于梯度下降策略,一目标的负梯度方向对参数进行调整,对于(1)式中的损失 k ,给定学习率,有: hj = k hj (4)其中, k 是关于
18、 的函数, 是关于 的函数, 是关于 hj 的函数,所以: k hj = k hj (5),而根据 的定义,显然有: hj = (6)激活函数有个特殊的性质: =()(1() (7)于是根据(1)和(2),有: j = k =( ) = (1- )( - ) (8)将(6)和(8)代入(5),就得到了BP算法中关于 hj 的更新公式: hj = j (9)类似可得: j = j (10) = (11) = (12),在式(11)和(12)中: h = k = =1 k = =1 hj j = (1- ) =1 hj j 在整个过程中,学习率(0,1)控制着每一轮迭代中的更新步长,太大则容易震荡
19、,太小则收敛速率过慢。 训练终止条件: 设置最大迭代次数,比如使用数据集迭代100次后停止训练 计算训练集在网络上的预测准确率,达到一定门限值后停止训练,运用BP算法的多层前馈神经网络神经网络实例:,输入、权重和初始阈值如下:根据表格计算节点4的输入: 4 = w 14 1 + w 24 2 + w 34 3 + 4 =0.21+0.40+(0.51)+(0.4)=0.7 同上可得节点5的输入: 5 =-0.3+0+0.2+0.2=0.1 经过激活函数激活后得到节点4和节点5的输出: 4 = 1 1+ (0.7) =0.332 5 = 1 1+ (0.1) =0.525,节点6的输入为: 6
20、= w 46 4 + w 56 5 + 6 =0.30.332+ 0.2 0.525+0.1=0.105 从而节点6的输出为: 6 = 1 1+ (0.105) =0.474,开始更新权值与阈值:g j = (1 )( ) 因为实际输出结果是1,所以 6 =1g 6 = 6 (1 6 )( 6 6 )=0.474*(1-0.474)*(1-0.474)=0.131 进行权重更新操作: 46 = 6 4 =0.90.1310.332=0.039 46 = 46 + 46 =0.3+0.039=0.261 56 = 6 5 =0.90.1310.525=0.062 56 = 56 + 56 =0.
21、2+0.062=0.138 进行阈值更新操作: 6 = 6 =0.90.131=0.118 6 = 6 + 6 =0.1+0.118=0.218 同理:g 4 = 4 (1 4 ) 1 46 g 6 =-0.02087g 5 = 5 (1 5 ) 1 56 g 6 =-0.0065,省去中间计算过程,最后得到第一轮训练之后的新的权重与阈值:,四、卷积神经网络,4.1、视觉感知 4.1.1、画面识别是什么任务?卷积神经网络最初是服务于画面识别的,所以我们先来看看画面识别的实质是什么。,通过上面的两组对比图可以知道,即便是相同的图片经过不同的视觉系统,也会得到不同的感知。任何视觉系统都是将图像反光
22、与脑中所看到的概念进行关联。,画面识别实际上是寻找(学习)人类的视觉关联方式,并再次应用。,4.1.2、图片被识别成什么取决于哪些因素?,图片被识别成什么不仅仅取决于图片本身,还取决于图片是如何被观察的。,图像表达我们知道了“画面识别是从大量的(,)数据中寻找人类的视觉关联方式,并再次应用。 其是输入,表示所看到的东西,是输出,表示该东西是什么。在自然界中,是物体的反光,那么在计算机中,图像又是如何被表达和存储的呢?,图像在计算机中是一堆按顺序排列的数字,数值为0到255。0表示最暗,255表示最亮。当我们用全连接网络处理这个图像时,这个图像用一个长长的向量来表示,类似于(0,0,0,256,
23、255,0)。 然而这样会失去平面结构的信息,因为即使是人类也很难从这个向量中看出8的存在。所以为保留该结构信息,通常选择矩阵的表示方式:2828的矩阵。,上图是只有黑白颜色的灰度图,而更普遍的图片表达方式是RGB颜色模型,即红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以产生多种多样的色光。这样,RGB颜色模型中,单个矩阵就扩展成了有序排列的三个矩阵,也可以用三维张量去理解,其中的每一个矩阵又叫这个图片的一个channel。在电脑中,一张图片是数字构成的“长方体”。可用 宽width, 高height, 深depth 来描述,如图:画面识别的输入是形状为(, ,
24、 )的三维张量。,画面不变性在决定如何处理“数字长方体”之前,需要清楚所建立的网络拥有什么样的特点。 我们知道一个物体不管在画面左侧还是右侧,都会被识别为同一物体,这一特点就是不变性,如下图所示:,我们希望所建立的网络可以尽可能的满足这些不变性特点。为了理解卷积神经网络对这些不变性特点的贡献,我们将用不具备这些不变性特点的前馈神经网络来进行比较。,图片识别-前馈神经网络方便起见,我们用depth只有1的灰度图来举例。 想要完成的任务是:在宽长为4x4的图片中识别是否有下图所示的“横折”。 图中,黄色圆点表示值为0的像素,深色圆点表示值为1的像素。 我们知道不管这个横折在图片中的什么位置,都会被
25、认为是相同的横折。,若训练前馈神经网络来完成该任务,那么表达图像的三维张量将会被摊平成一个向量,作为网络的输入,即(width, height, depth)为(4, 4, 1)的图片会被展成维度为16的向量作为网络的输入层。再经过几层不同节点个数的隐藏层,最终输出两个节点,分别表示“有横折的概率”和“没有横折的概率”,如下图所示。,解决办法是用大量物体位于不同位置的数据训练,同时增加网络的隐藏层个数从而扩大网络学习这些变体的能力。然而这样做十分不效率,因为我们知道在左侧的“横折”也好,还是在右侧的“横折”也罢,大家都是“横折”。 为什么相同的东西在位置变了之后要重新学习?有没有什么方法可以将
26、中间所学到的规律也运用在其他的位置? 换句话说,也就是让不同位置用相同的权重。,图片识别-卷积神经网络卷积神经网络就是让权重在不同位置共享的神经网络。 局部连接,空间共享过滤器是共享的。,输出表达如先前在图像表达中提到的,图片不用向量去表示是为了保留图片平面结构的信息。 同样的,卷积后的输出若用上图的排列方式则丢失了平面结构信息。 所以我们依然用矩阵的方式排列它们,就得到了下图所展示的连接:,深度维的处理过滤器在张量的width维, height维上是局部连接,在depth维上是贯串全部层次的。,但是,过滤器在每个层次上的权重矩阵是不共享的,即每一层都有一个独立的权重矩阵。,0边界0边界可以帮
27、助控制Feature Map的输出尺寸,同时避免边缘信息被一步步舍弃的问题。通常大家都想要在卷积时保持图片的原始尺寸。 选择3x3的过滤器和1的0边界,或5x5的过滤器和2的0边界可以保持图片的原始尺寸。 另一个原因是3x3的过滤器考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。,过滤器的作用不同权值矩阵的过滤器可以探测不同的特征 从右边这幅图可以看出,不同数值的过滤器所卷 积过后的Feature Map可以探测边缘,棱角,模糊 ,突出等概念。,如我们先前所提,图片被识别成什么不仅仅取决于图片本身,还取决于图片是如何被观察的。而过滤器
28、内的权重矩阵W是网络根据数据学习得到的,也就是说,我们让神经网络自己学习以什么样的方式去观察图片。所以在重复的网络训练过程中,CNN能够探测到的特点和概念也会越来越复杂。,多过滤器每一个过滤器都可以探测特定形状的特征,我们可以用多个过滤器组合来探测比较复杂的特征。同时也可以增加过滤器来探测更多的特征。,这样卷积层的输出也不再是深度为1的一个平面,而是和输入一样是深度为复数的长方体。,加入激活函数和前馈神经网络一样,经过线性组合和偏移后,会加入非线性增强模型的拟合能力。,卷积层的输出卷积层的输出也是格式为(, , )的三维张量。,池化层对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂
29、度;一方面进行特征压缩,提取主要特征。常用的池化方法有:(1)最大池化(2)均值池化(3)高斯池化(4)训练池化其中最常用的是最大池化方法。,Max pooling:整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出输出。,Max pooling 的作用就是去除冗余信息,那么去除了这些信息之后,不会对最后的训练结果产生影响吗?,全连接层全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。通常卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。,未完待续。,