深度学习专项课程(4)(第二周)

深度学习专项课程(4)(第二周)

本周介绍了一些经典的网络结构。

经典网络

LeNet

dl_60.png

AlexNet

dl_61.png

VGG16

dl_62.png

残差网络

非常深的网络是很难训练的,因为存在梯度消失和梯度爆炸的问题。这节课我们学习跳远连接,它可以从网络的某一层获取激活值,然后迅速反馈给另外一层,甚至是神经网络的更深层。使用跳远连接我们可以构建训练深度网络的残差网络。

残差网络是由残差块构成的,下图是一个残差块的结构。

dl_63.png

忽略上图中蓝色的箭头线,那么这两层的激活值传递过程如下:

$$
\large
z^{[l+1]}=W^{[l+1]} a{[l]} + b^{[l+1]} \\
a^{[l+1]}=g(z{[l+1]}) \\
z^{[l+2]}=W^{[l+2]} a{[l+1]} + b^{[l+2]} \\

$$
加上蓝色的箭头线后,传递过程变成了下面的样子(只有最后一个公式有变化):
$$
\large
a^{[l+2]}=g(z{[l+2]} + a^{[l]})
$$

这就相当于激活值$a$走了一个捷径,或者说是进行了跳远连接。

在下图中将一个普通的网络进行跳远连接,这样就形成了一个残差网络。
dl_64.png


残差网络 为什么有用呢?

dl_65.png

上面有两个神经网络,我们在其中一个的末尾衔接上一个残差块。再将最后一个激活值的传递公式写出。由于正则化等的使用,$W^{[l+2]}$ 和 $b^{[l+2]}$ 可能会接近于 0 。这样的话 $a^{[l+2]}$ 就等于 $g(a^{[l]})$(这里使用 ReLU 激活函数) ,因为这里$a^{[l]}$ 为非负值,所以就可得到 $a^{[l+2]}=a^{[l]}$。

结果表明,残差块学习这个恒等函数残差块并不难,这意味着即使给网络增加了两层,但它的效率也不会降低。虽然多了两层,但所做的也只是将$a^{[l]}$的值赋给$a^{[l+2]}$。
但我们的目的并不只是保持网络的效率不变,我们还要提高它的表现。想象一下,如果这两层网络学习到了有用的东西,那么它就可以表现得比恒等函数更好。

网络中的网络/1x1 卷积

1x1 卷积的作用简单的说就是给神经网络添加一个非线性的函数,从而减少或保持输入层中的信道数量,当然也可以增加信道的数量。

dl_66.png

我们用这个 1x1x32 的过滤器处理 6x6x32 的输入,即用过滤器遍历输入的 36 个单元格,与过滤器中对应的数字相乘并求和,在经过一个 ReLu 函数,输出到最后的矩阵中。这样就得到了一个 6x6x1 的输出。以此类推,如果使用两个 1x1x32 的过滤器,就可以得到 6x6x2 的输出。

这样就达到了修改信道数量的目的。

Inception 网络

在设计神经网络的时候,需要选择过滤器的大小 1x3,3x3 或 5x5,又或是使用 池化层。 Inception 网络的作用就是代替你做出这些选择,虽然网络的结构变复杂了,但是效果却变好了。

dl_67.png

我们对输入层进行 1x1 ,3x3 ,5x5 卷积 和 最大池化处理,并且将结果堆叠起来得到最后的输出,这样就可以让网络自己学习使用哪个参数。
但这样的缺点也是显而易见的,训练网络所需要的计算量大大的增加了。前面讲的 1x1 卷积 可以帮助我们减少计算量。

下图是上面 5x5 过滤器的计算过程,这里一共需要进行 1.2 亿次乘法运算。

dl_68.png

而在中间加入一个 1x1 的卷积之后,只需要进项 0.12 亿次乘法运算,并且输出的结果尺寸不变。
这个 1x1 的卷积层 也被称为瓶颈层。

dl_69.png

也许有人疑问,这样的作法是否会降低神经网络的性能,事实证明只要瓶颈层设置的合理,性能就不会受到影响。


有了以上的铺垫,我们就可以搭建 Inception 网络了。

下图是一个 Inception 模块,将多个这样的模块拼接起来就得到了 Inception 网络。

dl_70.png

dl_71.png


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×