- 卷积神经网络常用于做图像处理;
- 一般的深层神经网络做图像处理,会有很多的参数:例如一个像素为的图像,倘若第一层有1000个神经元,第一层神经网络就会有个参数(向量);
- 卷积神经网络是一种简化的网络架构;
- 期望的神经网络:每个神经元代表一个基本的分类器,随着网络深度增加,分类器做的事情越复杂。
卷积神经网络
CNN网络架构
CNN——Convolution(卷积计算)
- Filter是一个需要学习的参数矩阵,维度小于像素矩阵的维度, 一个Filter就是一个神经元;
- 从像素矩阵的左上角开始向右或向下移动,Filter和像素矩阵对应部分做内积,向右或向下移动的距离为stride,一个像素矩阵经过一个Filter后得到一个新的矩阵;
- 如果Filter与像素矩阵的大小不完全匹配,可以忽略边缘像素,也可以补充像素进行计算;
- 可以有多个Filter,得到多维度的Feature Map(维度是Filter的个数);
- 彩色图像的像素矩阵是三维的,Filter也是三维的。
特点:
- 局部关联:Filter的维度比像素矩阵小;
- 参数共享:一组固定的权重和不同窗口内的数据做内积;
- 相对全连接网络,具有更少的参数。
CNN——Pooling(池化)
- Max pooling:对于每个(应该可以指定其他)的窗口,选出最大的数作为输出矩阵的相应元素值;
- Average pooling:对于每个(应该可以指定其他)的窗口,选出窗口内的平均值作为输出矩阵的相应元素值。
特点:
- 特征不变性:在图像处理中,池化操作就是图像的resize;
- 特征降维:压缩数据和参数的量,去掉冗余信息;
- 在一定程度上放置过拟合。
CNN——Flatten
- 将经过多次卷积-池化的输出矩阵作为输入,放入一个全连接前馈神经网络
为什么CNN适合做图像处理
1. 要识别的patterns相对整张图片来说是很小的一部分
- 卷积层的局部关联特征
2. 同一patterns在不同图片中的位置不同
- 卷积层的参数共享特征
3. subsampling不改变图像特征
存在的问题:
Filter的大小是相同的(共享的参数),如果要识别的pattern对于不同图片其大小不一样,可以对数据作预处理,例如,增加一个网络,这个网络可以判断哪些位置需要做图像的旋转、缩放。
CNN in Keras
卷积神经网络是如何学习的——理解CNN
卷积层-池化层在学习什么
- 定义第个Filter被activate的程度为第个Filter中所有元素的和;
- 对于训练好的模型,即Filter中参数固定,现在寻找一张图像x,使得第个Filter被activate的程度最大;
- 结果见右图,可见每个Filter都在学习某个局部特征。
全连接网络的隐层在学习什么
- 全连接前馈神经网络的隐层的每个神经元都在学习图像的某个整体特征
全连接网络的输出层在学习什么
- 理想地,全连接前馈神经网络的输出层神经元输出应该就是识别出的图像;
- 实际上,输出层神经元的输出基本一样;
- 为输出识别的图像“应有的样子”,增加一些约束:笔迹应该是稀疏的(识别手写字体场景)
Deep Dream
- Deep Dream:给机器一张图片,机器会加上一些它看到的东西
- CNN夸大它看到的
Deep Style
playing go
- 为什么CNN可用于playing go
Speech
Text