0.杂谈
本来个人是准备毕业直接工作的,但前段时间学校保研大名单出来之后,发现本人有保研机会,于是就和主管请了几天假,回学校准备保研的事情。经过两天的准备,也是非常幸运,成功拿到本院的保研名额。明确得到保研名额的时候已经是9月18号,然而国家推免系统开放时间是9月28号,也就是说我只还有10天时间准备保研,而且这个时间点很多学校夏令营、预报名活动早已结束,不再接受学生申请。所以能够申请的学校也就很少,同时这10天之间,还要赶回北京实习,所以时间还是很赶的。
短短10天,发生了很多有趣的事情,但不论怎样,最后的结果还是很不错的,成功保研到华中科技大学,全国排名前10左右的高校,而且计算机很强 。但华科要求,本科非985高校不允许读学硕,只能读专硕。我倒觉得无所谓,反正不准备继续读博,学硕、专硕没有太大区别。
被华科预录取之后,导师要求提前到实验室学习,于是10月10号便来到实验室搬砖。怎么说呢,感觉还是挺累的,比工作还累,早9晚10。但确实能够学习到很多东西,实验室环境很不错,每人一台电脑,等等福利都很好。至此,一直准备工作的我,成功走上读研之路,加油啦。前段时间一直想写篇关于从双非到985高校的飞跃之路,但感觉有点哗众取宠,以后看情况再写吧。
最后,个人准备从推荐方向慢慢转到NLP方向,但推荐方向不会放弃,继续学习。OK,开始学习算法,今天准备讲解CNN(卷积神经网络)。学习卷积神经网络之前,建议学习下深度神经网络,没学习过的可以看我之前写的文章,深度神经网络之前向传播算法、深度神经网络之反向传播算法、深度神经网络之损失函数和激活函数、深度神经网络之正则化。
1.CNN基本结构
首先我们来看看卷积神经网络(CNN)的基本结构。如上图所示,可以看出最左边的图片就是我们的输入层,计算机理解为输入若干个矩阵。接着是卷积层(Convolution Layer),卷积层是CNN所特有的,卷积层使用的激活函数是ReLU,之前在DNN之中介绍过ReLU的激活函数,形式如 R e L U = max ( 0 , x ) ReLU=\max(0,x) ReLU=max(0,x)。卷积层后面的是池化层,池化层也是CNN所特有的,池化层没有激活函数。
卷积层+池化层的组合可以在CNN隐藏层中出现多次,实际使用中根据模型需要而定。同时我们也可以灵活使用卷积层+卷积层,或者卷积层+卷积层+池化层的组合,卷积层+池化层的组合在构建模型时没有限制,但最常见的CNN都是若干卷积层+池化层的组合。
在若干卷积层+池化层的组合后面是全连接层(Fully Connected Layer),全连接层就是之前讲到的DNN结构,只是输出层使用了Softmax激活函数来做图像识别的分类。从上面模型可以看出,CNN相对于DNN,比较特殊的是卷积层和池化层。如果之前熟悉DNN的话,只要把卷积层和池化层的原理理解清楚,那么CNN就简单啦。
2.卷积
既然是学习卷积神经网络,那自然需要了解什么是卷积。在学习高等数学的时候,微积分中卷积表达式和其离散形式如下所示。
s ( t ) = ∫ x ( t − a ) w ( a ) d a s(t)=\int x(t-a)w(a)da s(t)=∫x(t−a)w(a)da
s ( t ) = ∑ a x ( t − a ) w ( a ) s(t) = \sum _a x(t-a)w(a) s(t)=a∑x(t−a)w(a)
当然也可以用矩阵进行表达,其中*****表示卷积。
s ( t ) = ( X ∗ W ) ( t ) s(t)=(X*W)(t) s(t)=(X∗W)(t)
如果是二维的卷积,则其表达式如下所示。
s ( i , j ) = ( X ∗ W ) ( i , j ) = ∑ m ∑ n x ( i − m , j − n ) w ( m , n ) s(i,j)=(X*W)(i,j)=\sum_m \sum_n x(i-m,j-n)w(m,n) s(i,j)=(X∗W)(i,j)=m∑n∑x(i−m,j−n)w(m