如何简单形象又有趣地讲解神经网络是什么?

神经网络很萌的!


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,比如分别代表猫和狗。现在有一些样本:



大家想想,最简单地把这两组特征向量分开的方法是啥?当然是在两组数据中间画一条竖直线,直线左边是狗,右边是猫,分类器就完成了。以后来了新的向量,凡是落在直线左边的都是狗,落在右边的都是猫。

一条直线把平面一分为二,一个平面把三维空间一分为二,一个n-1维超平面把n维空间一分为二,两边分属不同的两类,这种分类器就叫做神经元。

大家都知道平面上的直线方程是,等式左边大于零和小于零分别表示点
在直线的一侧还是另一侧,把这个式子推广到n维空间里,直线的高维形式称为超平面,它的方程是:



神经元就是当h大于0时输出1,h小于0时输出0这么一个模型,它的实质就是把特征空间一切两半,认为两瓣分别属两个类。你恐怕再也想不到比这更简单的分类器了,它是McCulloch和Pitts在1943年想出来的。


这个模型有点像人脑中的神经元:从多个感受器接受电信号,进行处理(加权相加再偏移一点,即判断输入是否在某条直线的一侧),发出电信号(在正确的那侧发出1,否则不发信号,可以认为是发出0),这就是它叫神经元的原因。

当然,上面那幅图我们是开了上帝视角才知道“一条竖直线能分开两类”,在实际训练神经元时,我们并不知道特征是怎么抱团的。神经元模型的一种学习方法称为Hebb算法:

先随机选一条直线/平面/超平面,然后把样本一个个拿过来,如果这条直线分错了,说明这个点分错边了,就稍微把直线移动一点,让它靠近这个样本,争取跨过这个样本,让它跑到直线正确的一侧;如果直线分对了,它就暂时停下不动。因此训练神经元的过程就是这条直线不断在跳舞,最终跳到两个类之间的竖直线位置。

2. 神经网络


MP神经元有几个显著缺点。首先它把直线一侧变为0,另一侧变为1,这东西不可微,不利于数学分析。人们用一个和0-1阶跃函数类似但是更平滑的函数Sigmoid函数来代替它(Sigmoid函数自带一个尺度参数,可以控制神经元对离超平面距离不同的点的响应,这里忽略它),从此神经网络的训练就可以用梯度下降法来构造了,这就是有名的反向传播算法。

神经元的另一个缺点是:它只能切一刀!你给我说说一刀怎么能把下面这两类分开吧。


解决办法是多层神经网络,底层神经元的输出是高层神经元的输入。我们可以在中间横着砍一刀,竖着砍一刀,然后把左上和右下的部分合在一起,与右上的左下部分分开;也可以围着左上角的边沿砍10刀把这一部分先挖出来,然后和右下角合并。

每砍一刀,其实就是使用了一个神经元,把不同砍下的半平面做交、并等运算,就是把这些神经元的输出当作输入,后面再连接一个神经元。这个例子中特征的形状称为异或,这种情况一个神经元搞不定,但是两层神经元就能正确对其进行分类。

只要你能砍足够多刀,把结果拼在一起,什么奇怪形状的边界神经网络都能够表示,所以说神经网络在理论上可以表示很复杂的函数/空间分布。但是真实的神经网络是否能摆动到正确的位置还要看网络初始值设置、样本容量和分布。

神经网络神奇的地方在于它的每一个组件非常简单——把空间切一刀+某种激活函数(0-1阶跃、sigmoid、max-pooling),但是可以一层一层级联。输入向量连到许多神经元上,这些神经元的输出又连到一堆神经元上,这一过程可以重复很多次。


这和人脑中的神经元很相似:每一个神经元都有一些神经元作为其输入,又是另一些神经元的输入,数值向量就像是电信号,在不同神经元之间传导,每一个神经元只有满足了某种条件才会发射信号到下一层神经元。


当然,人脑比神经网络模型复杂很多:人工神经网络一般不存在环状结构;人脑神经元的电信号不仅有强弱,还有时间缓急之分,就像莫尔斯电码,在人工神经网络里没有这种复杂的信号模式。


神经网络的训练依靠反向传播算法:最开始输入层输入特征向量,网络层层计算获得输出,输出层发现输出和正确的类号不一样,这时它就让最后一层神经元进行参数调整,最后一层神经元不仅自己调整参数,还会勒令连接它的倒数第二层神经元调整,层层往回退着调整。


