目录
1、三种经典的深度卷积网络
1.1、LeNet-5
1.2、AlexNet
1.3、VGG
2、残差网络
3、Inception 网络(Inception network)
4、迁移学习
5、数据增强
1、三种经典的深度卷积网络
1.1、LeNet-5
- 使用 sigmoid 函数和 tanh 函数,而不是ReLu 函数,这篇论文中使用的正是 sigmoid 函数和 tanh 函数
- LeNet-5 是针对灰度图片训练的,所以图片的大小只有 32×32×1
- 6 个 5×5 的过滤器,步幅为 1 。由于使用了 6 个过滤器,步幅为 1 , padding 为 0 ,输出结果为 28×28×6 , 图像尺寸从 32×32 缩小到 28×28 。然后进行池化操作
- 接下来是卷积层,用一组 16 个 5×5 的过滤器,新的输出结果有 16 个通道
- 池化层,高度和宽度再缩小一半,输出一个 5×5×16 的图像。将所有数字相 乘,乘积是 400
- 全连接层,在全连接层中,有 400 个节点,每个节点有 120 个神经元,这里已 经有了一个全连接层。但有时还会从这 400 个节点中抽取一部分节点构建另一个全连接层, 就像这样,有 2 个全连接层
- 最后一步就是利用这 84 个特征得到最后的输出,我们还可以在这里再加一个节点用来 预测𝑦^ 的值, 𝑦^ 有 10 个可能的值,对应识别 0-9 这 10 个数字
1.2、AlexNet
- 实际上,这种神经网络与 LeNet 有很多相似之处,不过 AlexNet 要大得多。正如前面讲到的 LeNet 或 LeNet-5 大约有 6 万个参数,而 AlexNet 包含约 6000 万个参数。当用于训练图 像和数据集时,AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据,这一点 AlexNet 表现出色。 AlexNet 比 LeNet 表现更为出色的另一个原因是它使用了 ReLu 激活函数。 GPU 的处理速度还比较慢,所以 AlexNet 采用了非常复杂的 方法在两个 GPU 上进行训练。大致原理是,这些层分别拆分到两个不同的 GPU 上,同时还 专门有一个方法用于两个 GPU 进行交流
1.3、VGG
- VGG-16 网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络
- VGG-16 的这个数字 16 ,就是指在这个网络中包含 16 个卷积层和全连接 层。确实是个很大的网络,总共包含约 1.38 亿个参数,即便以现在的标准来看都算是非常 大的网络。但 VGG-16 的结构并不复杂,这点非常吸引人,而且这种网络结构很规整,都是 几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由 64 翻倍变成 128 ,再到 256 和 512 。作者可能认为 512 已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大
2、残差网络
- 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题
- 跳跃连接( Skip connection ),它可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层
- 可以利用跳跃连接构建能够训练深度网络的 ResNets , 有时深度能够超过 100 层
- 在残差网络中有一点变化,我们将 𝑎 [𝑙] 直接向后,拷贝到神经网络的深层,在 ReLU 非线性激活函数前加上 𝑎 [𝑙] ,这是一条捷径。 𝑎 [𝑙] 的信息直接到达神经网络的深层,不再沿着主路径传递,这就意味着最后这个等式 ( 𝑎 [𝑙+2] = 𝑔(𝑧 [𝑙+2] ) ) 去掉了,取而代之的是另一个 ReLU 非 线性函数,仍然对𝑧 [𝑙+2] 进行 𝑔 函数处理,但这次要加上 𝑎 [𝑙] ,即: 𝑎 [𝑙+2] = 𝑔(𝑧 [𝑙+2] + 𝑎 [𝑙] ) , 也就是加上的这个𝑎 [𝑙]产生了一个残差块。ResNet 网络就是通过将很多这样的残差块堆积在一起,形成一个很深神经网络
3、Inception 网络(Inception network)
- 构建卷积层时,要决定过滤器的大小究竟是 1×1,3×3 还是 5×5,或者要不要添加池化层。而 Inception 网络的作用就是代替你来决定,虽然网络架因此变得更加复杂,但网络表现却非常好
- Inception 网络是由 Google 在 2014 年提出的一种卷积神经网络结构,用于解决深层网络中的梯度消失和参数爆炸问题。其中,1*1 的卷积被广泛应用于通道的压缩
- 在 Inception 网络中,1*1 卷积被称为 Inception 模块的 1*1 分支。它主要用于降低网络的计算量和参数数量,同时也能够提高模型的表达能力。具体实现方式如下:
(1)、输入的特征图为 H * W * C ,其中 H 表示高度,W 表示宽度,C 表示通道数
(2)、通过使用 1*1 的卷积核,将输入的特征图进行通道的压缩。使用较小的通道数可以降低计算量和参数数量,同时也可以增加网络的非线性能力
(3)、1*1 卷积核的数量通常是根据需求进行设置的。例如,如果希望将输入特征图的通道数压缩为原来的一半,那么可以设置 1*1 卷积核的数量为 C/2
(4)、1*1 卷积的操作是逐像素进行的,即对于输入特征图的每个像素点,都会与 1*1 卷积核进行卷积运算
(5)、经过 1*1 卷积操作后,输出的特征图为 H * W * (C/2)
- Inception网络模块
- Inception网络
4、迁移学习
- 如果有大量数据,应该做的就是用开源的网络和它的权重,把这、所有的权重当作初始化,然后训练整个网络。再次注意,如果这是一个 1000 节点的 softmax,而只有三个输出,需要自己的 softmax 输出层来输出你要的标签
5、数据增强
- 数据增强是经常使用的一种技巧来提高计算机视觉系统的表现
- 数据增强的方法:
(1)、 垂直镜像对称:假如,训练集中有这张图片,然后将其
翻转得到右边的图像
(2)、随机裁剪,给定一个数据集,然后开始随机裁剪,可能修剪这 个(编号 1),选择裁剪这个(编号 2),这个(编号 3),可以得到不同的图片放在数据集中,你的训练集中有不同的裁剪。随机裁剪并不是一个完美的数据增强的方法,如果你随机裁剪的那一部分(红色方框标记部分,编号 4),这部分看起来不像猫。但在实践中,这个方法还是很实用的,随机裁剪构成了很大一部分的真实图片