前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[机智的机器在学习] 卷积神经网络入门教程(1)

[机智的机器在学习] 卷积神经网络入门教程(1)

作者头像
用户1622570
发布2018-04-11 15:38:39
7690
发布2018-04-11 15:38:39
举报
文章被收录于专栏:机器学习和数学

机智的机器在学习,就像机智的你现在在学习一样,当你在看这篇文章的时候,你就是在学习,学习的材料(数据)就是这篇文章。学习的结果就是你了解了卷积神经网络是个什么鬼。同理可得,机器在学习(也可以叫训练机器,想想运动员怎么训练)的时候,它的眼里看着的就是数据(数字,图像,文本,音频,视频。。。),学习的结果就是数据中有哪些内容,它的各种结构,特征是什么样子的。

说句题外话,我开通这个公众号,其实不求粉丝有多少,阅读量有多少,讲道理,这几天我感觉把自己写的东西,发到群里,朋友圈确实需要勇气,如果打扰到谁了,这里说声抱歉。我只是想总结一下我走过的路,以及以后我要走的路,然而并不是每条路都是非常平坦的大道,难免会遇到一些坑,不管是大坑还是小坑,如果能提醒到后来的人,那我就很开心了呀!* . *然后水平有限,有哪些坑没有填满,那就需要我们共同努力了!另外我会尽量写完之后检查一遍,减少错别字(其实我不喜欢打错别字的童鞋),一般是写完之后就直接发了,请大家别理解。

今天正式开始卷积神经网络的学习了,卷积神经网络,就是非常著名的Convolution Neural Networks,简称CNN。它包含两个意思,一个是卷积,一个是神经网络。卷积的概念在之前两篇文章中已经提到过了,所以今天首先需要介绍一下什么是神经网络(Neural Networks, NN)。神经网络这个词是我在刚上大学那会参加数模比赛的时候就听到的一个词,一直觉得很牛叉,而且深不可测。所以一直都是对他敬而远之,而且那时候深度学习也没现在这么火,神经网络的出现频率没有现在这么高。

直到上了研究生之后,深度学习被越来越多的人所熟知,神经网络再一次走近了我的视线。当然我们知道深度学习的鼻祖是在06年自然or科学上发表的一篇文章,从哪开始NN就开始了新的高潮。但是对于我这样的菜鸟来说,研究它也是一年前的事情。开始讲解NN之前,我想和大家分享一下我的故事,我是怎么走到现在这条路上的。

在我13年底决定考研的时候,那时候大数据刚刚新起,我当时就觉得这个东西以后要火(。。./自恋.sh),而事实证明现在确实很火,只不过现在被深度学习的风头有点盖过了的意思。然后我就开始上网各种查资料,忘记是在哪看到了的,有个专业叫应用统计专业,研究方向是大数据分析,也有的学校叫大数据挖掘。然后我就决定报这个专业。那时候没想以后做深度学习,因为那时候深度学习我还不知道。那时候想着是做数据分析,但是大家可能知道还有个工作叫数据挖掘。有段时间我特别纠结,这两个有啥区别,然后各种百度,查资料,中间也耗费了很多精力。而事实是,根本没有必要去纠结这个问题。(== 别拍我)。因为数据分析和数据挖掘是很难分清的,据我所知,在不同的公司,这两个岗位设置是没法说的清的,做数据分析的公司他可能也会要求你掌握一些数据挖掘的算法和Java,C++这些比较底层的语言。这个问题先不说了,然后从我研究生被录取之后开始,研究生录取之后,我开始学习R语言,因为自己是统计专业,大学的时候也听老师说过,R语言对于统计的学生来说是必须要掌握的。但是作为一个从来没动手编程过得学数学出生的菜鸟来说,开始学R的时候,简直是痛苦。但是“世上无难事,只怕有心人”,我大概花了两个月的时间基本入门了R语言。但是我想对于R语言和Python语言的选择,很多人接触数据分析的时候,肯定问过这个问题,我也未能免俗。经过一个月左右的时间,经过查找资料,看各种帖子的讨论,最终我慢慢转换到了Python。然后大家应该听说过数据挖掘十大算法,然后我的学习之路就是从这十大算法开始了,我就想着一个一个的啃下来就好了。但是开始的几个思想还比较简单,但是到了支持向量机(Support Vector Machine, SVM),我卡住了,这个问题我研究了大概有4,5个月的样子,因为每次看论文的时候,都会有新的问题出来,这也许就是学的越多,不懂的越多吧。到研究算法的时候,我才知道原来有个很好玩的东西叫机器学习。但是就这个问题,同样我也纠结了很久,这个是什么鬼哦,学习的意义在哪!但是怎么说呢,反正就是学习,慢慢的就走上了这条路。恩,确实是很慢很慢慢!!!但是我觉得我还是很幸运的,虽然很慢,但是技能点也算没有跑偏太多。

