近期读了一下这篇论文,读的有点模糊,记录下现在的理解,以后再来看看,再修改修改
因为LSVRC-2010是ILSVRC的唯一一个有测试集标签的版本,因此在这个实验中大多使用该版本。
将图像缩放到256*256
先选一个较短边,缩放到256,再取中心部分,正好整出256*256
总共八个层,五个卷积层,三个全连接层,如下图所示
使用Relu激活函数
相比于sigmoid和tanh,Relu梯度下降训练时间更短,训练时间也短。
如下图,所示,实线是Relu函数,虚线是tanh函数
可见,relu激活函数效率要快很多
当前的GPU特别适合跨GPU并行化,因为它们能够直接读取和写入彼此的内存,而无需经过主机内存。
两个GPU分别进行计算,且只在部分层上有交换数据
一般来说,Relu函数不需要规范化来防止饱和,但是这里还是进行了规范化了,确实可以获得一个更好的结果。
文中提到的规范化方式现在已经几乎不使用了
以上公式我的理解如下
a是激活函数的值,n是选择的相邻卷积核数
即b(x,y)就是
a(x,y)/(其他n个通道相同x,y的激活值平方的和*α+k)的β方
这里的k是保证分子不为0
经过测试之后
使用k=2,n=5,α=10的-4次方,β=0.75
一般来说池化通常不会重叠,但alexnet中使用的就是重叠的池化
这里提到了,s和z
s代指stride,步伐
z指的是池化窗口的大小,即是z*z
当s<z时,即完成了重叠池化
这里再提一下整个网络的结构
网络包含八层
前五层时卷积层,后三层时全连接层
最后一路的全连接层的输出被送到1000个分类的softmax分类器
再把这张图拿出来下
这里可以看到,第二层,第四层和第五层卷积层,都只与同GPU的前一层的相连,而第三层则与第二层的所有结果相连
全连接层的所有层则与所有的神经元相连
上文提到的规范化,仅仅使用在在第一个卷积层和第二个卷积层
在进行规范化之后会再进行最大池化,第五层虽没有规范化,但也会进行最大池化
该网络中的每一层都会使用Relu激活函数,
我个人觉得,激活函数应该是再池化之前,规范化之后,论文中没有注意到关于这个详细的顺序,所以只是猜测
这里提到了两种数据增强的方式,两种增强都不需要进行大量的运算,因此我们不需要提前将这些图片处理好存储到硬盘上。
并且这里直接用CPU进行数据增强,而使用GPU进行训练,这就使得我们更不需要提前处理数据
在训练时,会在原图像以及水平翻转的图像(256*256)中随机提取出大小为(224*224)的图像,这就使得训练图像变成原来的2048倍
猜测计算公式(256-224)*(256-224)*2
虽然这样获取的图像都是高度依赖的,但是如果没有以上操作,会出现过拟合,从而迫使使用更小的神经网络
当测试时,则会在图像的四个角和中心提取总共五个224*224大小的图像,翻转的图像同样如此,这样总计有十个图像
这里使用PCA来对RGB的值进行修改
对于RGB的每个值,我们都会加上以下值
pi是3*3像素值的协方差矩阵的第i个特征向量,lamda则是对应的特征值,α是随机值。
这里没有 很理解
引用原文的话,为什么提出这个方法呢,因为许多不同模型的预测结合起来是减少测试误差的一种非常成功的方法,但对于已经需要几天时间来训练的大型神经网络来说,这种方法似乎过于昂贵。
而使用Dropout仅仅需要两倍的时间就可以有多个模型
文章将每一层消失的神经元的概率设置为0.5,消失的神经元不参与正向传播 也不参与反向传播
神经元的减少,使得每一个神经元都被迫学习更健壮的特征,这些神经元学习的特征与其他随机子集的神经元学习的特征在结合在一起时,是有效的。
但是为了一个合理的值,会将这些神经元的输出乘以0.5
这里采用的是随机梯度下降
为什么要采用这种方式呢,而不是用我们之前一直在使用的批量梯度下降
因为此时我们训练的图片并不是几千张,几万张,这时如果还是用批量梯度下降,就会使时间过长
随机梯度下降的好处就在这里,每次训练时,仅仅随机抽取部分的样本,在本文中的样本量为128,随
机抽取的样本数量也称为batch size,也就是b(不是偏移量)。
观察上图公式,你会发现,和我们之前了解的梯度下降公式不同,这里怎么会还有一个v呢,
先别急,我们先来聊一聊
批量梯度下降是会慢慢下降,从而达到我们的期望
但是随机梯度下降不会,因为随机梯度下降采用的是小样本,这就导致了梯度下降的方向不一定是我们批量梯度下降的方向
这时候v就起到了作用,由公式可以看出,vi+1包含了上一个vi的值,也就是说,每一次的梯度下降,
不只与当前的梯度方向有关,同时与上一步的梯度有关
这样往往可以得到更好的效果
论文中总共进行90个周期
从标准偏差为0.01的零均值高斯分布中初始化了每个层中的权重。也就是w
第二,第四层和第五层卷积层以及全连接层的偏差都是1,其他层的偏差都设置为0
每个层的学习率都是相同的,但损失不再继续改善时,会将学习率除以10,学习率初试的值是0.01
这里就不描述了,有兴趣的可以看一下
可以自己找一下论文看一下,如果找不到的话,可以私信我,或则公众号私聊也可以