Alexnet

The Architecture
ReLU Nonlinearity
非饱和非线性,然而,在这个数据集上,主要关注的是防止过分拟合,因此他们观察到的效果不一样于咱们在使用ReLUs时报告的训练集的加速能力。web

Training on Multiple GPUs
对于2-GPU(AlexNet里的group参数),其实AlexNet能够直接用单GPU来实现,你们以为AlexNet是2GPU的缘故是,Alex当年train网络的时候GPU内存过小,他只好用两个GPU来实现:)后来你们通常都是用一个GPU的。网络

将网络分为两个GPU,当前的GPU特别适合于跨GPU并行化。由于他们能够直接读取和写入对方的内存,而不须要经过主机内存。
咱们采用的并行化方案基本上将 一半内核(或神经元)放在每一个GPU,还有一个额外的技巧:GPU只在某些层进行通讯。这意味着,例如,层3的内核从第2层的全部内核映射中输入。然而,层4中的内核仅从驻留在同一GPU上的层3中的那些内核映射获取输入。 选择链接模式是交叉验证的一个问题,可是这容许咱们精确地调整通讯量,直到它是计算量的可接受的分数。
相比与在单个GPU中每一个卷积层中有一半的核,2GPU net花费更少训练时间。1GPU实际上在最后的卷积层中 核的数量和2GPU同样。这是由于大多数的网络参数是在第一个全链接层,其最后的卷积层做为输入。因此为了让两个网络有大约相同的参数,咱们没有将最后卷积层减半。这种1GPU比减半的2GPU更大。app

Local Response Normalization
RELU具备所需的属性,其不须要输入归一化来防止它们饱和。若是至少有一些培训示例为ReLU产生积极/正的投入,那么在该神经元中会发生学习。 然而咱们仍然找到如下本地归一化方案local normalization scheme有助于泛化,
这里写图片描述 表示在位置(x,y)经过应用核i计算所得的一个神经元的活度,应用relu的非线性,response-normalized activity :
这里写图片描述
求和在一样的空间位置通过n个“相邻”的kernel map,N为层中kernel的总数, kernel map的排序是任意的。 这种响应规范化实现了一种由真实神经元中发现的侧向抑制lateral inhibition形式,为使用不一样内核计算的神经元输出之间的big activities创造竞争框架

Overlapping Pooling
传统上,被相邻的pooling单元总结的区域并不重叠。池层能够被认为是由s个像素间隔开的pooling 单元的网格构成的,每一个总结了以pooling单元为中心的z*z的领域.svg

s=z:传统的local pooling
s < z :overlapping pooling
咱们一般在训练期间观察到具备重叠池的模型更难过拟合。模块化

Overall Architecture
这里写图片描述函数

前5层为卷积层,后3层为全链接层。最后全链接层的输出连到 1000-way softmax,其产生了1000个类的标签的分配。咱们的网络最大化多项Logistic回归目标,这至关于在预测分布下最大化 训练状况中正确标签的对数几率的平均值。学习

第二,第四和第五卷积层的内核只与位于同一GPU上的上一层中的那些内核映射相连测试

cudnn:
经过cuDNN句柄,描述符和函数调用的独立设计以及框架的模块化,能够简化集成。 核心Caffe框架是不变的,保留了网络,层和内存接口。 更改被隔离到新层定义和实现,描述符的辅助函数和相应的测试。 补丁几乎是纯粹的添加剂。设计

在Caffe中,每种类型的模型操做被封装在一个层中。 层开发包括声明和实现层类,在协议缓冲模型模式中定义层,扩展层工厂,并包括测试。 计算经过设置,前进和后退步骤的层协议进行。 cuDNN层适合一样的方案。 库处理和描述符在设置中进行配置,而在各层方法中进行前向和后向调用。 cuDNN原语产生简洁的层实现。 cuDNN层是标准Caffe对等体的替代品。

Caffe具备标准的阵列和内存接口,称为blob,用于在主机和设备上存储和传送数据。 Blob保存数据,渐变和参数。 特别地,层输入和输出保持在N? C ? H ? W尺寸斑点。 cuDNN张量和滤波器描述符经过其柔性支撑尺寸和步幅从blob阵列构成。 经过在描述符中协调内存,Caffe保持对内存和通讯的控制以提升效率。