本文章是听李宏毅教授深度学习课程之后的课程总结
卷积神经网络的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层。
卷积层:卷积运算的目的是提取输入的不同 特征,通过多层网络不断提取复杂的特征
用一张图片做例子,一般颜色是由红绿蓝三种颜色组成,所以在输入层当中图片会被分成三个channel,分别代表红绿蓝三种颜色,每个channel还有长和宽代表照片的像素,这些数据组合起来成为receptive filed作为输入。在进行卷积的时候需要定义一个kernel size作为卷积提取特征的范围,一般采用3x3的格式,除此之外还需要设定步长进行移动方便找到重要的特征,一般用1或者2作为步长。当receptive filed移动到边缘的时候会缺少数据,这时需要采用padding(填充)的方式补齐数据,补齐的数据可以是全为0,也可以是整个数据的平均值。
为了简化模型有时候我们会让一些neurons共享参数,因为他们的receptive filed范围不同,所以即使参数相同,他们的输出值也是不同的。为什么要参数共享呢?一方面,重复单元能够对特征进行识别,而不考虑它在可视域中的位置。另一方面,权值共享使得我们能更有效的进行特征抽取,因为它极大的减少了需要学习的自由变量的个数。通过控制模型的规模,卷积网络对视觉问题可以具有很好的泛化能力。
这是他们之间的关系,范围表示的时弹性度,Fully Connected Layer可以选择部分数据或者全部数据进行分析,而receptive filed可以选择neurons的参数相同也可以不同,Parameter Sharing只能让neurons共享参数。
卷积的另一种说法:
定义一个Filter和image里面的数据相乘再相加,他也需要定义步长来进行移动。与第一种不同的是,这种方法是要遍历整个照片。
Convolution有时候也会和pooling(池化)一起使用,经常是交替使用。pooling的作用是把图片变小,提取重要的特征值,但如果算力足够大或者有些模型所研究的对象比较追求精细化,则可能不会使用pooling,比如下围棋。
池化的作用:
- 减少网络中的参数计算量,从而遏制过拟合
- 增强网络对输入图像中的小变形、扭曲、平移的鲁棒性(输入里的微 小扭曲不会改变池化输出——因为我们在局部邻域已经取了最大值/ 平均值)
- 帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为 这样我们就可以探测到图片里的物体,不管它在哪个位置
下面是CNN的全过程:
卷积神经网络的步骤:
Step 1:用随机数初始化所有的卷积核和参数/权重
Step 2:将训练图片作为输入,执行前向步骤(卷积, ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。
Step 3:计算输出层的总误差
Step 4:反向传播算法计算误差相对于所有权重的梯度,并用梯度下降法更新所有的卷积核和参数/权重的值,以使输出误差最小化