• 1. CNN(深度卷积网络)KAIYU XUE
  • 2. 本PPT架构1、WHY 2、WHAT 3、HOW(模式图) 4、HOW(公式推导)
  • 3. 回顾 review
  • 4. 回顾 review1、对sparse autoencoder的回顾总结: 通过相似的输入和输出,用cost函数求出中间的参数(更新到最小的cost函数的输出就是中间的参数),而更新时需要用梯度下降法,梯度下降法需要偏导,偏导需要用BP算法。2、经典sparse autoencoder的输出应该是和输入数据尺寸大小一样的,且很相近。
  • 5. 3、然后,拿掉那个后面的输出层后,隐含层的值就是我们所需要的特征值了。4、因为模型的输出是x,可以看出,特征值输出的也是x的特征,其实这是一种无监督的学习unsupervised learning 的一种方式,叫self-taught learning 5、在这种无监督学习中,可以看出,每个特征值(参数)都与输入相连。是一种全部连接网络几个概念
  • 6. 如果我们的图像很大,比如说为100*100,隐含层有要学习100个特征,则这时候把输入层的所有点都与隐含层节点连接,则需要学习10^6个参数,这样的话在使用BP算法时速度就明显慢了很多。运用BP算法后求cost函数的参数:Why We Use Convolution?
  • 7. 为了处理大图像,所以后面就发展到了局部连接网络,也就是说每个隐含层的节点只与一部分连续的输入点连接。Convolutional Neural Networks are a special kind of multi-layer neural networks. Like almost every other neural networks they are trained with a version of the back-propagation algorithm. Where they differ is in the architecture.
  • 8. 因此:CNN一个厉害的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。一些Deeplearning方法:
  • 9. 本PPT架构1、WHY 2、WHAT 3、HOW(模式图) 4、HOW(公式推导)
  • 10. 1、如,1000x1000像素的图像,有1百万个隐层神经元(特征值),全连接:1000x1000x1000000=10^12个连接,也就是10^12个权值参数。
  • 11. 1.图像的空间联系是局部的2.因此,每一个神经元都不需要对全局图像做感受3.只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。
  • 12. 2、如,局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数(10X10X1000000=10^8)少了4个0(数量级)
  • 13. 3、每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。 只需:100个参数 ---(权值共享)问:这样的后果是什么呢?答:这样只提取了一种特征
  • 14. 我们定义由同一种滤波器卷积得到的向量组合,为Feature Map。
  • 15. 假如一种滤波器,也就是一种卷积核就是提出图像的一种特征,那么我们如需要提取不同的特征。问:怎么办?答:加多几种滤波器。
  • 16. 所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征。所以100种卷积核就有100个Feature Map。问:这时我们这一层有多少个参数了?答:100种卷积核(不同特征)x每种卷积核共享的100个参数=100x100=10K,也就是1万个参数。见图右:不同的颜色表达不同的滤波器。
  • 17. Feature Map的神经元个数它和原图像,也就是输入的大小、滤波器的大小和滤波器在图像中的滑动步长有关
  • 18. 例如,只有一种滤波器,也就是在一个Feature Map里,图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,神经元个数:(1000x1000 )/ (10x10)=100x100个神经元了,
  • 19. 如果100个Feature Map就是100倍了。 由此可见,图像越大,神经元个数和需要训练的权值参数个数的差距就越大。图像大小1000X10001种滤波器100种滤波器总的权值参数个数10X10=100100x10x10=10000总的神经元个数(1000X1000)/(10X10)=100X100100X(1000X1000)/(10X10)=100X100X100图像大小10000X100001种滤波器100种滤波器总的权值参数个数10X10=100(只取决于滤波器大小)100x10x10=10000总的神经元个数(10000X10000)/(10X10)=1000X1000100X(1000X1000)/(10X10)=100X1000X1000
  • 20. 上面的讨论都没有考虑每个神经元的偏置部分。所以权值参数个数需要加1 。
  • 21. 再回到sparse autoencoder,它的参数个数很多,但每个神经元表征一个特征,输出a1、a2,而CNN,因为一个神经元表征的只是一小部分特征,所以参数很少(更简便用BP算法),但要多个神经元才能把完整特征表述出来,所以特征输出是矩阵(矩阵中包含多个同一种滤波器(神经元))以上就是CNN的大致物理意义。就是为什么要用CNN,现在具体说怎么用CNN。
  • 22. 本PPT架构1、WHY 2、WHAT 3、HOW(模式图) 4、HOW(公式推导)
  • 23. 一种典型的用来识别数字的卷积网络LeNet-5。
  • 24. 每输入一张32*32大小的图片,F6输出一个84维的向量,这个向量即我们提取出的特征向量。
  • 25. 网络的C1层是一个卷积层(为什么是卷积?卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音)?回顾:滤波器去卷积图像得到对图像的特征的反映,我们称之为Feature Map。
  • 26. 1010101011、某种滤波器的大小是3*3,数据如图:convolve2、原来的图像大小是5*5,数据如图:1110001110001110011001100
  • 27. convolveFormally, 1.given some large images xlarge, we first train a sparse autoencoder on small patches xsmall sampled from these images,2. learning k features f = σ(W(1)xsmall + b(1)) (where σ is the sigmoid function), given by the weights W(1) and biases b(1) from the visible units to the hidden units. For every patch xs in the large image, we compute fs = σ(W(1)xs + b(1)), giving us fconvolved, a array of convolved features.设输入图片大小为r*c,用的patch即每个滤波器的大小为a*b,步长为1。因此,得出来的神经元数目为(r-a+1)X(c-b+1)。上图中,神经元数目为3*3。Feature Map
  • 28. C1层的Feature Map中滤波器的大小为(5*5),此时特征图(feature)的大小为(32-5+1)*(32-5+1)=28*28,同时,有6种滤波器,所以是6@28X28。Feature中每个神经元中的元素是对输入的卷积值再加上可训练偏置。
  • 29. 问:结合前面的知识,此时有____个参数。答:156个参数,每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器,共(5*5+1)*6=156个参数和(5*5+1)*(28*28)*6=122,304个连接。
  • 30. 而到了s2层为下采样层,即pooling层。
  • 31. pooling  按照convolution的方法可以减少参数,但是此时同样出现了一个问题,即它的输出向量的维数变得很大,这对后面的分类器的设计同样带来了困难,所以pooling方法就出现了。
  • 32. Formally, after obtaining our convolved features as described earlier, we decide the size of the region, say to pool our convolved features over. Then, we divide our convolved features into disjoint regions, and take the mean (or maximum) feature activation over these regions to obtain the pooled convolved features. These pooled features can then be used for classification.取一个区域,POOL的取法有取max pooling和average pooling等等
  • 33. S2层的pooling值是邻域四个像素(2*2)求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid f(x)=1/(1+e-x)激活函数,产生一个大概缩小四倍的特征映射图Sx+1,因此,S2=(28/2*28/2)@6=14*14@6
  • 34. 输出激活函数f(.)可以有很多种,一般是sigmoid函数或者双曲线正切函数。sigmoid将输出压缩到[0, 1],所以最后的输出平均值一般趋于0 。所以如果将我们的训练数据归一化为零均值和方差为1,可以在梯度下降的过程中增加收敛性。对于归一化的数据集来说,双曲线正切函数也是不错的选择
  • 35. 问:此时有___个训练参数。答:S2层有12个可训练参数(6*(1+1))
  • 36. 小结,convolution和pooling
  • 37. C3层是卷积层,但卷积的方式有变化,因为前面是6张feature map,而C1层的输入是一张图。
  • 38. 卷积方法为:借用1个输入层为150(=5*5*6,不是5*5)个节点,输出层为16个节点的网络对S2进行convolution。
  • 39. 并且此时, C3层的每个特征图并不一定是都与S2层的特征图相连接卷积,有可能只与其中的某几个连接,比如说在LeNet5中,其连接情况如下所示:
  • 40. 那么,实际是如何得到呢,在上面那里,假设第3号feature map,它的值(设为H3,如何求得?它与s2的第3,4,5号feature map连接。1.首先,把输入的150个节点分成6个部分,每个部分为连续的25个节点。取出倒数第3个部分的节点(为25个),且同时是与隐含层16个节点中的第4(因为对应的是3号,从0开始计数的)个连续的那25个值,reshape(重现调整大小)为5*5大小,用这个5*5大小的特征patch去convolution S2网络中的倒数第3个特征图,假设得到的结果特征图为h1。 2.同理,取出网络150-16中输入的倒数第2个部分的节点(为25个),且同时是与隐含层16个节点中的第5个相连的那25个值,reshape为5*5大小,用这个5*5大小的特征patch去convolution S2网络中的倒数第2个特征图,假设得到的结果特征图为h2。同理得到h3。 3.最后将h1,h2,h3这3个矩阵相加得到新矩阵h,并且对h中每个元素加上一个偏移量b,即可得到我们要的特征图H3了。
  • 41. S4层是一个下采样层,由16个5*5大小的特征图构成。特征图中的每个单元与C3中相应特征图的2*2邻域相连接,跟C1和S2之间的连接一样。S4层有32=(1+1)*16个可训练参数(每个特征图1个因子和一个偏置)。
  • 42. C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连。由于S4层特征图的大小也为5*5(同滤波器一样),故C5特征图的大小为1*1(已经可以完整表达某个特征了),这构成了S4和C5之间的全连接。
  • 43. F6(不是S)层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个=(120+1)*84可训练参数。后面如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。
  • 44. 最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,共10类(对应数字0-9),每个有84个输入。共欧式径向基函数每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些参数人工设定为7*12大小(即84)的格式化图片,即可识别出0-9的数字
  • 45. 在上面的实验,没有说明用的是什么滤波器。但有一些实验中,有用一种叫Gabor的滤波器,进行初始化训练,以达到模拟人类视觉系统对视觉刺激的响应。
  • 46. 本PPT架构1、WHY 2、WHAT 3、HOW(模式图) 4、HOW(公式推导)
  • 47. Convolutional Neural Networks are a special kind of multi-layer neural networks. Like almost every other neural networks they are trained with a version of the back-propagation algorithm. Where they differ is in the architecture.
  • 48. 前面的机理描述,是CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好。CNN参数在使用bp算法时该怎么训练?(涉及了卷积层和下采样层)
  • 49. 本次用的代价函数cost函数为:平方误差代价函数E是参数,共C类,N个样本。 表示第n个样本对应的标签的第k维。 表示第n个样本对应的网络输出的第k个输出。对于多类问题, 输出一般组织为“one-of-c”的形式,也就是只有该输入对应的类的输出节点输出为正,其他类的位或者节点为0或者负数,这个取决于你输出层的激活函数。sigmoid就是0或1,tanh就是-1.
  • 50. 因为在全部训练集上的误差只是每个训练样本的误差的总和,所以这里我们先考虑对于一个样本的BP。对于第n个样本的误差,表示为:传统的全连接神经网络中,我们需要根据BP规则计算代价函数E关于网络每一个权值的偏导数。我们用l来表示当前层,那么当前层的偏导x^e可以表示为:
  • 51. 反向传播回来的误差可以看做是每个神经元的基的灵敏度sensitivities(灵敏度的意思就是我们的基b变化多少,误差会变化多少,也就是误差对基的变化率,也就是导数了),定义如下:(第二个等号是根据求导的链式法则得到的)因为∂u/∂b=1,所以∂E/∂b=∂E/∂u=δ,也就是说bias基的灵敏度∂E/∂b=δ和误差E对一个节点全部输入u的导数∂E/∂u是相等的。
  • 52. 反向传播就是用下面这条关系式这里的“◦”表示每个元素相乘。输出层的神经元的灵敏度是不一样的:W1W2W3b
  • 53. 然后得到的偏导数乘以一个负学习率就是该层的神经元的权值的更新对于第l层,误差对于该层每一个权值(组合为矩阵)的导数是该层的输入(等于上一层的输出)与该层的灵敏度(该层每个神经元的δ组合成一个向量的形式)的叉乘。然后得到的偏导数乘以一个负学习率就是该层的神经元的权值的更新了:
  • 54. Convolve层(1)在一个卷积层,上一层的特征maps被一个可学习的卷积核进行卷积,然后通过一个激活函数,就可以得到输出特征map。每一个输出map可能是组合卷积多个输入maps的值:
  • 55. Computing the Gradients梯度计算因为下采样的存在,采样层的一个像素(神经元节点)对应的灵敏度δ对应于卷积层(上一层)的输出map的一块像素(采样窗口大小)。因此,层l中的一个map的每个节点只与l+1层中相应map的一个节点连接。那么就出现大小不匹配。W1W2W3bW4
  • 56. 将下采样层S进行上采样,使得上采样后灵敏度map大小与卷积层的map大小一样,然后再将层l的map的激活值的偏导数与从第l+1层的(上采样得到的灵敏度map)逐元素相乘就行了。(因为灵敏度大小一样,也就是套用最原始的公式)W1W2W3bW4
  • 57. 下采样层map的权值都是取一个相同值β(图中Wx+1),而且是一个常数得到的,同理我们只需要将上一个步骤(上采样后的)得到的结果乘以一个β就可以完成第l层灵敏度δ的计算。W1W1W1bW1
  • 58. 如何上采样: up(.)表示一个上采样操作。如果下采样的采样因子是n的话,它简单的将每个像素水平和垂直方向上拷贝n次。这样就可以恢复原来的大小了。实际上,这个函数可以用Kronecker乘积来实现:对比原始公式:W1W1W1bW1
  • 59. 好,到这里,对于一个给定的map,我们就可以计算得到其灵敏度map了。然后我们就可以通过简单的对层l中的灵敏度map中所有节点进行求和快速的计算bias基的梯度了:代入原始b更新公式:
  • 60. 最后,对卷积核的权值的梯度就可以用BP算法来计算了 变化:这里, 是 中的在与滤波器 卷积的时候与逐元素相乘的patch,输出卷积map的(u, v)位置的值是由上一层的(u, v)位置的patch与卷积核k_ij逐元素相乘的结果。
  • 61. 看公式,我们需要煞费苦心地记住输出map(和对应的灵敏度map)每个像素对应于输入map的哪个patch。但实际上,在Matlab中,可以通过一个代码就实现。对于上面的公式,可以用Matlab的卷积函数来实现:原始:Matlab:
  • 62. Sub-sampling Layers 子采样层(即S层)对于子采样层来说,有N个输入maps,就有N个输出maps,只是每个输出map都变小了。 down(.)表示一个下采样函数。典型的操作一般是对输入图像的不同nxn的块的所有像素进行求和。这样输出图像在两个维度上都缩小了n倍。每个输出map都对应一个属于自己的乘性偏置β和一个加性偏置b。
  • 63. 这里最困难的是计算灵敏度map。一旦我们得到这个了,那我们唯一需要更新的偏置参数β和b就可以轻而易举了。即如果下一个卷积层与这个子采样层是全连接的,那么就可以通过BP来计算子采样层的灵敏度maps。
  • 64. 我们再进行观察,S的下一层是C层,C层是对S层进行卷积。回顾卷积图:如图中4是由卷积核(101,010,101)得到的,其余的也是该卷积核,因此,连线的权值,其实就是卷积核。传统BP算法
  • 65. 到这里,我们就可以对b和β计算梯度了。首先,加性基b的计算和上面卷积层的一样,对灵敏度map中所有元素加起来就可以了:
  • 66. 而对于乘性偏置β,因为涉及到了在前向传播过程中下采样map的计算,所以我们最好在前向的过程中保存好这些maps,这样在反向的计算中就不用重新计算了。我们定义: 原始公式:
  • 67. 大部分时候,通过卷积多个输入maps,然后再对这些卷积值求和得到一个输出map,这样的效果往往是比较好的。在一些文献中,一般是人工选择哪些输入maps去组合得到一个输出map。若尝试去让CNN在训练的过程中学习这些组合,也就是让网络自己学习挑选哪些输入maps来计算得到输出map才是最好的。可参考http://blog.csdn.net/zouxy09/article/details/9993371
  • 68. 1.卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习2.再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元全连网络的一大优势。总结:
  • 69. 因此,卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。(即避免了有监督学习参数函数设计的难度)CNN延伸到音频的应用for example, for audio, a hidden unit might be connected to only the input units corresponding to a certain time span of the input audio clip
  • 70. 再回顾前面PPT的CNN的英语解释:Convolutional Neural Networks are a special kind of multi-layer neural networks. Like almost every other neural networks they are trained with a version of the back-propagation algorithm. Where they differ is in the architecture.
  • 71. The End