考虑 103×103<script type="math/tex" id="MathJax-Element-1">10^3\times 10^3</script> 的输入图像:

  • 全连接,隐层神经元的数目为 106<script type="math/tex" id="MathJax-Element-2">10^6</script> 时,则每一个输入像素与每一个隐层神经元之间都是待学习的参数,
    • 数目为 106×106=1012<script type="math/tex" id="MathJax-Element-3">10^6\times 10^6=10^{12}</script>
  • 卷积,卷积核的大小为 10×10<script type="math/tex" id="MathJax-Element-4">10\times 10</script> 时,
    • 步长为 10,103×10310×10×(10×10)<script type="math/tex" id="MathJax-Element-5">\frac{10^3\times 10^3}{10\times 10}\times \left(10\times 10\right)</script>,103×10310×10<script type="math/tex" id="MathJax-Element-6">\frac{10^3\times 10^3}{10\times 10}</script>表示的是输入图像可划分的块数,也即经卷机作用后的输出图像;
    • 步长为 1,(10310+1)×(10310+1)(10×10)<script type="math/tex" id="MathJax-Element-7">\left(10^3-10+1\right)\times\left(10^3-10+1\right)\cdot \left(10\times 10\right)</script>
    • 在不考虑步长的前提下,可近似将待学习的参数的数目视为 (103×103)(10×10)<script type="math/tex" id="MathJax-Element-8">\left(10^3\times 10^3\right)\cdot \left(10\times 10\right)</script>

1. 全连接层对参数个数的显著提升

现考虑图像输入层和 500 个隐层神经元的全连接:

  • MNIST:28×28×1×500=392000<script type="math/tex" id="MathJax-Element-9">28\times 28\times 1\times 500=392000</script>
  • CIfar:32×32×3×500=1536000<script type="math/tex" id="MathJax-Element-10">32\times 32\times 3\times 500=1536000</script>
    • 而对于卷积操作而言,如 5×5<script type="math/tex" id="MathJax-Element-11">5\times 5</script> 深度为 16 的卷积核而言,则需要的计算量为:5×5×3×16+16=1216<script type="math/tex" id="MathJax-Element-12">5\times 5\times 3\times 16+16=1216</script>,极大地降低了参数的规模;

参数增多导致计算速度减慢,且很容易导致过拟合。

2. 卷积的共享参数特性

通过一个某一卷积核(过滤器),将一个 2×2×3<script type="math/tex" id="MathJax-Element-13">2\times 2\times 3</script> 的节点矩阵变化为 1×1×5<script type="math/tex" id="MathJax-Element-14">1\times 1\times 5</script> 的单位节点矩阵,则本次卷积操作,共需要的参数为:

2×2×3×5+565
<script type="math/tex; mode=display" id="MathJax-Element-15"> 2\times 2\times 3\times 5+5 ⇒ 65 </script>

+5 表示偏值项参数,

对于 cifar-10 数据集,输入层矩阵的维度是 32×32×3<script type="math/tex" id="MathJax-Element-16">32\times 32\times 3</script>,假设第一层卷积层使用尺寸为 5×5<script type="math/tex" id="MathJax-Element-17">5\times 5</script> 深度为 16,则此卷基层的参数为:

5×5×3×16+×16=1216
<script type="math/tex; mode=display" id="MathJax-Element-300"> 5\times 5\times 3\times 16+\times 16=1216 </script>

注意区分卷积层的参数,与当前输入层与卷积层的连接的个数(也即参数的个数与连接的数目):

比如对于 LeNet-5 网络,32×32<script type="math/tex" id="MathJax-Element-301">32\times 32</script> 的输入数据,经过 5×5×1×6<script type="math/tex" id="MathJax-Element-302">5\times 5\times 1\times 6</script> 的卷积,得到 28×28×6<script type="math/tex" id="MathJax-Element-303">28\times 28\times 6</script> 的特征映射:

  • 卷积层的参数:5×5××1×6+6=156<script type="math/tex" id="MathJax-Element-304">5\times 5\times \times 1\times 6+6=156</script>
    • 核的长*核的宽*输入的通道数*输出的通道数;
  • 卷积层共 28×28×6=4704<script type="math/tex" id="MathJax-Element-305">28\times 28\times 6=4704</script> 个节点,每个节点和 5×5<script type="math/tex" id="MathJax-Element-306">5\times 5</script> 个当前输入层节点相连,因此共连接数:4704×(5×5+1)=122304<script type="math/tex" id="MathJax-Element-307">4704\times(5\times 5+1)=122304</script>
    • 连接的数目与输入层的大小无关;

3. 卷积输出矩阵尺寸的大小

通过使用填充(padding,比如 zero-padding),或者使用过滤器移动的步长来结果输出矩阵的大小。

下面的公式给出在同时使用全零填充时结果矩阵的大小:

outlength=inlength/stridelengthoutwidth=inlength/stridewidth
<script type="math/tex; mode=display" id="MathJax-Element-26"> out_{length}=\lceil in_{length}/stride_{length} \rceil\\ out_{width}=\lceil in_{length}/stride_{width} \rceil </script>

如果不使用填充:

outlength=(inlengthfilterlength+1)/stridelengthoutwidth=(inlengthfilterwidth+1)/stridewidth
<script type="math/tex; mode=display" id="MathJax-Element-27"> out_{length}=\lceil (in_{length}-filter_{length}+1)/stride_{length} \rceil\\ out_{width}=\lceil (in_{length}-filter_{width}+1)/stride_{width} \rceil </script>
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