aihot  2017-10-14 11:30:16  深度学习 |   查看评论   

  我们来想一下卷积多张图的意义在哪?我们知道,越往后的卷积核的feature就越高级越抽象,而这个高级feature往往是通过组合低级feature得到的,比如低级feature可能是折线,而高级feature就可能是一个轮子、一张人脸。卷积多张图就是组合低级feature尝试生成高级feature的过程,这种不对称的组合连接的方式有利于提取多种组合特征。

  这里计算可训练参数和连接数也比C1层复杂得多,C3层一共(5*5*3+1)*6 + (5*5*4+1)*6 + (5*5*4+1)*3 + (5*5*6+1)*1 = 1516个训练参数,需要注意的是,之前的算法是(5*5+1)*卷积核数这里不再适用,因为每个卷积核不再只卷积一张图,5\*5后面要接着乘以卷积图的张图,因为之前只有1张,所以就省略了,这里每个卷积核都卷积多张图,所以不能省略,而且要分开计算,因为不同的卷积核卷积图的张数也分为不同的几种;至于连接数,代之前的公式,一共(10*10)*1516 = 151600个连接。

  再后面是S4层,用16个2*2的池化核将16张10*10的FM池化成16张5*5的图,一共16\*2 = 32个可训练参数,一共(5*5)*16*5 = 2000个连接。

  然后是C5层,我们看到S4层每张图就已经是5*5的了,而我们的卷积核也是5*5的,所以卷积完了就是一个点。这里用120个卷积核,生成120张FM,每张FM就一个点。每张FM都卷积S4层全部16张图,卷积多张图的方法也和C3层讲的一样。

  再后面是F6层,F6层是全连接层,有84个单元,与C5层全连接,有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重限量之间的点积,再加上一个偏置。然后将其传递给Sigmoid函数产生单元i的一个状态。

  输出层也是全连接层,前面提到过它的计算方式,这里重复一下,一共10个输出,10个单元,每个单元有84个输入,且如果节点i的值为0,则网络识别的结果是数字i。采用的是欧式径向基函数(ERBF)的网络连接方式。假设x是上一层的输入,y是ERBF的输出,则ERBF输出的计算方式是:

浅谈深度学习基础

 

  其意义是计算每个输入向量与参数向量之间的欧式距离,输入离参数向量越远,ERBF的输出值就越大,输出值越小,也即越匹配越契合。一个ERBF的输出可以被理解为衡量输入模式和ERBF相关联类的一个模型的匹配程度的惩罚项。

  CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN特征检测层通过训练数据进行学习,在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者,由于同一FM上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,避免了特征提取和分类过程中数据重建的复杂度。

递归神经网络(RNN)

  递归神经网络(RNN),是两种人工神经网络的总称。一种是时间递归神经网络(recurrent neural network),另一种是结构递归神经网络(recursive neural network)。时间递归神经网络的神经元间连接构成有向图,而结构递归神经网络利用相似的神经网络结构递归构造更为复杂的深度网络。RNN一般指代时间递归神经网络,也叫循环神经网络。单纯递归神经网络因为无法处理随着递归,梯度爆炸或消失的问题,难以捕捉长期时间关联;而LSTM(长短期记忆神经网络,Long-Short Term Memory)可以很好地解决这个问题。

  RNN的目的是用来处理序列数据,普通的前馈神经网络,是从输入层到隐层再到输出层,相邻层的节点之间是全连接的,然而一层内的节点之间却是没有连接的。这种普通的神经网络对很多问题是无能为力的,例如,你要预测句子中的下一个词是什么就一般要用到前面的词,因为词与词之间往往不是相互独立的。RNN之所以被称为循环神经网络,就是因为一个序列当前的输出不仅和当前的输入有关,还和过去的输出有关。RNN会对前面的输出进行记忆并用在当前的输出计算之中,同时意味着隐层内的节点也不再是无连接的。

  举一个例子,填槽问题,有这样一句话,『I would like to arrive Taipei on November 2nd』。将这句话作为输入提供给机票预订系统,需要填的槽位有三个,一个是出发地,一个是目的地,另一个是到达时间,当然这句话只能填两个。

  首先我们尝试用普通前馈神经网络来解决这个问题。比如有这样一个神经网络,它有两个输出神经元,分别对应三个槽,一个槽是出发地,一个槽是目的地,一个槽是到达时间;然后我们要训练这个神经网络,使其在接受『I would like to arrive Taipei on November 2nd』输入序列时,目的地槽位对应输出神经元的激活值在输入Taipei时达到最大,而到达时间槽位对应输出神经元的激活值在输入November 2nd时达到最大?

  那我们考虑一下,如果将输入序列这样修改一下『I would like to leave Taipei on November 2nd』,我们还能把Taipei填到目的地槽位里面吗?难道我们要先检索一下句子里的是leave还是arrive?要是人家用其他的词呢?这就是人工学习而不是机器学习了,都是治标不治本的做法。最本质的解决方法是要让神经网络拥有『记忆』。

浅谈深度学习基础

 

  我们不断重复使用同样的网络结构,将其隐层相连,前面隐层的输出作为后面隐层输入的一部分使用。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自浅谈深度学习基础(下)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]