卷积神经网络ALEXNET
结构:
注:层与层之间也有非线性函数和BATCH NORMALIZATION
网络的结构
在第一个卷积层中输入是227*227的彩色图片(有RGB三个颜色分量:channel数量为3)
第一个卷积层中有96个11*11*3的卷积核,步长为(4,4)
注:如果一个M*N的图像和一个m*n的卷积核进行操作,移动步长为(P,Q)
则输出的特征图长H和宽W分别为:H=floor((M-m)/p)+1
W=floor((N-n)/Q)+1
因此代入计算第一个卷积层得到的特征图长宽都是55,由于有96个卷积核,特征图CHANNEL为96
ALEXNET改进:
以ReLU函数代替LENET中的sigmoid或tenh函数
ReLU(x)=max(0,x)
sigmoid和tanh函数在梯度较大情况下会出现梯度消失现象
ReLU函数在x<0,f(x)=0,x>0,f(x)=1,同样导数在x小于0时等于0,在x大于0时等于1,在自变量大于0时,上一层的梯度就能直接传导到下一层,避免了梯度消失
RELU函数把自变量小于0时函数值设置为0,假设某一层神经元的输出大于0和小于0的个数差不多,利用RELU函数关闭一半左右的神经元,使它们处于非激活状态。
RELU函数保证了每一次网络中只有很少一部分神经元的参数被更新,这样促进了深度神经网络的收敛。
第二个改进:在降采样层用MAXPOOLING代替LENET的平均降采样,此操作叫池化(pooling):把邻近的像素作为一个池子来重新考虑
ALEXNET中提出了最大池化的概念:对每一个邻近的像素组成的池子,选取最大值作为输出
最大池化下梯度直接传导到最大值,每次更新的参数将进一步减少,保证了网络的稳定性
第三个改进:随机丢弃
为了避免系统参数更新过快导致过拟合,每次利用训练样本更新参数时,随机的丢弃一定比例的神经元,被丢弃的神经元将不参加训练过程,输入和输出该神经元的权重系数也不做更新
这样每次训练的网络结构都不一样,而这些网络结构分享共同的权重系数
做法:对每一层,每次训练时以概率p丢弃一些神经元
减缓了网络收敛速度,也大概率避免了过拟合的发生
第四个改进:数据扩增
增加训练样本,采用多种方法增加训练样本:将原图水平翻转:将256*256的图像随机选取224*224的片段作为输入图像,可以将意图图像变为2048幅图像
还可以对每幅图像引入一定的噪声,构成新的图像
数据扩增目前被广泛应用于深度模型的训练中
第五个改进:用GPU加速训练过程
使用了2片GTX 580 GPU
将每一层的特征图的通道(CHANNELS)平均分成两份,分别画在上面和下面。因为作者用了两片GPU。
显卡特点时线性计算并行化的程度好,用来做神经网络后向传播的梯度更新。
近年来流行的卷积神经网络
VGGNET对ALEXNET的改进:增加了网络的深度
用多个3*3卷积核叠加代替更大的卷积核,用以增加感受野
感受野:卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小
特征图上的一个点对应输入图上的区域
两个3*3卷积核待求参数18个,1个5*5卷积核待求参数25个,可以起到降低带估计参数的作用
但是多层卷积需要更大计算量 VGGNET是一个计算和存储开销都较大的网络
GOOGLENET提出了INCEPTION结构
更深的卷积神经网络能达到更深的识别率
RESNET
核心思想:将浅层输出加入深层输入,维度上不一致,用线性变换转换
更好的卷积神经网络结构:识别精度,计算量,存储量
近年来用紧凑的、小而深的网络代替大而浅的网络并加入一些创意和技巧