参数共享或权重复制是深度学习中经常被忽略的领域。但是了解这个简单的概念有助于更广泛地理解卷积神经网络的内部。卷积神经网络(cnn)能够使那些通过网络馈送的图像在进行仿射变换时具有不变性。 这个特点提供了识别偏移图案、识别倾斜或轻微扭曲的图像的能力。
仿射不变性的这些特征是由于CNN架构的三个主要属性而引入的。
- 局部感受领域
- 权值共享(参数共享)
- 空间的采样
在本文中,我们将探索权值共享,并了解它们的用途以及它们在CNN架构中的优势。本文针对从事机器学习或更具体地说是深度学习的各个层次的人。
介绍
让我们首先在脑海中演示CNN中的一个卷积层。。
CNN中的卷积层(conv层)包含一组单元,这些单元也可以称为神经元。
conv层还包括层内的几个过滤器,这是一个预定义的超参数。
一个层内过滤器的数量表示激活/特征映射的输出量的深度维度,该映射由conv层创建,作为下一层的输入。
每一个滤波器都有一个设定的宽度和高度,对应于层内单个单元的局部接收场。作用于输入数据的滤波器产生一个卷积层的输出,即特征映射。
在CNN的训练阶段,可以学习过滤器中的权重值。卷卷积层的输出维数有一个深度分量,如果我们对输出的每一段进行分割,我们将得到一个二维平面的特征映射。在单个二维平面上使用的过滤器包含一个权重,该权重在同一平面上使用的所有过滤器之间共享。
这样做的好处是,我们在输入数据的另一部分与输入数据的另一部分保持相同的特征检测器。
卷积层的输出是一组特征图,其中每个特征图是单元内固定权重参数与输入数据之间的卷积运算结果。
卷积神经网络层的一个基本特征是它的特征映射能够反映对输入图像所做的任何仿射变换,而这些仿射变换是通过输入层输入的。
因此,对输入数据进行任何偏移、倾斜或定向,特征映射都将提供一个输出,该输出将根据输入数据所受的量进行偏移、倾斜或定向。
将理论付诸实践
本节的目的是揭示卷积神经网络中发生的权值共享的好处。
我们将在两种流行的CNN架构(LeNet和AlexNet)的第一个卷积层中得出不同权值共享和权值共享的可训练权重的数量。
以下是要采取的步骤:·
1. 获取conv 层的输出宽度
(输入大小的宽度-过滤器大小+(2 * Padding)/步幅)+1 =卷积层的输出宽度
- 计算conv层中神经元/单位的数量
- 计算没有使用权值共享的训练参数的数量(包括偏差)
- 计算使用权值共享的训练参数(包括偏差)的数量
下表描述了来自AlexNet和LeNet CNN架构的信息,这些信息将用于得出卷积层内训练参数/权重的数量。
AlexNet
- conv层的输出宽度:=((227-11)/ 4)+1= 55(conv层输出宽度)
- conv层中神经元/单位的数量=输出高度*输出宽度*特征图的数量= 55*55*96(转换输出量)= 290,400单位
- conv层内的训练参数或权重数(不使用权值共享)= 290400 *((11* 11 * 3)+ 1偏差)=105,415,600
- 使用权值共享的训练参数或权重的数量= 96 *((11 * 11 *3)+1个偏差)= 34944
LeNet
- conv层的输出宽度:=(((28–5)/ 1)+1= 24(conv层输出宽度)
- conv层中神经元/单位的数量=输出高度*输出宽度*特征图的数量= 24*24*6(转换输出量)= 3,456单位
- conv层内的训练参数或权重数(不使用权值共享)= 3456 *((5 * 5 * 1)+ 1偏差)=89,856
- 使用权值共享的训练参数或权重的数量= 6 *((5 * 5 * 1)+1偏差)= 156
总结
显然,通过参数共享,我们可以减少conv层中的权重数量。
参数共享用于网络中的所有conv层。
参数共享减少了训练时间; 这是减少反向传播过程中必须进行的权重更新次数的直接好处。
重申一下,当根据过滤器与卷积层中某个平面内某个单元的输入数据之间的卷积结果生成特征图时就会产生参数共享。 此层平面内的所有单元共享相同的权重;因此称为权重/参数共享。