您的位置:首页 > 其它

深度学习CNN-基本概念

2017-12-03 20:55 281 查看
背景

深度学习可谓是如火如荼,风头正盛。读研期间身边就有很多人在进行相关工作,工作之后发现在工业界也是相当受追捧。因此,自己也下定决心开始窥探一下深度学习的奥秘。

总体结构

从一个例子中先大体把握一下CNN的结构,有一个基本的认识。ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2010年Alex Krizhevsky的CNN结构进行说明,该结构在2010年取得冠军,top-5错误率为15.3%。



上图模型的基本参数为:

输入:224×224大小的图片,3通道

第一层卷积:5×5大小的卷积核96个,每个GPU上48个。

第一层max-pooling:2×2的核。

第二层卷积:3×3卷积核256个,每个GPU上128个。

第二层max-pooling:2×2的核。

第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。

第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。

第五层卷积:3×3的卷积核256个,两个GPU上个128个。

第五层max-pooling:2×2的核。

第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。

第二层全连接:4096维

Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。

基本概念

激活函数:能够把输入的特征保留并映射下来。在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。

在近些年ReLU变得非常流行。它的函数公式是 

。换句话说,这个激活函数就是一个关于0的阈值。

优点:

相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用(Krizhevsky等的论指有6
倍之多)。据称这是由它的线性,非饱和的公式导致的。
sigmoid和tanh神经元含有指数运算等耗费计算资源的操作,而ReLU可以简单地通过对一个矩阵进行阈值计算得到。

缺点:

在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度流过Re LU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。例如,如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

Leaky ReLU是为解决“Re LU死亡”问题的尝试。ReLU中当x<0时,函数值为0。而Leaky
ReLU则是给出一个很小的负数梯度值,比如0.01。所以其函数公式为

其中α
是一个小的常量。有些研究者的论文指出这个激活函数表现很错,但是其效果并不是很稳定。Kaiming He等人在2015年发布的论Delving Deep into Rectifiers中介绍了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数。然而该激活函数在在不同任务中均有益处的一致性并没有特别清晰。

卷积层:用来提取特征。

pooling层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。

softmax层:全连接层之后的分类器。

这篇文章中对于卷积层、pooling层有更详尽的解释。http://blog.csdn.net/yjl9122/article/details/70198357

Finetuning

比如在一些特定的领域的识别分类中,我们很难拿到大量的数据。因为像在ImageNet上毕竟是一个千万级的图像数据库,通常我们可能只能拿到几千张或者几万张某一特定领域的图像,比如识别衣服啊、标志啊、生物种类等等。在这种情况下重新训练一个新的网络是比较复杂的,而且参数不好调整,数据量也不够,因此fine-tuning微调就是一个比较理想的选择。

所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型。fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中。

计划

下周准备对机器学习方法做个简单的总结,完成基本知识储备之后就开始在实践中探索这些方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: