卷积神经网络CNN的学习路线入门(1)---深度学习

来源:互联网 发布:python file encoding 编辑:程序博客网 时间:2024/06/05 20:59

大家可以按照顺序参看这几篇博客,注意对第一篇博客中的卷积运算的Filter的维度进行一个深入理解,对第二篇博客中的相应资源进行认真阅读,相信大家对CNN会有一个清晰明朗的认识的,加油,喜欢学习深度学习的小伙伴们!!!

首先推荐大家一本经典书籍,是《Neural Networks and Deep Learning》,英文版,你懂得,所以我就用中文版代替啦,非常简明易懂,大家可以去我的主页进行下载。

1、CNN笔记:通俗理解卷积神经网络

ps:针对图像的Filter维度一般也是三维,数量为n,所以filter表示为:n*(d1,d2,d3),Input层和第一个Hidden layer之间的d3一般为3,hidden层之间的d3一般为前一个隐藏层的维度。

2、一日搞懂卷积神经网络

ps:
我们可以计算卷积运算之后的输出层的大小,假设输入层的长宽为h,w,卷积层的大小为f*f,填充为p,步长为s,那么输出层的大小为:

h=(h-f+2*p)/s+1w=(w-f+2*p)/s+1

当然我们也可以计算pooling运算之后输出层的大小,假设pooling层的大小为f*f,步长为s,s通常为2,现在我们计算pooling之后的输出层的大小:

h=(h-f)/s+1w=(w-f)/s+1

3、CNN中的两种padding方式

CNN中的两种padding方式包括“SAME”和“VALID”,这两种填充方式有什么区别呢?其中“VALID”代表的是当进行卷积或者pooling运算时候,如果stride导致这种方式无法移动到边界去,则将其丢弃;如果是”SAME“呢,则并不会将其丢弃,而是会在不够的原始图像矩阵的后面进行填充,数值为0而已。

4、详细解释CNN卷积神经网络各层的参数和链接个数的计算

具体的参数个数的求解大家可以参看上篇博客,不过我觉得这篇博客中针对权重参数的运算有些问题,是因为忘了Filter的维度是3维的,导致计算的参数少于实际的参数,所以我们在参看的时候可以给里面的相应参数再乘上Filter的第3维,当然,仅仅是个人观点,如若有问题还请大家指正哈!
同时也可以参考https://zhuanlan.zhihu.com/p/28749411中的第6部分查看参数计算哈!

5、反向传播算法

反向传播算法是我们CNN中用来更新权重的一个非常重要的算法,希望大家可以仔细研究里面的权重更新、偏导等等,相信大家一定会有所收获的!

6、梯度下降算法

梯度下降算法针对参数的求解以及更新发挥着至关重要的作用,我们可以参看上篇博客对其中的梯度下降算法有一个教认为深入的了解。
注意梯度下降算法中包括三种:
1)批量梯度下降算法;
2)随机梯度下降算法;
3)小批量梯度下降算法。

7、logistic回归、softmax回归和损失函数的关系

对理解softmax回归和logistic回归的区别,以及损失函数的选择问题,有一个很好的帮助。

8、激活函数的作用

参看知乎上面的大佬们给出的答案,我们可以比较完整的理解为什么需要激活函数以及激活函数为什么一般选择Relu函数,而不是tanh和sigmoid激活函数。

9、SVM算法

CNN中进行分类的SVM算法,很复杂,表示现在还没有开始进行研究,一起学习进步啦!

10、防止过拟合的方法

我们在训练的时候容易出现过拟合问题,现在我们提出这种问题的解决方案:
1)dropout;
2)data augmentation:通过图像放缩变换,裁剪、添加噪声等一些操作可以防止过拟合现象的出现;
3)Regulization:L1 Regulization和L2
Regulization(weight decay),即L1正则化和L2正则化,其中L2正则化被称为weight decay(权重衰减),L1是在loss/cost function后面添加权重w的绝对值的平均然后乘上常量参数,我们可以通过让w->0来减小网络复杂度,防止过拟合;L2正则化则在cost/loss function后面添加权重w的平方项然后除以样本大小n,最后再乘以一个常量,这样在SGD的过程中,使得权重w前面的系数小于1,即达到了权重衰减的效果,更小的w往往表示网络的复杂度更低,所以就达到了防止过拟合的作用!(PS:这里插播一下momentum的概念,动量的存在是为了加速收敛,避免陷入saddle point即不合理的局部最优点,只是为了加速收敛而已,注意与防止过拟合无关哈,只是因为经常momentum和weight decay一起出现啦,所以这儿衣蛾一并讲解啦,正常的发现传播算法更新参数的公式为:w=w-ηdw,现在我们需要加速收敛,我们设计了一个随着时间变化的参数momentum(动量)v,v=βv-ηdw,w=w+v,这样的话这次的w值需要用到上一步中的v,即上一次的动量v和这一次负梯度方向是一样的,我们就对其加速收敛啦!!!
4)maxout网络,即采用maxout激活函数的网络,这种激活函数可以拟合任意类型的网络,所以被广泛运用!
5)添加validation set,从数据集合层面防止网络过拟合!

11、softmax和logistic regression的区别

参看维基上面关于softmax回归和logistic回归的区别讲解,深入理解两种回归方式的区别在哪里,进而有一个全面的了解!

12、卷积和反卷积运算

传统的CNN只能提取出图像的label,但很多情况下我们需要对识别对象进行分割实现end-to-end,这篇博客主要介绍convolution的两种填充方式:SAME和VALID以及FULL(属于反卷积运算),以及介绍了反卷积运算,反卷积有两种方式:1)通过FULL卷积;2)利用upsampling运算,即在pooling运算的时候,不仅生成pooling,还需要记住pooling在conv feature之后的位置,方便upsampling时对应。

13、Batch Normalization(BN)

在梯度下降的过程中,我们可以一般有三种方法:1)批量梯度下降(Batch Gradient Descent);2)随机梯度下降(Stochastic Gradient Descent);3)小批量梯度下降算法(Mini-Batch Normalization),由于SGD我们需要对每一个样本进行一次所有权重的更新,效率较差,而针对BGD由于是所有样本都训练完了之后才进行一次整体权重更新,也是非常慢,因此,我们将目光转向相对合理的MBGD,但是由于多个样本的梯度值进行平均,使得一部分样本对于参数更新有用,一部分却造成了干扰,因此我们需要解决这种问题,为了解决这种“不效率”的问题,BN首先将所有的samples进行统计分布标准化,降低batch内样本间的差异性,然后又允许batch内部的多个samples有各自统计分布,所以就可以使用较大的学习速率进行训练,减少epoch的次数,提高效果。

HAVE A TRY!

学习了深度学习之后,我们怎么可以不自己试试呢?现在,我们就需要找一些代码进行实践,可以参看知乎上的这篇关于CNN的探讨:CNN(卷积神经网络)是什么?有入门简介或文章吗?,其中有一个日本会津大学的博士的文章超级全面,大家可以参看其中的代码学习利用tensorflow框架搭建深度学习网络的过程,非常有用!他的回答问题的部分如下,还请大家仔细阅读哈!!!
这里写图片描述

希望今天的博客可以让大家对深度学习有一个较为全面的认识,加油,学习!!!

阅读全文
0 0
原创粉丝点击