0
点赞
收藏
分享

微信扫一扫

深度学习常用代码总结(k-means, NMS)


本文目录


标题和作者

ImageNet Classification with Deep Convolutional Neural Networks,意为使用深度卷积神经网络在 ImageNet 数据集上进行分类,发表于 2012 年。

  • Alex Krizhevsky,本文第一作者,本文提出的网络结构后被称为 AlexNet
  • Ilya Sutskever,本文第二作者,2015 年加入 OpenAI,成为 OpenAI 的联合创始人兼首席科学家。
  • Geoffrey E. Hinton,本文第三作者,2018 年图灵奖得主,神经网络之父,前两位作者的导师。

摘要

本文提出了一个大型深度卷积神经网络,该网络在 ImageNet LSVRC-2010 比赛任务(120 万张图片的 1000 分类任务)中,取得了 top-1 准确率 62.5%top-5 准确率 83.0% 的好成绩,超越了以往所有的 SOTA 方法。

该网络有 6000 万个参数和 65 万个神经元,由五个卷积层组成,其中一些后面跟着最大池化层,以及三个全连接层和一个最终的 1000 分类的 softmax 层。

为了使训练更快,作者使用 ReLU 作为激活函数(non-saturating neurons),并使用 GPU 加速卷积运算。

为了减少全连接层的过拟合,作者采用了一种新的正则化方法,即 Dropout,实验证明这一方法非常有效。

创新点

笔者认为的几个影响比较大的创新点:

  • 使用了 ReLU 作为激活函数,而非传统的 TanhSigmoid 函数。ReLU 未特别压缩输出值的范围(在文中被称为 non-saturating neurons),且运算简单。
  • 将卷积运算置于多 GPU 上进行,大大加快了训练速度(当时的企业普遍还在使用 CPU 或单 GPU 训练模型)。
  • 使用了 Dropout 正则化方法,降低了模型的过拟合风险。

ReLU

ReLU,即 Rectified Linear Unit,是一种激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)。相比传统的 TanhSigmoid 函数,ReLU 运算速度更快。

ReLU vs Tanh

在一个 4 层的卷积网络中使用 ReLU 函数在 CIFAR-10 数据集上达到 25% 的训练错误率要比在相同网络相同条件下使用 Tanh 函数快 6 倍。

多 GPU

本文的模型使用两个 GTX 580 3GB GPU 进行训练。

Dropout

Dropout 是一种正则化方法,具体做法是在训练过程中,随机将一些神经元的输出置为 0。

笔者对 Dropout 的理解是:类似于 Bagging,每次的训练数据事实上仅经过了所有的非 Dropout 神经元和一部分 Dropout 神经元,相当于隐式地训练了 2 N 2^N 2N N N N 为 Dropout 神经元个数) 个子网络(尽管这些模型不是相互独立的),最终的输出是所有节点输出的综合值(也即最终网络是所有子网络的综合)。

其他

除此之外,本文还有一些其他的创新点,比如:

  • Local Response Normalization,即局部响应归一化,这是一种对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,这样可以使得模型对于输入的微小变化不敏感,从而提高模型的泛化能力。
  • Overlapping Pooling,即重叠池化,池化窗口大于步长,每次池化都有重叠部分,相比传统池化方法有更好效果,能够降低模型的过拟合风险。
  • 一些新的数据增强方法。

网络结构

AlexNet

输入层(Input layer)

输入层的输入是 224x224x3 的图片,即 224x224 的彩色图片,其中 3 通道分别为 RGB 三个通道。

卷积层(C1)

卷积(11x11)–>ReLU–>局部响应归一化(LRN)–>最大池化

卷积(11x11):卷积核大小为 11x11,步长为 4,输出通道数为 96,即输出为 55x55x96 的特征图,分为两组,每组为 55x55x48,分别位于单个 GPU 上。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

局部响应归一化(LRN)

b x , y i = a x , y i / ( k + α ∑ j = m a x ( 0 , i − n / 2 ) m i n ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β b_{x,y}^i=a_{x,y}^i/\left(k+\alpha\sum_{j=max(0,i-n/2)}^{min(N-1,i+n/2)}(a_{x,y}^j)^2\right)^\beta bx,yi=ax,yi/ k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2 β

其中 a x , y i a_{x,y}^i ax,yi 表示第 i i i 个通道的第 ( x , y ) (x,y) (x,y) 个像素点的输出, N N N 表示总的通道数, n n n 表示归一化的范围, k k k α \alpha α β \beta β n n n 是超参数,本文中取 k = 2 k=2 k=2 α = 1 0 − 4 \alpha=10^{-4} α=104 β = 0.75 \beta=0.75 β=0.75 n = 5 n=5 n=5

最大池化:池化窗口大小为 3x3,步长为 2,每组输出为 27x27x48。

卷积层(C2)

卷积(5x5)–>ReLU–>局部响应归一化(LRN)–>最大池化

卷积(5x5):卷积核大小为 5x5,步长为 1,padding 为 2,每组输出通道数为 128,即每组输出为 27x27x128 的特征图。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

局部响应归一化(LRN) k = 2 k=2 k=2 α = 1 0 − 4 \alpha=10^{-4} α=104 β = 0.75 \beta=0.75 β=0.75 n = 5 n=5 n=5

最大池化:池化窗口大小为 3x3,步长为 2,每组输出为 13x13x128。

卷积层(C3)

卷积(3x3)–>ReLU

卷积(3x3):卷积核大小为 3x3,步长为 1,padding 为 1,每组输出通道数为 192,即每组输出为 13x13x192 的特征图。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

卷积层(C4)

卷积(3x3)–>ReLU

卷积(3x3):卷积核大小为 3x3,步长为 1,padding 为 1,每组输出通道数为 192,即每组输出为 13x13x192 的特征图。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

卷积层(C5)

卷积(3x3)–>ReLU–>最大池化

卷积(3x3):卷积核大小为 3x3,步长为 1,padding 为 1,每组输出通道数为 128,即每组输出为 13x13x128 的特征图。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

最大池化:池化窗口大小为 3x3,步长为 2,每组输出为 6x6x128。

全连接层(FC6)

全连接(卷积)–>ReLU–>Dropout

全连接(卷积):输入为 6x6x256,使用 4096 个 6×6×256 的卷积核进行卷积,效果等同于全连接,即输出为 1x1x4096。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

Dropout:在训练过程中,随机将一些神经元的输出置为 0。

全连接层(FC7)

全连接(卷积)–>ReLU–>Dropout

全连接(卷积):输入为 1x1x4096,输出也为 1x1x4096。

ReLU:ReLU 激活函数,即 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

Dropout:在训练过程中,随机将一些神经元的输出置为 0。

输出层(Output layer)

全连接(卷积)–>Softmax

全连接(卷积):输入为 1x1x4096,输出为 1x1x1000。

Softmax:将输出转化为概率分布。

举报

相关推荐

0 条评论