好了,说了这么多,下面划下重点:1. 把Python学好,虽然语言不是靠学习能学会的,就像英语,我们从初中开始,有的同学可能从 小学开始,学习了十几年的英语,但是英语水平?打个问号。那要怎么掌握Python? 练!敲代码!!!2. 机器学习:十大算法先掌握了。但是这里有个问题,机器学习是需要一定的数学背景的,所以如果你是跨专业,甚至跨学科。。这个问题我后面会单独讲。把涉及到的知识都会讲一遍。3.只管去学,别问为什么。

今天废话有点多,是不是有童鞋已经点了左上角的叉叉了!!!囧。下面开始NN,我尽量用最简单的方式让大家理解并且好用!

1 神经网络-(Neural Networks, NNs)

回忆一下我们高中生物里面学习的神经元相关的知识,轴突?突触?再联想一下我们人的大脑。。。停,一般的教程会按照这个思路进行。我觉得还是算了吧,毕竟扯那些没用的真的没用。

我理解的神经网络就是一个多元线性回归再加一个复合函数(多元线性回归的输出作为另外一个函数的输入)。多元线性回归的一般形式是:

(亲自动手写公式,有木有啊)

然后我们把得到的结果f(x)作为自变量输入到sigmoid函数中:,

其中sigmoid函数为:

sigmoid函数,在数学中称为logistics函数(在深度学习里面叫做激活函数,而且激活函数的种类有很多种,常见的sigmoid,tanh,relu,Leaky Relu,PRelu等)。它的值域是(0,1),而为什么后面等于0或者1呢,这里我假设神经网络在二分类问题中的应用。

看一下图1,这是一个最简单的NN。X1,x2,……,Xn分别是n个自变量,W1,W2,……,Wn是n个系数。中间的圆圈(神经元)就是求和的过程(联想图像卷积的计算步骤),最后输出一个y,y的值在0到1之间。这就是一个简单的神经网络的实现思想。 下图右上角那副图就是一个sigmoid函数的图像。本来想自己画一下,听说这样可以提高通过微信原创审核的概率,想想还是算了吧,虽然不复杂,也挺麻烦的。

图1:神经网络

好了,下面我们看一下公众号的头像,这个图要比图1复杂一点,为什么复杂呢,是因为它里面的圈圈比较多,圈圈多了就说明他的网络结构比较复杂,相互关联的神经元比较多。图1就好比一个人单打独斗的活在这个世界上,那么他所能学习到的信息必然是有限的,而图2则不同,他有很多相互关联的家人,亲戚,朋友, 同学,他们之前通过信息的传递,分享,可以学习到关于这个世界更多的信息。

下面举例来说,最左边黄色那一层,代表Input,神经元的输入,中间的两层,橙色和浅蓝色(浅绿色?)代表隐藏层Hidden1和Hidden2,最右边灰色的代表输出层Outputs。而图1中,他也有是输入,隐藏,输出的,中间的圈圈就代表隐藏。然后图2的Inputs有7个神经元,Hidden1有5个神经元,计算一下中间一共有几条线?5*7=35条,其他以此类推。

