链接:http://www.zhihu.com/question/22553761/answer/36429105
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
0. 分类
神经网络最重要的用途是分类,为了让大家对分类有个直观的认识,咱们先看几个例子:
- 垃圾邮件识别:现在有一封电子邮件,把出现在里面的所有词汇提取出来,送进一个机器里,机器需要判断这封邮件是否是垃圾邮件。
- 疾病判断:病人到医院去做了一大堆肝功、尿检测验,把测验结果送进一个机器里,机器需要判断这个病人是否得病,得的什么病。
- 猫狗分类:有一大堆猫、狗照片,把每一张照片送进一个机器里,机器需要判断这幅照片里的东西是猫还是狗。
分类器的输入是一个数值向量,叫做特征(向量)。在第一个例子里,分类器的输入是一堆0、1值,表示字典里的每一个词是否在邮件中出现,比如向量(1,1,0,0,0......)就表示这封邮件里只出现了两个词abandon和abnormal;第二个例子里,分类器的输入是一堆化验指标;第三个例子里,分类器的输入是照片,假如每一张照片都是320*240像素的红绿蓝三通道彩色照片,那么分类器的输入就是一个长度为320*240*3=230400的向量。
分类器的输出也是数值。第一个例子中,输出1表示邮件是垃圾邮件,输出0则说明邮件是正常邮件;第二个例子中,输出0表示健康,输出1表示有甲肝,输出2表示有乙肝,输出3表示有饼干等等;第三个例子中,输出0表示图片中是狗,输出1表示是猫。
分类器的目标就是让正确分类的比例尽可能高。一般我们需要首先收集一些样本,人为标记上正确分类结果,然后用这些标记好的数据训练分类器,训练好的分类器就可以在新来的特征向量上工作了。
1. 神经元
咱们假设分类器的输入是通过某种途径获得的两个值,输出是0和1,比如分别代表猫和狗。现在有一些样本:
<img src="https://i-blog.csdnimg.cn/blog_migrate/eadb9eaaa8c3f304c3b42788ce71cf68.png" data-rawwidth="420" data-rawheight="315" class="content_image" width="420">大家想想,最简单地把这两组特征向量分开的方法是啥?当然是在两组数据中间画一条竖直线,直线左边是狗,右边是猫,分类器就完成了。以后来了新的向量,凡是落在直线左边的都是狗,落在右边的都是猫。 大家想想,最简单地把这两组特征向量分开的方法是啥?当然是在两组数据中间画一条竖直线,直线左边是狗,右边是猫,分类器就完成了。以后来了新的向量,凡是落在直线左边的都是狗,落在右边的都是猫。
一条直线把平面一分为二,一个平面把三维空间一分为二,一个n-1维超平面把n维空间一分为二,两边分属不同的两类,这种分类器就叫做神经元。
大家都知道平面上的直线方程是 ,等式左边大于零和小于零分别表示点 在直线的一侧还是另一侧,把这个式子推广到n维空间里,直线的高维形式称为超平面,它的方程是:
神经元就是当h大于0时输出1,h小于0时输出0这么一个模型,它的实质就是 把特征空间一切两半,认为两瓣分别属两个类。你恐怕再也想不到比这更简单的分类器了,它是McCulloch和Pitts在1943年想出来了。
这个模型有点像人脑中的神经元:从多个感受器接受电信号 ,进行处理(加权相加再偏移一点,即判断输入是否在某条直线 的一侧),发出电信号(在正确的那侧发出1,否则不发信号,可以认为是发出0),这就是它叫神经元的原因。
当然,上面那幅图我们是开了上帝视角才知道“一条竖直线能分开两类”,在实际训练神经元时,我们并不知道特征是怎么抱团的。神经元模型的一种学习方法称为Hebb算法:
先随机选一条直线/平面/超平面,然后把样本一个个拿过来,如果这条直线分错了,说明这个点 分错边了,就稍微把直线移动一点,让它靠近这个样本,争取跨过这个样本,让它跑到直线正确的一侧;如果直线分对了,它就暂时停下不动。因此训练神经元的过程就是这条直线不断在跳舞,最终跳到两个类之间的竖直线位置。
2. 神经网络
MP神经元有几个显著缺点。首先它把直线一侧变为0,另一侧变为1,这东西不可微,不利于数学分析。人们用一个和0-1阶跃函数类似但是更平滑的函数Sigmoid函数来代替它(Sigmoid函数自带一个尺度参数,可以控制神经元对离超平面距离不同的点的响应,这里忽略它),从此神经网络的训练就可以用梯度下降法来构造了,这就是有名的反向传播算法。
神经元的另一个缺点是:它只能切一刀!你给我说说一刀怎么能把下面这两类分开吧。
<img src="https://i-blog.csdnimg.cn/blog_migrate/5fee0eb64a676f53fa0b45cee7e9212e.png" data-rawwidth="420" data-rawheight="315" class="content_image" width="420">解决办法是多层神经网络,底层神经元的输出是高层神经元的输入。我们可以在中间横着砍一刀,竖着砍一刀,然后把左上和右下的部分合在一起,与右上的左下部分分开;也可以围着左上角的边沿砍10刀把这一部分先挖出来,然后和右下角合并。 解决办法是多层神经网络,底层神经元的输出是高层神经元的输入。我们可以在中间横着砍一刀,竖着砍一刀,然后把左上和右下的部分合在一起,与右上的左下部分分开;也可以围着左上角的边沿砍10刀把这一部分先挖出来,然后和右下角合并。
每砍一刀,其实就是使用了一个神经元,把不同砍下的半平面做交、并等运算,就是把这些神经元的输出当作输入,后面再连接一个神经元。这个例子中特征的形状称为异或,这种情况一个神经元搞不定,但是两层神经元就能正确对其进行分类。
只要你能砍足够多刀,把结果拼在一起,什么奇怪形状的边界神经网络都能够表示,所以说神经网络 在理论上可以表示很复杂的函数/空间分布。但是真实的神经网络是否能摆动到正确的位置还要看网络初始值设置、样本容量和分布。
神经网络神奇的地方在于它的每一个组件非常简单——把空间切一刀+某种激活函数(0-1阶跃、sigmoid、max-pooling),但是可以一层一层级联。输入向量连到许多神经元上,这些神经元的输出又连到一堆神经元上,这一过程可以重复很多次。这和人脑中的神经元很相似:每一个神经元都有一些神经元作为其输入,又是另一些神经元的输入,数值向量就像是电信号,在不同神经元之间传导,每一个神经元只有满足了某种条件才会发射信号到下一层神经元。当然,人脑比神经网络模型复杂很多:人工神经网络一般不存在环状结构;人脑神经元的电信号不仅有强弱,还有时间缓急之分,就像莫尔斯电码,在人工神经网络里没有这种复杂的信号模式。
<img src="https://i-blog.csdnimg.cn/blog_migrate/a6ad7a38adb568ea877ddc9baecfcd51.png" data-rawwidth="300" data-rawheight="225" class="content_image" width="300">
神经网络的训练依靠反向传播算法:最开始输入层输入特征向量,网络层层计算获得输出,输出层发现输出和正确的类号不一样,这时它就让最后一层神经元进行参数调整,最后一层神经元不仅自己调整参数,还会勒令连接它的倒数第二层神经元调整,层层往回退着调整。经过调整的网络会在样本上继续测试,如果输出还是老分错,继续来一轮回退调整,直到网络输出满意为止。这很像中国的文艺体制,武媚娘传奇剧组就是网络中的一个神经元,最近刚刚调整了参数。
3. 大型神经网络
我们不禁要想了,假如我们的这个网络有10层神经元,第8层第2015个神经元,它有什么含义呢?我们知道它把第七层的一大堆神经元的输出作为输入,第七层的神经元又是以第六层的一大堆神经元做为输入,那么这个特殊第八层的神经元,它会不会代表了某种抽象的概念?
就好比你的大脑里有一大堆负责处理声音、视觉、触觉信号的神经元,它们对于不同的信息会发出不同的信号,那么会不会有这么一个神经元(或者神经元小集团),它收集这些信号,分析其是否符合某个抽象的概念,和其他负责更具体和更抽象概念的神经元进行交互。
2012年多伦多大学的Krizhevsky等人构造了一个超大型 卷积神经网络[1],有9层,共65万个神经元,6千万个参数。网络的输入是图片,输出是1000个类,比如小虫、美洲豹、救生船等等。这个模型的训练需要海量图片,它的分类准确率也完爆先前 所有分类器。纽约大学的 Zeiler和Fergusi[2]把这个网络中某些神经元挑出来,把在其上响应特别大的那些输入图像放在一起,看它们有什么共同点。他们发现中间层的神经元响应了某些十分抽象的特征。
第一层神经元主要负责识别颜色和简单纹理
<img src="https://i-blog.csdnimg.cn/blog_migrate/35b31d7987f0ca46e576e3587567b1ec.jpeg" data-rawwidth="779" data-rawheight="422" class="origin_image zh-lightbox-thumb" width="779" data-original="https://pic4.zhimg.com/cbd8ee99581d1a2e22dca8b0e67f84b3_r.jpg">
第二层的一些神经元可以识别更加细化的纹理,比如布纹、刻度、叶纹。
<img src="https://i-blog.csdnimg.cn/blog_migrate/ab25fb89ff2a37fd0454b8f9941a2885.jpeg" data-rawwidth="1060" data-rawheight="531" class="origin_image zh-lightbox-thumb" width="1060" data-original="https://pic4.zhimg.com/78fd60058ceabf34d3936ac8fe618c77_r.jpg">
第三层的一些神经元负责感受黑夜里的黄色烛光、鸡蛋黄、高光。
<img src="https://i-blog.csdnimg.cn/blog_migrate/a4a86dec413237b8ec986cdeed226eae.jpeg" data-rawwidth="1058" data-rawheight="537" class="origin_image zh-lightbox-thumb" width="1058" data-original="https://pic3.zhimg.com/aae832d13b33f15ba97c358fdf7319d2_r.jpg">
第四层的一些神经元负责识别萌狗的脸、七星瓢虫和一堆圆形物体的存在。
<img src="https://i-blog.csdnimg.cn/blog_migrate/35f369a3390898b5286cce830cc5b4c8.jpeg" data-rawwidth="1058" data-rawheight="489" class="origin_image zh-lightbox-thumb" width="1058" data-original="https://pic4.zhimg.com/04468c646e0d456b0fd4772d4e2a993b_r.jpg">
第五层的一些神经元可以识别出花、圆形屋顶、键盘、鸟、黑眼圈动物。
<img src="https://i-blog.csdnimg.cn/blog_migrate/e66493e622e92065b96159ffc73d56f0.jpeg" data-rawwidth="1060" data-rawheight="601" class="origin_image zh-lightbox-thumb" width="1060" data-original="https://pic3.zhimg.com/ab6984020030ff15f9ddb3eb716c7da6_r.jpg">
这里面的概念并不是整个网络的输出,是网络中间层神经元的偏好,它们为后面的神经元服务。虽然每一个神经元都傻不拉几的(只会切一刀),但是65万个神经元能学到的东西还真是深邃呢。
[1] Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems (pp. 1097-1105).
[2] Zeiler, M. D., & Fergus, R. (2013). Visualizing and understanding convolutional neural networks. arXiv preprint arXiv:1311.2901.
地址是: A Neural Network Playground (可能要翻墙)
<img src="https://i-blog.csdnimg.cn/blog_migrate/ba85de83eed004a7d55baac50b79c179.jpeg" data-rawwidth="800" data-rawheight="508" class="origin_image zh-lightbox-thumb" width="800" data-original="https://pic1.zhimg.com/fdbe8b10d5d2557da5201d6860cdb6a4_r.jpg">
如果不明白里面的 ReLU,L1 等等是什么,没关系,在搜索引擎查一下都可以查到答案。代码在 Github 上,有兴趣的朋友可以去给它加 Dropout,Convolution,Pooling 之类。
你需要挑选芒果,你不知道什么样的芒果最好吃,所以你就尝遍了所有的芒果,然后自己总结出个大深黄色的比较好吃,以后再去买的时候,就可以直接挑选这种。
那什么是机器学习呢,就是你让机器“尝”一遍所有芒果,当然,也假设它知道哪些好吃,让机器去总结一套规律(个大深黄色),这就是机器学习。具体操作,就是你描述给机器每一个芒果的特征(颜色,大小,软硬……),描述给机器其输出(味道如何,是否好吃),剩下的就等机器去学习出一套规则。
等等,那机器是怎么学习到这个规则(个大深黄色的好吃)的?没错,是通过机器学习算法。而题主所问的神经网络,恰好就是一种机器学习算法!近些年来,由于深度学习概念的兴起,神经网络又成为了机器学习领域最热门的研究方法。
我相信当明确神经网络是一种机器学习算法之后,就可以很轻易的给一个外行讲清楚神经网络到底是用来做什么的。可是神经网络为什么可以完成这个功能呢?
神经网络就像一个刚开始学习东西的小孩子,开始认东西,作为一个大人(监督者),第一天,他看见一只京巴狗,你告诉他这是狗;第二天他看见一只波斯猫,他开心地说,这是狗,纠正他,这是猫;第三天,他看见一只蝴蝶犬,他又迷惑了,你告诉他这是狗……直到有一天,他可以分清任何一只猫或者狗。
其实神经网络最初得名,就是其在模拟人的大脑,把每一个节点当作一个神经元,这些“神经元”组成的网络就是神经网络。而由于计算机出色的计算能力和细节把握能力,在大数据的基础上,神经网络往往有比人更出色的表现。
当然了,也可以把神经网络当作一个黑箱子,只要告诉它输入,输出,他可以学到输入与输出的函数关系。神经网络的理论基础之一是三层的神经网络可以逼近任意的函数,所以理论上,只要数据量够大,“箱子容量”够大(神经元数量),神经网络就可以学到你要的东西。
第一次回答问题,什么都想说,可能比较乱,有不对的地方,欢迎大家批评指正。
今年,审读吴军老师的《数学之美》第二版,读到这两段话时,我笑了,原来我并不孤独——
【 有不少专业术语乍一听很唬人,“人工神经网络”就属于这一类,至少我第一次听到这个词就被唬住了。你想啊,在大家的印象当中,人们对人脑的结构都还根本没有搞清楚,这就冒出来一个“人工的”神经网络,似乎是在用计算机来模拟人脑。想到人脑的结构那么复杂,大家的第一反应一定是人工神经网络肯定非常高深。如果我们有幸遇到一个好心同时又善于表达的科学家或教授,他愿意花一两个小时的时间,深入浅出地把人工神经网络的底细告诉你,你便会发现,“哦,原来是这么回事”。如果我们不幸遇到一个爱卖弄的人,他会很郑重地告诉你“我在使用人工神经网络”或者“我研究的课题是人工神经网络”,然后就没有下文了,如此,你除了对他肃然起敬外,不由得可能还会感到自卑。当然还有好心却不善于表达的人试图将这个概念给你讲清楚,但是他用了一些更难懂的名词,讲得云山雾罩,最后你发现听他讲了好几个小时,结果是更加糊涂了,你除了浪费时间外一无所获,于是你得出一个结论:反正我这辈子不需要搞懂它了。
大家可别以为我是在说笑话,这些都是我的亲身经历。首先,我没有遇到过一两小时给我讲懂的好心人,其次我遇到了一批在我前面卖弄的人,作为年轻人,总是希望把自己不明白的东西搞懂,于是我决定去旁听一门课。不过,我听了大约两三次便不再去了,因为除了浪费时间,似乎我并没得到什么收获。好在我自己做研究暂时用不到它,也就不再关心了。后来在美国读博士期间,我喜欢在睡觉前躺着看书,没事儿就捧着几本关于人工神经网络的教科书在床上看,居然也看懂了。然后再用它做了两三个项目,算是学会了。到这时回过头来再看“人工神经网络”,其实并不复杂,入门也不难,只是我走了弯路。——吴军】
君子报仇,三十年不晚。大学毕业三十年后,吴老师在数学之美 (第二版) 里,单独用一章讲Google大脑和人工神经网络,一抒当年的郁闷,也顺便帮我解了气:)
我把这一章的内容贴一部分在这里,希望对大家理解神经网络的概念有帮助:
<img src="https://i-blog.csdnimg.cn/blog_migrate/eace3f28fc0effa6a7ff7543176df2c0.png" data-rawwidth="623" data-rawheight="780" class="origin_image zh-lightbox-thumb" width="623" data-original="https://pic1.zhimg.com/3e7e90e3e9bc861b71dbe035ac3a8a3c_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/5da46f78bfd545d4dfffd1e5c890f27c.png" data-rawwidth="732" data-rawheight="760" class="origin_image zh-lightbox-thumb" width="732" data-original="https://pic3.zhimg.com/dc33efe34aa93870f076ff04b0486ed6_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/94cb97eaed894163b9e3d51a79cfd92e.png" data-rawwidth="582" data-rawheight="632" class="origin_image zh-lightbox-thumb" width="582" data-original="https://pic2.zhimg.com/1911742f20498bb1588241cb1a2349a1_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/6d507bb343a4e41b5386d85ed2709669.png" data-rawwidth="594" data-rawheight="705" class="origin_image zh-lightbox-thumb" width="594" data-original="https://pic2.zhimg.com/a4e62e1049481ff14ea200f93802a2f1_r.jpg"><img src="https://i-blog.csdnimg.cn/blog_migrate/056caccfd183b0cada4c0cc712ef8d64.png" data-rawwidth="641" data-rawheight="771" class="origin_image zh-lightbox-thumb" width="641" data-original="https://pic3.zhimg.com/e5a1dfdea1fe86c62d7ace0e75b0c7a6_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/9f62aa46ffd54a9884d797677f37e37a.png" data-rawwidth="798" data-rawheight="677" class="origin_image zh-lightbox-thumb" width="798" data-original="https://pic4.zhimg.com/89cf1479a355eaed69475bd566125f3f_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/3a012600599e73ac54fd662facd0e5cb.png" data-rawwidth="650" data-rawheight="594" class="origin_image zh-lightbox-thumb" width="650" data-original="https://pic3.zhimg.com/4d41bd2b861d1392ed096eab1b1cfb2e_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/cee19f62b4c18f0543e19ea7f4b647bd.png" data-rawwidth="646" data-rawheight="441" class="origin_image zh-lightbox-thumb" width="646" data-original="https://pic1.zhimg.com/acba3bd0bae492a9f4f1fb8e6825bac0_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/4a0400f212896612a99133174bc0db17.png" data-rawwidth="637" data-rawheight="539" class="origin_image zh-lightbox-thumb" width="637" data-original="https://pic4.zhimg.com/6a73c162ad9d62665d3784b016395d03_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/41b557a6eb7898db810c3cfb63f4dafd.png" data-rawwidth="581" data-rawheight="620" class="origin_image zh-lightbox-thumb" width="581" data-original="https://pic1.zhimg.com/703f0cd58e5b2102843aa513e39ee6dc_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/d43e19a14c53386efc4f252d1f3d842a.png" data-rawwidth="733" data-rawheight="807" class="origin_image zh-lightbox-thumb" width="733" data-original="https://pic1.zhimg.com/36605f5df1d943f32a9493acbf1f7044_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/fde6803316a2f959d6c2c4e15f2a4ea8.png" data-rawwidth="679" data-rawheight="454" class="origin_image zh-lightbox-thumb" width="679" data-original="https://pic3.zhimg.com/c698ac34582b8f53044e2f0729fdf002_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/f4e834a43beef4f64543407c19e491dc.png" data-rawwidth="721" data-rawheight="410" class="origin_image zh-lightbox-thumb" width="721" data-original="https://pic1.zhimg.com/edc24d6843d5f7a54e3433121ab6d91c_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/a646fe8796697d9949615a97ff9afbc8.png" data-rawwidth="620" data-rawheight="604" class="origin_image zh-lightbox-thumb" width="620" data-original="https://pic1.zhimg.com/afe205a3d22e4dc3e71f3561620462e0_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/746c33ce1206fee4888900a824a21262.png" data-rawwidth="639" data-rawheight="647" class="origin_image zh-lightbox-thumb" width="639" data-original="https://pic4.zhimg.com/6eac9fba034a66f09e8d0c8055ba5c4f_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/cd657623a6e97caaa58e24effeafe64e.png" data-rawwidth="717" data-rawheight="636" class="origin_image zh-lightbox-thumb" width="717" data-original="https://pic3.zhimg.com/9544346897fd9c86ba30d52f11e44806_r.jpg"> <img src="https://i-blog.csdnimg.cn/blog_migrate/5bd804199587c60b636f5d7eed07c919.png" data-rawwidth="650" data-rawheight="768" class="origin_image zh-lightbox-thumb" width="650" data-original="https://pic4.zhimg.com/cc675ff571189d58f9cd2482e551b34f_r.jpg">