CNN与RNN本质的不同就是所基于的假设不同,由于核心假设的不同,导致实现方式的差异。

CNN

首先理解什么叫做卷积,或者说为什么要翻译为卷积神经网络。

卷积的定义:https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF/9411006?fr=aladdin


简单来说,卷积就是两个相对运动的几何图形,在相交到相离之间,重叠的面积。

对于CNN神经网络,有一个基础的假设——人类的视觉总是会关注视线内特征最明显的点


而CNN神经网络是模仿人类处理信息的过程,我们首先来看一下人类处理信息的几个特点。

(摘自《人眼的视觉特性(HVS)》http://library.qust.edu.cn/blog/post/60.html
<http://library.qust.edu.cn/blog/post/60.html>)

1)从空间频率域来看,人眼是一个低通型线性系统,即人眼受几何尺寸和视觉细胞大小的影响,人眼对太高的频率不敏感。

2) 人眼对亮度信号的空间分别率大于对色度信号的空间分辨率。

3)
由于人眼受神经系统的调节,从空间频率的角度来说,人眼又具有带通性线性系统的特性。由信号分析的理论可知,人眼视觉系统对信号进行加权求和运算,相当于使信号通过一个带通滤波器,结果会使人眼产生一种边缘增强感觉——侧抑制效应。

4)图像的边缘信息对视觉很重要,特别是边缘的位置信息。


5)人眼的视觉掩盖效应使一种局部效应,受背景照度,纹理复杂性和信号频率的影响。具有不同局部特性的区域,在保证不被人眼察觉的前提下,允许改变的信号强度不同。人眼的视觉特性是一个多信道模型。




总结来说就是,人眼对明显的特征最敏感,人眼解析食物的时候,相当于用滤镜扫过图像。

CNN正是利用了这样的一种特性,来扫描并记录图片信息。

首先生成一个滤镜,并对图像整体进行扫描过滤,通过这个滤镜filter解析,得到很多个扫描后的图片分支结果。





(图片来源https://en.wikipedia.org/wiki/Convolutional_neural_network#/media/File:Typical_cnn.png)

上图中的convolutions 就是在进行图像叠加滤镜扫描,得到一系列结果的工作。

接下来,在得到一系列卷积之后的结果后,我们进行特征的提取,也就是上图中的subsampling。




(图片来源https://en.wikipedia.org/wiki/Convolutional_neural_network)

这里有个max pool的概念,也就是提取每个小特征当中,值最大的那个。(值越大说明特征越明显,越符合上文说的人眼特性)

通过不停的特征抽取,得到最后的结果,如果这个结果与我们的预期不符,则计算误差值,反馈给每一层的卷积网络,进行微调整,再重复上面的步骤。

CNN过程中,对于边界值的处理。

第一种是在边界之外填充0,以保证滤镜可以像多次扫过中间值一样的扫过边界值。但是这样做容易产生噪声(后添加进去的值)。

第二种是边界停止,即滤镜边缘触碰到图片边界就认为这一侧过滤结束。




RNN
RNN的假设——事物的发展是按照时间序列展开的,即前一刻发生的事物会对未来的事情的发展产生影响。


所以,在处理过程中,每一刻的输出都是带着之前输出值加权之后的结果。




(图片来源 http://d3kbpzbmcynnmx.cloudfront.net/wp-content/uploads/2015/09/rnn.jpg)

公式表示t时刻的输出:




st为当前时刻的输出,xt为当前时刻的输入,U为当前时刻输入值的加权计算,st-1为上一时刻的输出,W为上一时刻输出的权重。

通过这样的计算方式,我们可以认为,当前的结果包含之前的结果,或者说受到之前结果的影响。




但是,RNN对于短期记忆的模型效果很好,却无法进行长期记忆的输出,因为权重累加过于庞大,可能导致结果失真、运算效率低下。

所以LSTM应运而生。





(图片来源https://en.wikipedia.org/wiki/Long_short-term_memory#/media/File:Peephole_Long_Short-Term_Memory.svg)

整个单元内主要包含异或门和与门。

1 异或 1 = 0  认为是相同的信息,舍弃

1 与 0 = 1  将不同的信息叠加

通过这两部运算就能减少我们的数据量,将重复信息遗忘,将未知信息记录下来,将结果更新之后,再输出。