经过调整的网络会在样本上继续测试,如果输出还是老分错,继续来一轮回退调整,直到网络输出满意为止。这很像中国的文艺体制,武媚娘传奇剧组就是网络中的一个神经元,最近刚刚调整了参数。

3. 大型神经网络

我们不禁要想了,假如我们的这个网络有10层神经元,第8层第2015个神经元,它有什么含义呢?我们知道它把第七层的一大堆神经元的输出作为输入,第七层的神经元又是以第六层的一大堆神经元做为输入,那么这个特殊第八层的神经元,它会不会代表了某种抽象的概念?

就好比你的大脑里有一大堆负责处理声音、视觉、触觉信号的神经元,它们对于不同的信息会发出不同的信号,那么会不会有这么一个神经元(或者神经元小集团),它收集这些信号,分析其是否符合某个抽象的概念,和其他负责更具体和更抽象概念的神经元进行交互。

2012年多伦多大学的Krizhevsky等人构造了一个超大型
卷积神经网络[1],有9层,共65万个神经元,6千万个参数。网络的输入是图片,输出是1000个类,比如小虫、美洲豹、救生船等等。这个模型的训练需要海量图片,它的分类准确率也完爆先前所有分类器。纽约大学的Zeiler和Fergusi[2]把这个网络中某些神经元挑出来,把在其上响应特别大的那些输入图像放在一起,看它们有什么共同点。他们发现中间层的神经元响应了某些十分抽象的特征。

第一层神经元主要负责识别颜色和简单纹理



第二层的一些神经元可以识别更加细化的纹理,比如布纹、刻度、叶纹。




第三层的一些神经元负责感受黑夜里的黄色烛光、鸡蛋黄、高光。




第四层的一些神经元负责识别萌狗的脸、七星瓢虫和一堆圆形物体的存在。




第五层的一些神经元可以识别出花、圆形屋顶、键盘、鸟、黑眼圈动物。




这里面的概念并不是整个网络的输出,是网络中间层神经元的偏好,它们为后面的神经元服务。虽然每一个神经元都傻不拉几的(只会切一刀),但是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.


作者:王小龙

链接:

https://www.zhihu.com/question/22553761/answer/36429105

文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#创建自定义特性

概述特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号&#xff08…

win8计算机安全模式,WIN8如何设置按F8进入安全模式

Win8/win10系统想进入安全模式就不是太容易的事了。之前的Win7和XP等系统可以通过在开机时按F8进入安全模式选择菜单。有什么方法可以设置让Win8/win10系统按F8直接进入安全模式菜单。下面学习啦小编向大家介绍让Win8/win10系统通过这种老办法按F8进入安全模式的方法&#xff0…

当你不喜欢一个人(一段话、一篇文章)的时候

为什么80%的码农都做不了架构师?>>> 我知道技术人员都喜欢争论,因为我也算半个。不过我总觉得,有些争论是没有必要存在的。因为沟通是以交流为目的的,若本身对方就不是来交流而是做宣传的,推销一种观点。那…

floatmap 二维数组_用J中的多维数组进行Arrays.fill

用J中的多维数组进行Arrays.fill如何在不使用循环的情况下用Java填充多维数组? 我试过了:double[][] arr new double[20][4];Arrays.fill(arr, 0);结果为java.lang.ArrayStoreException: java.lang.Double提前致谢!11个解决方案87 votes这是…

在程序员面前千万不要说这9句话,我一个同事就死的很惨!

最近,有几位程序员朋友,向我吐槽,经常有人和他说一些让他恼怒的话,他听完都想打人啦。我听完之后也是哭笑不得,将这些程序员朋友的话给整理出来了,大家以后在程序员面前说话可得小心点。。01“我先下班了啦…

C# WPF框架Caliburn.Micro快速搭建

1. Caliburn是什么?Caliburn是Rob Eisenberg在2009年1月26日(Robs MIX10 talk "Build Your Own MVVM Framework")提出的一个MVVM类的开源框架。它是一套用于协助开发WPF,Silverlight,WP7和Win RT等的应用程序的库。Caliburn.Micro由…

怎么可以让计算机不能联网,我想让电脑:只能收发电子邮件,不能上网,怎样设置?...

2006-01-04 14:47:58用美萍卫士就可以。全部2006-01-04 14:47:582006-01-04 13:22:37第一种全部删除 最好的方式打开系统所在目录找到 IE 的所在地全部删除然后安装放火墙,以瑞星为例子~~~找到启动~~关闭HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVers…

MYSQL技术连环斩-MYSQL简述

