赞
踩
这是本系列的第二篇博客,主要是整理了一些经典模型的原理和结构,面试有时候也会问到这些模型的细节,因此都是需要十分熟悉的。光看原理还不够,最好是能用代码试着复现,可以看看李沐老师深度学习的教材,我也有参考部分沐神的思想。
LeNet5有3个卷积层,2个池化层,2个全连接层。卷积层的卷积核都为5*5,stride=1,池化层都为Max pooling,激活函数为Sigmoid,具体网络结构如下图:
输入图像统一归一化为28×28。
经过(5×5×1)×6卷积核,stride=1, 生成featuremap为28×28×6。
经过(2×2)采样核,stride=2,生成featuremap为14×14×6。
经过(5×5×6)×16卷积核,stride=1,生成featuremap为10×10×16。
经过(2×2)采样核,stride=2,生成featuremap为5×5×6。
经过(5×5×16)×120卷积核,stride=1, 生成featuremap为1×1×120。
输入为1×1×120,输出为1×1×84,总参数量为120×84。
输入为1×1×84,输出为1×1×10,总参数量为84×10。10就是分类的类别数。
2012年,Imagenet比赛冠军—Alexnet (以第一作者Alex命名)直接刷新了ImageNet的识别率,奠定了深度学习在图像识别领域的优势地位。网络结构如下图:
输入图像为224×224×3。
经过(11×11×3)×96卷积核,stride=4, (224-11)/4+2=55,生成featuremap为55×55×96。
经过3×3的池化核,stride=2,(55-3)/2+1=27,生成featuremap为27×27×96。
local_size=5,生成featuremap为27×27×96。
经过(5×5×96)×256的卷积核,pad=2,group=2,(27+2×2-5)/1+1=27,生成featuremap为27×27×256。
经过3×3的池化核,stride=2,(27-3)/2+1=13,生成featuremap为13×13×256。
local_size=5, 生成featuremap为13×13×256。
经过(3×3×256)×384卷积核,pad=1, (13+1×2-3)/1+1=13,生成featuremap为13×13×384。
经过(3×3×384)×384卷积核,pad=1,(13+1×2-3)/1+1=13,生成featuremap为13×13×384。
经过(3×3×384)×256卷积核,pad=1,(13+1×2-3)/1+1=13,生成featuremap为13×13×256。
经过(3×3)的池化核,stride=2,(13-3)/2+1=6,生成featuremap为6×6×256。
输入为(6×6×256)×4096全连接,生成featuremap为1×1×4096。
在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,BP的时候也不更新这些节点,以下Droupout同理。
输入为1×1×4096,输出为1×1×4096,总参数量为4096×4096。
生成featuremap为1×1×4096。
输入为1×1×4096,输出为1000,总参数量为4096×1000。
总结:
AlexNet比LeNet更深,包括5个卷积层和3个全连接层;
使用ReLU激活函数,收敛很快,解决了Sigmoid在网络较深时出现的梯度弥散问题;
加入了dropout层,防止过拟合;
使用了LRN归一化层,对局部神经元的活动创建竞争机制,抑制反馈较小的神经元放大反应大的神经元,增强了模型的泛化能力;
使用裁剪、翻转等操作做数据增强,增强了模型的泛化能力;
分块训练,当年的GPU没有这么强大,Alexnet创新地将图像分为上下两块分别训练,然后用全连接层合并在一起;
总体的数据参数大概为240M。
VGGNet主要的贡献是利用带有很小卷积核(3×3)的网络结构对逐渐加深的网络进行评估,结果表明通过加深网络深度至16-19层可以极大地改进前人的网络结构。这些发现也是参加2014年ImageNet比赛的基础,并且在这次比赛中,分别在定位和分类跟踪任务中取得第一名和第二名。VGGNet的网络结构如下图:
类型从A到E。此处只讨论VGG16,即图中的类型D。如图中所示,共有13个卷积层,3个全连接层。其全部采用3×3卷积核,步长为1,和2×2最大池化核,步长为2。
输入图片为224×224×3。
经过(3×3×3)×64卷积核,生成featuremap为224×224×64。
经过(3×3×64)×64卷积核,生成featuremap为224×224×64。
经过(2×2)max pool核,生成featuremap为112×112×64。
经过(3×3×64)×128卷积核,生成featuremap为112×112×128。
经过(3×3×128)×128卷积,生成featuremap为112×112×128。
经过(2×2)maxpool,生成featuremap为56×56×128。
经过(3×3×128)×256卷积核,生成featuremap为56×56×256。
经过(3×3×256)×256卷积核,生成featuremap为56×56×256。
经过(3×3×256)×256卷积核,生成featuremap为56×56×256。
经过(2×2)maxpool,生成featuremap为28×28×256
经过(3×3×256)×512卷积核,生成featuremap为28×28×512
经过(33512)512卷积核,生成featuremap为2828*512。
经过(3×3×512)×512卷积核,生成featuremap为28×28×512。
经过(2×2)maxpool,生成featuremap为14×14×512。
经过(3×3×512)×512卷积核,生成featuremap为14×14×512。
经过(3×3×512)×512卷积核,生成featuremap为14×14×512。
经过(3×3×512)×512卷积核,生成featuremap为14×14×512。
经过2×2卷积,生成featuremap为7×7×512。
输入为7×7×512,输出为1×1×4096,总参数量为7×7×512×4096。
输入为1×1×4096,输出为1×1×4096,总参数量为4096×4096。
输入为1×1×4096,输出为1000,总参数量为4096×1000。
总结:
RNN实际上有两种,一种是Recurrent Neural Networks,即循环神经网络,一种是Recursive Neural Networks,即递归神经网络。循环神经网络是首先被提出的,它是一种时间上进行线性递归的神经网络,也就是我们通常所说的RNN。
递归神经网络被视为循环神经网络的推广,这是一种在结构上进行递归的神经网络,常用于自然语言处理中的序列学习,它的输入数据本质不一定是时序的,但结构却往往更加复杂,我们这里只说循环神经网络。一个RNN的结构如下:
左侧就是模型的基本结构,右侧就是它在时间上进行展开的示意图。xt是时刻t的输入,相应的ht,ot分别是对应时刻t的隐藏层和输出层。
上面我们可以看出,一个RNN的输入包括了两个:一个是当前时刻输入xt,用于实时更新状态,另一个是上一时刻隐藏层的状态ht-1,用于记忆状态,而不同时刻的网络共用的是同一套参数。
RNN中常用的激活函数是tanh,所以上面的式子写成公式,就是:
h t = tanh ( W ( x t h t − 1 ) )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。