预告:
>> 1.经典的卷积神经网络
>> 2.ResNet残差网络
>> 3.1✖️1卷积(Network in Network)
>> 4.Inception Work(Go deeper)
>> 5. 一些实际操作中的建议
1.经典的卷积神经网络:
LeNet,AlexNet,VGG[图片上传中...(Screen Shot 2017-11-28 at 10.18.42 AM.png-50628f-1511882335739-0)]
2.ResNet残差网络:
ResNet对于中间的激活函数来说,有助于能够达到更深的网络,解决梯度消失和梯度爆炸的问题。(梯度消失和梯度爆炸详见course2)
其前向传播的计算步骤为:
Linear:z[l+1]=W[l+1]a[l]+b[l+1]
Relu:a[l+1]=g(z[l+1])
Linear:z[l+2]=W[l+2]a[l+1]+b[l+2]
Relu:a[l+2]=g(z[l+2])
ResNet也就是前向传播公式的最后一个步骤变为:a[l+2]=g(z[l+2]+a[l])
3.Network in Network
在每个“格子”的纵深方向的一组输入值,经过n个1✖️1的filter卷积后,得到n个值, 这就是一个普通神经网络。所以说这是network in network。4.Inception Network
Inception network在1✖️1的filter的启发下,减少了大量的计算量。
可以想象:在没有1卷积时,一大块的卷积才能得到一个点的output。
inception network的模型:
MAXPOOL后面做一个1✖️1卷积, 是为了缩小depth维度
另外filter3,5前面做1的卷积,是为了减小计算量。
同时inception可以和resnet辅助使用。
红色箭头的maxpool,用来改变(缩小)height,width维度。
5.一些实际操作中的建议
5.1使用开源实现
5.2迁移学习transfer learning
小数据集:
如今在深度学习领域,许多研究者都会将他们的工作共享到网络上。在我们实施自己的工作的时候,比如说做某种物体的识别分类,但是只有少量的数据集,对于从头开始训练一个深度网络结构是远远不够的。
但是我们可以应用迁移学习,应用其他研究者建立的模型和参数,用少量的数据仅训练最后自定义的softmax网络。从而能够在小数据集上达到很好的效果
如果我们在自己的问题上也拥有大量的数据集,我们可以多训练后面的几层。总之随着数据集的增加,我们需要“ freeze”的层数越来越少。最后如果我们有十分庞大的数据集,那么我们可以训练网络模型的所有参数,将其他研究者训练的模型参数作为参数的初始化来替代随机初始化,来加速我们模型的训练。
5.3 数据增强 Data augmentation
数据扩充的方法:
镜像翻转(Mirroring);
随机剪裁(Random Cropping);
色彩转换(Color shifting):
为图片的RGB三个色彩通道进行增减值,如(R:+20,G:-20,B:+20);PCA颜色增强:对图片的主色的变化较大,图片的次色变化较小,使总体的颜色保持一致。
为了节省时间,数据扩充的过程和训练过程可以多CPU多线程来并行的实现。
5.4
data v.s. hand - engineering
在有大量数据的时候,我们更倾向于使用简单的算法和更少的手工工程。因为此时有大量的数据,我们不需要为这个问题来精心设计特征,我们使用一个大的网络结果或者更简单的模型就能够解决。
相反,在有少量数据的时候,我们从事更多的是手工工程。因为数据量太少,较大的网络结构或者模型很难从这些少量的数据中获取足够的特征,而手工工程实际上是获得良好表现的最佳方式。
对于机器学习应用:
标记数据,(x,y);
手工特征工程/网络结构/其他构建。
Tips for doing well:
在基准研究和比赛中,下面的tips可能会有较好的表现:
Ensembling:独立地训练多个网络模型,输出平均结果或加权平均结果;