吴恩达深度学习课程笔记(四):卷积神经网络1
吴恩达深度学习课程笔记(四):卷积神经网络1
第一周 卷积神经网络
1.1 计算机视觉
用途:
- 图像分类;
- 目标检测;
- 风格迁移;
- 。。。。。。
挑战:需要的数据量大:
- 对一个1000*1000的图片,有1000* 1000*3即3 000 000 个输入特征,如果使用全连接网络,假设第一隐层有1000个单元,那么,光第一隐层就有(1000, 3 000 000)这么大的,即3000 000 000个参数。难以获得足够的数据来防止过拟合。所需要的内存也是无法接受的。
为了能够处理大图,必须使用卷积。
1.2 边缘检测示例
上图中,为33的过滤器(filter,又叫核,kernel);
用表示卷积运算(convolution)。
卷积为:用filter和矩阵的第一个33部分的元素相乘再相加,然后filter右移一列,相乘再相加。。。到矩阵最右端后下移一行,重复上述操作。最后卷积的结果为一个44的矩阵。
上图所使用的过滤器(卷积核)为垂直边缘检测器。
在tensorflow中,卷积为tf.nn.conv2d
。
在Keras中,卷积为Conv2D
。
这就是垂直边缘检测器。通过该卷积核,卷积出图像的垂直边缘轮廓。
如果图像为10001000的,那么卷积出来的轮廓图像为998998。
1.3 更多边缘检测内容
该卷积核(垂直边缘检测器)可以区分明暗,即图像是由明转暗,还是由暗转明。
上图,垂直边缘检测器翻转,得到水平边缘检测器。
Sobel 边缘检测器,增加了中间一行元素的权重,使得结果鲁棒性更好。
Scharr滤波器。
随着深度学习的发展,当需要坚检测出复杂图像的边缘,不一定非要使用类似上边介绍的这九个数字,但可以从这些前人成果中获益。
即,把9个数字作为参数,使用反向传播算法,让神经网络来理解这九个数字。最后得到一个出色的边缘检测器。
使用神经网络能够学习任何改网络所需要的滤波器,并在整幅图上使用该滤波器,检测出图像的边缘。
思想:将滤波器的九个数字作为神经网络的参数来训练。
1.4 Padding
一个的图像和一个的图像卷积后的结果是一个的图像。
这样卷积的缺点:
- 图像会缩小;
- 尤其是深度网络中,一层一层的卷积下去,图像会大幅缩水。
- 在角落和边缘区域的像素点在输出中采用较少,即丢弃了图像边缘位置。
解决办法:填充图像(Padding)。
一般用填充。
一个图像的上下左右都填充,每个边填充行(列),那么,最后的卷积结果变成了。
比如,在的图像周围在加一层像素点,变成。这样,卷积核的结果是。
现在存在两种卷积:不padding的卷积和padding的卷积:
- Vaild convolution:
- 不填充。
- Same convolution:
- 填充的效果是,卷积后的图像大小和填充前图像的大小一致。
- ,即。
- 卷积核的大小一般是奇数。
- 可以做到对称填充。
- 有中心点。
- 四条边都填充。
1.5 卷积步长
卷积的步长不一定是1。
一个步长为的卷积的结果如下:
数学意义上的卷积,需要先进行翻转,之后再互相关。深度学习没有翻转,只有互相关。但深度学习领域,习惯上,将这种互相关称之为卷积。
- 数学卷积:翻转,互相关;
- 深度学习卷积:互相关;
使用的都是符号。
1.6 多维卷积
卷积核的通道数 = 图像的通道数;
卷积的结果为二维矩阵。
卷积核还是在二维平面上按照既定步长移动,只不过变成立方体内部数据相乘再相加。
其中,为通道数;为卷积核的个数。
图像的通道数(channels)也叫做3维立方体的深度(depth)。
使用不同的卷积核,比如上图使用垂直边缘检测器和水平边缘检测器,识别图像的不同特征。
1.7 卷积层
如何构建神经网络的卷积层?
卷积层的参数是过滤器的参数。那么,卷积层的参数个数仅由过滤器的size和过滤器个数影响。比如,卷积层有10个333的过滤器,那么卷积层就是280个参数。不管输入的图像有多大,都是这280个参数。这就是卷积神经网络的一个特征,叫做“避免过拟合”。
注:的顺序仅为吴恩达的顺序,并不是同一标准。也有人喜欢将通道放在最前。
再注:以上标记法也仅为吴恩达标记的方式,在今天,深度学习领域还没有达成一致的标记法。
1.8 小例子:一个简单的卷积网络
卷积结束后展开成一个向量,给到逻辑回归,判断是否为猫。
可以看到,随着一层一层的卷积,输出的数据大小在不断的减小,但是信道数量在不断的增加。
确定超参数是一件费功夫的事情。
一个典型的卷积神经网络有:
- 卷积层(conv:convolution);
- 池化层(pool:pooling);
- 全连接层(FC:fully connected) 。
1.9 池化层
作用:
- 缩减模型大小,提高运算速度;
- 提高所提取特征的鲁棒性。
最大池化(max pooling):
输入是某些特征的集合。数字大(9)可能意味着提取了某个特定特征。其他的地方没有这个特征。最大化操作的功能就是只要在任何一个框(图中有四个框)内提取到某个特征。它都会保留到最大池化的输出中。
最大池化作用的一种理解:如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,那么最大池化保留的结果也很小。
使用最大池化的原因:在很多实验中效果很好。
最大池化的操作是分别对每个信道单独执行的。
比如输入的图像有两个信道,那么分别对两个信道做最大池化。
池化的输出是。
其中,是输入的信道数。
注意:卷积的输出信道数 = 过滤器的个数。池化的输出信道数 = 输入的信道数。
个信道中的每一个信道都是单独地执行最大池化。
平均池化(average pooling):
类似最大池化,最大池化选择最大值,平均池化将窗口内的所有值求平均。
最大池化比平均池更常用。
总结:
超参数:
- :过滤器大小;
- :步长;
常见的参数为=2,=2,效果是高度和宽度减半。
也有=3,=2。
超参数很少使用,即。
则:
输入:;
输出:。
池化没有需要学习的参数。池化只是静态属性。
1.10 卷积神经网络示例
存在两种计算神经网络层数的方式。
- 卷积层 + 池化层 = 一层;
- 卷积层 = 一层,池化层 = 一层。
吴恩达采用第一种方式。这种方式,在统计神经网络的层数时,可以只统计具有权重和参数的层(池化层没有权重和参数,只有超参数)。
关于超参数选择的常规做法:
尽量不要知己设置超参数;查看文献,看别人采用了哪些超参数;选择一个在别人的任务中效果很好的架构。那么这个架构也有可能使用与自己的应用程序。
随着神经网络深度的加深,高度、宽度通常都会减小,信道数会增加。
神经网络的一种模式:
conv(一层或多层)- pool - conv - pool - FC - FC - FC - Softmax 。
修正:
CONV1的parameters应该为608(5 X 5 X 3 X 8 + 8);
CONV2的parameters应该为3216(5 X 5 X 8 X 16 + 16)。
结论:
- 池化层无参数;卷积层参数少;绝大部分参数在全连接层;
- **值数量随着网络深度的增加而减小,但如果**值数量下降的太快,会影响网络性能。
1.11 为什么用卷积?
和只用全连接层(FC)相比,卷积层的两个主要优势:
- 参数共享;
- 稀疏连接;
通过这两种机制,神经网络减少了大量参数。以便于我们用更小的训练集来训练它,从而预测过拟合。
CNN具有平移不变属性。比如图像向有移动几个像素,仍然能够识别。因为神经网络的卷积结构即使移动几个像素,这张图像依然具有非常相似的特征,应该属于同样的输出标记。