本节介绍一些有关卷积神经网络(CNN)和循环神经网络(RNN)的相关知识
人在认知图像时是分层抽象的,首先理解的是颜色和亮度,然后是边缘、角点、直线等局部细节特征,接下来是纹理、几何形状等更复杂的信息和结构,最后形成整个物体的概念。
卷积神经网络工作时模拟人认知图像的过程,它由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示。
由于大多数的情况下我们通常使用最大池化,所以我们定义ak为第k个特征图的和
假定有一个训练好的模型,我们通过梯度上升的方法寻找x使得ak取最大值
由结果图可知当图片存在一些有规律的条纹的时候ak的值是最大的,这也就是卷积核提取特征的原理,不同的卷积核可以提取不同的特征,网络最后通过这些特征来做出判断
采用同样的办法,我们也可以找到使得全连接某一个节点最大的x
同样的方法,我们去计算输出层的某一个节点,寻找最大x使得yi最大,我们输入的是数字的图片,所以yi对应着数字i,按照常理推断,我们所得出的x应该是一个非常具有辨识性的数字i的图片,但是实际上并不是,也就是说实际上计算机学习到的东西和人脑不相同
但是我们也有办法让神经网络反向生成的x和我们人脑看到的类似,例如可以调整计算x的方法,通过寻找x使得
y i − ∑ i , j ∣ x i j ∣ {y^i-}\sum_{i,j}|x_{ij}| yi−i,j∑∣xij∣
最小,减去xij的绝对值的和原因是要让找出来的图像尽量黑白分明
实际上还有很多方法去进一步计算更加符合人脑的x
有兴趣还可以去了解一下Deep Dream和Deep Style
循环神经网络是一种具有记忆力的网络,它可以记忆前边的输入,使得前边的输入n对后边n+1的输出产生影响
注:蓝色框为记忆单元,初始值赋值为(0,0),所有的权重设置为1,bias为0
我们输入的数据值是[[1,1],[1,1],[2,2]],我可以观察到第一个[1,1]的输出值为[4,4],然后更新记忆单元数值为[2,2]
输入第二个[1,1],这时的输出结果为[12,12],也就是说前一个[1,1]对后一个[1,1]的输出结果产生影响,同时如果调换输入的顺序,RNN会有一个完全不同的输出,RNN对于输入顺序的变化很敏感,所以,RNN对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,它可以区分出ABC和CBA
而对于全连接神经网络在训练时ABC和CBA是没有区别的
Jordan network和Elman network是RNN的两种不同形式,其中Elman network是我们常用的一种形式,LSTM、GRU都是采用的Elman network,传说Jordan network的准确率是要高于Elman network的,但是Elman network每一个循环层都是相互独立的,网络结构的设计更加灵活。另外,而当Jordan network的输出层与循环层的维度不一致时还需要额外的调整,而Elman network则不需要。因此当前主流的循环神经网络都是基于Elman network的,所以,通常我们所说的循环神经网络(RNN),默认指的就是Elman network结构的循环神经网络。
LSTM和GRU这里就不细说了,有两篇写LSTM计算原理的博文非常不错,感兴趣的可以参考一下
https://blog.csdn.net/zhengxqq27/article/details/90481590
https://www.cnblogs.com/bonelee/p/12106075.html
对于CNN和RNN的一些相关知识进行了一些介绍