前言:严格的来说,MYSQL是一款产品而不是一项技术。关于技术和产品的论述,请参考我的博文。现在进行小结一下。可以说数据库技术是为了解决数据之间如何聚合,聚合的数据如何管理的问题。为了实际上的真正应用,就必须选择…

火柴人_火柴人 x THANKSGIVING

滴水之恩当涌泉相报,THANKSGIVING是我们给予对方的温暖。很多时候我们却发现,帮助我们的人其实并不求回报。也许,当我们想要感恩得到的帮助时,更应该做的,是铭记他人的善意,并努力把这份温暖传递下去。2020…

AI催生新的工作机遇:5个未来会很吃香的岗位

导读:人工智能与人类工作是当下许多人津津乐道的一个话题,而讨论的重点大多是围绕在“未来人工智能会不会抢走我们的工作”这个方面。“人工智能”一词经常会让人感觉心生恐惧和忧虑,人们畏惧人工智能所带来的未知可能性,害怕发生…

在 CAP 中使用 AOP ( Castle.DynamicProxy )

简介本篇文章主要介绍如何在 CAP 中集成使用 Castle.DynamicProxy,Castle DynamicProxy 是一个用于在运行时动态生成轻量级.NET代理的库。代理对象允许在不修改类代码的情况下截取对对象成员的调用。可以代理类和接口,但是只能拦截虚拟成员。为什么需要使…

共享服务器硬件要求,共享服务器的配置与管理.doc

编号:Q/NJXX-QR-RJ-2-2012南京信息职业技术学院教 案授课班级41421P、41422P授课时数2序号1时间地点[ ] 年[ ]月[ ] 日 [ ]节 [ ]课程单元共享服务器的配置与管理教学内容能够在Linux中访问Windows的共享资源掌握Linux中安装NFS服务的方法掌握Linux中安装Samba服务的…

Vim as Python IDE on windows

下载安装Python。 从Vim的网站下载vim,建议下Self-installing executable的版本。 编辑vim的配置文件_vimrc 拷贝vimrc_example里面的东东到_vimrc 去掉_vimrc里面的source $VIMRUNTIME/vimrc_example.vim 设置中文支持 "设置编码自动识别, 中文引号显示 "set fileen…

python中matplotlib库实例_Python Matplotlib库入门指南

Matplotlib简介Matplotlib是一个Python工具箱,用于科学计算的数据可视化。借助它,Python可以绘制如Matlab和Octave多种多样的数据图形。最初是模仿了Matlab图形命令, 但是与Matlab是相互独立的.通过Matplotlib中简单的接口可以快速的绘制2D图表初试Matpl…

分布式之数据库和缓存双写一致性方案解析!

一、为什么要写这篇文章?首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作:但是在更新缓存方面,对于更新完数据库…

四年级上册数学计算机笔记,四年级数学下册笔记整理

第一单元四则运算(1)在没有括号的算式里,如果只有加、减法或者只有乘、除法,都要从左往右按顺序计算。 (2)在没有括号的算式里,有乘、除法和加、减法,要先算乘、除法后算加、减法。 (3)在有括号的算式里,要先算括号里面…

CAP 发布 5.0 版本正式发布

前言今天,我们很高兴宣布 CAP 发布 5.0 版本正式版。同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行。在 5.0 版本中,我们主要致力于更好的支持 .NET 5 以及支持新的 Transport,同时在该版本也进行了一些 Bug 修复的工…

电脑上的ofd格式文件如何打开呢_OFD格式的文件怎么打开预览?,来充电吧

我们不管是在工作、学习、下载资源的时候都可能收到别人的文件,但是如果是word或者pfd格式还好,直接在电脑上就可以打开,但是如果是ofd格式的就很难打开了。工具/材料搜狗浏览器、DCS文档在线预览操作方法01打开我们的搜狗浏览器,…

SUSE Linux系统安全配置十条

SUSE由于其出色的性能和对安全较好的控制,吸引了很多企业级用户,目前在国内开始有大量的关键应用。但这并不代表SUSE在使用中就是安全的,SUSE里还有很多安全细节要注意。 目录 1. 补丁、SSH及其它……………………………………3 2. 最小化xi…

用Python画中国地图(二)

在上一篇文章《用Python画一个中国地图》中,我们简单描述了一下如何用Python快速画出一个中国地图的轮廓,似乎没有什么实用价值,这一次我们用实际数据填充它,使它看上去更有意义。上色延续上一次的代码,我们这次还是只…