您的位置:首页 > 理论基础 > 计算机网络

吴恩达深度学习 第三门课 残差网络 谷歌Inception模型 迁移学习

2019-01-14 13:33 483 查看

文章目录

  • 迁移学习(transfer learning)
  • 数据增强
  • 残差网络

    非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸的问题。跳跃连接(skip connection),可以从一层神经网络获取激活,然后迅速反馈给更深的神经网络,我们可以利用跳跃连接来构建深层的网络。
    ResNets是由残差块(Residual block)构建的,如图所示,在一个两层的神经网络中,a[l]a^{[l]}a[l]会以复制的形式传递给第二层的激活层前,第二个激活层的公式由a[l+2]=g(z[l+2])a^{[l+2]}=g(z^{[l+2]})a[l+2]=g(z[l+2])变为a[l+2]=g(z[l+2]+a[l])a^{[l+2]}=g(z^{[l+2]}+a^{[l]})a[l+2]=g(z[l+2]+a[l]),也就是加上的a[l]a^{[l]}a[l]产生的残差块

    残差网络可以训练更深的网络,有助于解决梯度爆炸和梯度消失问题。

    残差网络为什么有用

    关于残差网络吴恩达有两点理解:
    a[l+2]=g(w[l+2]a[l+1]+a[l])a^{[l+2]}=g(w^{[l+2]}a^{[l+1]}+a^{[l]})a[l+2]=g(w[l+2]a[l+1]+a[l]),不难理解,w和bw和bw和b会受到正则化影响,因而a[l+2]=a[l]a^{[l+2]}=a^{[l]}a[l+2] 1e92b =a[l],因而我们增加了两层的网络,并不影响网络的表现。
    第二,如果隐藏层学到一些有用信息,那么他将会比恒等函数表现更好。
    残差网络大多使用’SAME’填充,因而a[l+2]和a[l]a^{[l+2]}和a^{[l]}a[l+2]和a[l]维度相同,如果维度不同,则需要对a^{[l]}做填充,这里吴采用了Wsa[l]W_{s}a^{[l]}Ws​a[l]来转换维度,应该是一种填充的变换

    谷歌Inception模型

    1*1卷积

    如果仅仅是看单个通道的1x1卷积似乎没有多大意思,如果考虑一个32通道的1x1卷积网络,每一个卷积层的通道相当于一个权重,将输入的32层数据做了一个全连接,换句话说,1x1的卷积网络类似于全连接,实现了一个非平凡(non-trivial)计算

    1x1卷积可以用于压缩通道数量,如下图,我们将通道数为192的输入压缩为通道数为32

    Inception

    inception模型最大的特点就是借助于’SAME’保持维度不变,然后对多个不同的卷积核做了连接。它的基本思想是不需要认为决定使用哪些卷积层或者池化,这些由神经网络自行决定,需要什么样的参数,采用哪些过滤器组合。

    这里我们考虑一个计算问题,以一个5x5x32的卷积层来看,结果为28x28x32,输出参数为结果数的个数,需要的乘法运算为(5x5x192)x(28x28x32)次,成本相当大。

    考虑到上述问题,我们可以使用一个1x1卷积网络做一步缩放,通过1x1卷积网络后的维度变为1x1x16,再通过5x5x32的卷积运算,这里的计算量由192变为16缩减到了十分之一。只要合理构建瓶颈层,这种方式既可以缩小表示层规模,又不会减低网络性能,从而节省了计算。

    模型组建,将各个层的通道连接起来,构成一个Inception模块

    Inception网络将这些模块组合到一起

    Inception原文的模型会有一些分支,分支是通过全连接成和softmax层来做出预测,下图中编号4和编号2就是通过编号5和编号3的结果做出预测。

    迁移学习(transfer learning)

    关于迁移学习,举一个例子谷歌的Imagenet可以识别上千个类别,我们可以替换掉模型最后一层的全连接和softmax层,替换为我们需要的全连接和softmax层,假如我们需要判别一个三分类,那就转化为三个输出的全连接和softmax层,我们只需要训练新加的神经层,将Imagetnet看做一个特征提取器。
    分享两个小技巧:我们可以提前将训练的数据集经过Imagenet提取特征保存到硬盘中,这样后续我们只需要训练我们的三分类的神经层。我们也可以直接修改全连接的权重,这样softmax层直接出来的是三分类的结果
    当然,如果你有更大的数据集,可以尝试冻结更少的Imagenet层,来训练更多的Imagenet层。或者你可以只把下载的数据作为初始化,直接训练整个网络。

    数据增强

    计算机视觉任务需要大量的数据,有时我们可以对数据做一下扩充,比如翻转、随机剪切、彩色转换。
    关于彩色转换有一种影响颜色失真的算法是PCA,即主成分分析,具体改变的细节在AlexNet的论文中,比如说,如果颜色呈紫色主要包含红色和蓝色,绿色相对少一点,PCA颜色增强算法会对红色和蓝色增减很多,绿色变化少一点,使总体的颜色保持一致。
    常用的数据扩充的方法是使用一个线程或多线程,来加载数据实现变形失真,然后通过其他的进程和线程来训练。

    基准测试(benchmark)

    有一个提升基准测试的技巧,Multi-crop at test time,这是将数据扩充应用于测试图像的一种形式,首先做一遍翻转,然后对翻转的图像取中间、左上角、左下角、右上角、右下角,最终获取10个测试图片,成为10-crop。

    本文参考
    吴恩达深度学习 第三门课

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