图2:多层神经网络

这里有35条线,就代表35个参数,这个参数就是神经网络中的权重,而神经网络的学习就是学习这35的参数的值是多少。你可能会问,为什么要学习?那是因为对于不同的Inputs,他们的值是不一样的,所以对应的参数也不同。公式我不就写了,学习公式可以有助于理解,但是太多了(lan)。

2 卷积神经网络(ConvolutionalNeural Network, CNN)

这里我还是不想按照常规的方法来讲,主要想通过经典的几幅图加上我自己的理解来说明,这几幅图是研究CNN的童鞋都会见到的,但是不仔细看很容易掉坑里。

首先看一下图3,左边这个,Fully Connected Neural Net,全连接神经网络,刚才图2说5*7=35,这就是一个全连接,顾名思义,神经元和神经元之间每个都有链接,但是事实是什么,想一下,这个社会你认识很多人,但是认识的人你每天都联系吗?是不是只会联系一部分。这里栗子不知道是不是恰到,但是机智的你一定明白我的意思了。

图3:局部链接和权值共享

因为事实是这个样子的,所以就有了右边这张图。Locally Connected NeuralNet,局部链接,或者叫局部感知。为什么是局部感知, 因为这就又回到了开始的地方,神经网络来源于神经学家对于人脑的研究,而我们大脑皮层对于外界信息的感知就是这个样子的,是分不同的大脑皮层的区域来感知外界信息的。另外一个问题是权值共享,权值共享就是说对于不同的输入,他们的权值是一样的,这个很明显,因为对于一个图像来说,他们的卷积核是相同的。

划重点:左图带来的问题是网络参数太多了,学习起来太费劲,改进的办法是右图,通过部分神经元的链接,来减少参数个数。注意右图的Filter size = 10*10,这个Filter就是我们昨天讲的滤波器,在CNN里面称为卷积核。也就是通过大小为10*10的一个矩阵,和原始图像做卷积。矩阵的初始值,叫做权重的初始化,后面会单独讲每种初始化方法的区别。

然后我们在看一下下面这张图,假设图像的大小是1000*1000的,1000*1000=100万个像素值,联系前面的神经网络,这100万就是Hidden1中神经元的个数,我们的卷积核的大小是10*10=100个元素的矩阵,100*1000000=1亿个参数。这样还是很多,怎么办?大牛们又提出了图4右边这个,Convolutional Net,卷积网络。

这里提一个问题,就是我们做Filter的目的是为了什么?目的是为了提取特征,一种Filter只能提取一种特征,特征提取是不够充分的,而一副图像是包含很多特征的,那怎么办?这就有了图4右边的这个。我们用100个Filter不同的Filter来提取特征,100x10x10=1万个参数,这样参数量大大减少了!

图4:多核卷积

接下来我们通过一个gif图来看一下,图像卷积的计算过程。首先我们有图5左边的这个比较大的原始图像矩阵,里面的值代表像素值,实际应用中的像素值是0-255的浮点数或者整数。黄颜色一直在移动的矩阵,仔细看一下,他其实是这样一个矩阵:

1x1 + 1x0 + 1x1 + 0x0 + 1x1 + 1x0 + 0x1 + 0x0 + 1x1 = 4,就得到了新的右边粉色的矩阵的第一个元素4.其他以此类推。我们称为Convolved Feature,卷积特征。

图5:图像卷积的计算过程

卷积神经网络CNN,第一部分入门就介绍到这里,关于这部分,我会再讲两次吧,下一次讲一下CNN的训练过程,再下一次会把比较经典的CNN网络介绍一下,比如LeNet,VGG16,AlexNet,GoogLeNet等。有可能讲一下常用的网络层的特点及使用的经验,但是这个我不是很有信心能讲好。毕竟经验不足,而调参又是一个大坑!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档