从生物神经网络到人工神经网络

640?wx_fmt=gif


如今提及人工智能,大家期待的一定是某种可以“学习”的方法,这种方法使用数学模型从数据中获取模式的某种表示。在众多“学习”方法中,获得最多关注,承载最多期望的非“神经网络”莫属。既然我们将这种数学方法称作神经网络,那么他必然和广泛存在于生物体内的神经网络存在某种联系。让我们考察一个典型的神经连接。


640?wx_fmt=png


每个神经元(细胞)都向外伸出许多分支,其中用来接收输入的分支称作树突(dendrities),用来输出信号的分支称作轴突(axon),轴突连接到树突上形成一个突触(synapse)。每个神经元可以通过这种方式连接多个其他神经元,每个神经元也可以接受多个其他神经元的连接。很多连接起来的神经元形成了网状结构,海量具有传感和伸缩功能的体细胞通过神经纤维连接在这个网状结构的输入和输出端,中枢神经系统正是通过这种网状结构获得了“智能”,至少是驱动机体做出了趋利避害的选择。


640?wx_fmt=jpeg


模式识别中的分类问题就是一种典型的选择。看起来,这给出了一种解决分类问题的启示。但是这种网状结构是怎么工作的呢?生物学家已经观察到的事实是,当有外界刺激时,网络上的某些神经元会被次第激活。神经元被激活的意思是这个神经元会向外传递信号或者对外传递的信号强度较大。


为了便于利用,需要对激活过程建立数学模型。首先将目光聚焦在一个突触上,轴突释放递质被树突吸收或者电信号从树突传递到轴突就完成了信息的传递。如何表示突触传递的信息呢?给出选择是用一个数值来表示,这寓示着将信息只归为一个类别,并用数值的大小表示其数量方面的属性。这样粗暴的简化有意义吗?实际递质可是多种多样的啊[1]!显而易见将一个轴突的输出表示成一个多维向量才是更合理的。但是我们可以引入多个虚拟突触来实现这个多维向量的各个维度的信息的传递,既然都是同样结构的突触,为何不先只考察其中一个呢。


640?wx_fmt=png


接下来考察神经元的激活。激活可以有两种模型结构——跳变式和连续式。跳变式激活方式是:引入一个阈值,当输入信息经过某种处理后大于阈值即表示激活,小于阈值表示未激活。连续式激活方式表示神经元不是只有激活和未激活两种状态,而是有不同的激活水平,输入信息经过某种处理后直接输出激活水平。同样,因为在突触中可能[几乎是确定的]同时传递了多种信息,是否应该为一个神经元提供多个激活模型呢?对这个问题解答同样是同形重复,引入虚拟神经元,让一个神经元只表示其中一个激活模型。让这个虚拟神经元接收所有树突上的输入信息,经过激活模型处理后生成一维的激活水平。什么?激活水平也应该是多维的?好办,再引入虚拟神经元,每个神经元只管生成其中某一维的激活水平。


640?wx_fmt=png


多维变一维,显然数学模型应该是加权和,给每一维找到一个权重相乘再加起来。


640?wx_fmt=png


但是这个模型是线性的,所有输入和输出组成的点集落在一个超平面上。是不是太简单了点,不管怎么调整这几个权重参数可以表示的情形都是平面。那么再引入一个非线性[2]函数以这个加权和为输入,将其输出作为激活水平,这个非线性函数称作激活函数。至此神经元的数学模型算是初步建立起来了。


640?wx_fmt=png


激活函数该如何选取呢?很可惜,答案是不知道。目前对生物神经网络的了解,不能给予确定激活函数的启示。不知道那么就可以随意安排,早期常用的激活函数是Sigmoid。其函数图像和公式如下。


640?wx_fmt=png


这是一个关于(0,0.5)中心对称的函数,以加权和作为输入形成的超平面总是关于(0,0.5)中心对称的,这多少让人感觉有些不安。那么在激活函数的自变量上增加一个偏移量,这个偏移量将会导致函数图像在z轴上平移。至此构成神经网络的基本元素——处理输入产生输出的神经元模型已经建立好了。


640?wx_fmt=png


激活函数的偏移量使得超平面可以离开原点了,这仅仅是数学上的意义;其实它还完成了对跳变式激活方式的建模。参考上图,假设水平蓝线以上的数值才能表示激活,那么对于蓝色的图像来说处于持续激活状态,绿色的图片表示只要有输入就激活,而红色的部分则表示当输入数值超过5时才忽然进入激活状态,这就是跳变了。


在实际操作中对于激活函数的选取是有一定指导原则的——层数越深,激活函数越平缓。这个原则并不是来自于对神经网络模型的深入洞察,而来自于反向传播(BP)练方法的缺陷。(对于这个缺陷我会新开一篇,并附上代码专门说明。)然而,随着对生物神经网络更进一步的了解,是否能给出更好的激活函数模型呢?答案还是不知道,甚至启示我们要放弃这种神经网络模型都是有可能的。


有了神经元,就可以构建网络了。在构建网络之前,先对神经元的图示结构进行简化。如下图所示,最终我们用一个圆圈表示了神经元,用带箭头的线表示了它可以接收的输入和可以产生的输出。


640?wx_fmt=png


既然神经元是一个处理输入产生输出的模型,是否可以随意地把一个神经元的输出连接到另一个神经元的输入。当然可以!卷积神经网络(CNN)和回返神经网络(RNN)这两款分别在计算机视觉和自然语言处理中发挥巨大价值的神经网络结构正是源自于神经网络模型的这种灵活性。当然,这种灵活性也是“深度学习专家们”的学术灌水手段!。为了便于模型求解和编程实现,有一种简单的层状结构的构网方法。某一层的神经元仅接收且完全接受紧前层神经元的输入。采用这种原则构建出来的神经网络称作全连接神经网络。


640?wx_fmt=png


让我们回到给生物神经网络建立数学模型的目的上去——分类。怎么才能用神经网络进行分类呢?分类的数学语言描述是,找从特征空间到类别空间的映射。特征空间的确立比较简单,比如为了确定一个人是男是女,可以使用体重、身高、胸围、腰围、臀围这几个属性组成的特征空间。类别空间的确立有两种比较显然的方案。第一种,只用一个维度,0表示女,1表示男。第二种,用两个维度,那个维度取值大就认为属于哪个类别,如:(1,0)表示女,(0,1)表示男。通常用第二种方案表示类别空间,第一种用于解决回归问题。并没有什么特殊的原因,只是第二种比较便于建立目标函数模型(通常是损失函数)以实现最优化,这也是尽量把待解决问题向分类问题上转换的原因。


让神经网络的输入层神经元的个数等于特征空间的维数,输出层神经元的个数等于类别空间的维数,中间层随意安排。然后将已知的数据带入模型,求解模型的参数。将不确定男女的(体重,身高,胸围,腰围,臀围)带入模型,求出一个解(女,男);然后判断那一维的数值大,女>男就认为输入的是女性的特征,男>女就为认为输入的是男性的特征。


[1]Bilingual neurons release glutamate and GABA

 https://www.nature.com/articles/nn.3840
[2]激活函数也可以是分段线性函数


本文作者:唐锐,毕业于长安大学遥感科学与技术专业,曾从事基于计算机视觉的智能交通系统研发3年,也在互联网公司锻炼过几年,现加入了原同事及朋友创办的北京天地智绘科技有限公司,从事卫星影像解译系统研发。比较擅长系统架构设计、算法研发以及开发过程管理;喜欢钻研,不随大流。


转载请联系本公众号


640?wx_fmt=png

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

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

相关文章

很遗憾,我们正在逐渐丧失专注阅读的能力

这是头哥侃码的第238篇原创最近生活没什么规律,睡得晚,起得早,似乎除了工作之外,其余所有的节奏都有点乱了。前几天去体检,没想到像我这样的 “老司机”,居然会忘记 “要空腹” 的规定,愣是在体…

socket案例一

编写一个网络应用程序,有客户端与服务器端;当客户端向服务器端发送请求时,客户端输出服务器端返回的字符串。 回顾下socket的开发步骤: 1) 建立Socket连接 2) 获得输入/输出流 3)读/写数据 4) 关闭输入/输出流 5) 关闭…

java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园

我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用,是不受影响…

陶哲轩的10岁与30岁

Terence Tao(陶哲轩),1975年7月17日出生于澳大利亚Adelaide(阿德莱德)。本讲话作于1985年上半年,即陶哲轩尚未满10周岁时所作,一个稚气儿童,给大学生和教授们作报告,少见…

NET问答: 重写了 Equals,还有必要重写 GetHashCode 吗?

咨询区 David Basarab:直入主题,参考如下代码:public class Foo {public int FooId { get; set; }public string FooName { get; set; }public override bool Equals(object obj){Foo fooItem obj as Foo;if (fooItem null) {return false;…

【转载】DataKeyNames,DataKeys 用法浅谈

原文地址:http://www.cnblogs.com/amos/archive/2010/07/16/1778796.htmlDataKeyNames作为GridView中的一个属性,我们可以利用这个属性结合DataKeys方便的访问GridView中每个字段的值。先说怎么用DataKeyNames可以直接在GridView属性中设置,多…

如果编程替换成中文就会怎样? 程序员看了表示头疼

首先大概的看一下中文编码:你以为会写中文就会编程吗?这就像你以为会写汉字就会写出好文章一样。编程是和机器沟通,因此要用机器的语言而不是人类的语言。最早的程序就是0和1的数字,不是中文也不是英文。以前的程序员,…

java new 面试_java面试30问

第一,谈谈final, finally, finalize的区别。第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?第三,Static Nested Class 和 Inner Class的不同,说得越…

使用visio 2016 绘制画UML时序图(Sequence Diagram)

什么是时序图?时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。让我们来看一看Visio2016对时序图的的解释。时序图的元素我们在画时序图时会涉及到7种元素&…

网页颜色搭配

兼职请上猪八戒网站转载于:https://blog.51cto.com/ayyzddq/598474

数字化诗人:这可能是第一位用算法写诗的诺贝尔文学奖得主

一位英国教授发现,一些优秀的诗人早在20世纪60年代就开始使用编码算法来写诗了。著名作家J.M.Coetzee,在早期的英国超级计算机上开发了创作诗歌的软件当我们回顾历史上探索科技应用的人才时,通常不会想到英语教授。但是伦敦国王学院现代文学博…

在asp.net core中使用的验证框架FluentValidation

FluentValidation在asp.net core中怎么使用?先安装包。Install-Package FluentValidation.AspNetCore和上一篇的实体类和验证类一样。实体类:public class Person {public int Id { get; set; }public string Name { get; set; }public string Tel { get…

【EFCORE笔记】异步查询工作原理注释标记

异步查询 当在远程数据库中执行查询时,同步查询可能会阻止当前线程,异步查询可避免阻止线程,这有助于避免冻结户端界面, 异步操作还可以增加 Web 应用程序的吞吐量,可以在数据库操作完成前释放线程去处理其他请求。EF …

java 进程同步代码_java 实现进程间的同步(源代码)

操作系统课程设计:实现进程间的同步。 有问题留言import java.util.concurrent.Semaphore; /******** 信号量 *******/ class Sign { final static int NUMS 6; // 进程的数目 final static int RUN 1; // 运行完 final static int STOP 0; // 阻塞态 static int…

CSS日常公用样式与一些解决方案

一、自己总结的公用样式解析html, body, div, p, ul, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, form, input, select, button, textarea, iframe, table, th, td { margin: 0; padding: 0; }img { border: 0 none; vertical-align: top; }ul, li { list-style-type: none; }h1…

上班族吐槽大集合:那些发生在公司的傻X奇遇

“明明不需要加班,到了点却偏偏没人起身走。”—— 小爱“头脑风暴,人越多效率越低下,最后风暴出来的东西也很难落实。”—— 好奇心“只是申请个办公用品,需要人事处签字,行政部签字,总监签字,…

C# 9 record 并非简单属性 POCO 的语法糖

最近升级专案到大统一 .NET 5 并使用 C#9 语法尝试改写套件,发现之前以为 record 只是简单属性 POCO 的简化语法糖的认知是错误。另外因为 POCO 属于需定义口语词,这边在本文定义简单属性 POCO 为 public class 类别 {public string ID{get;set}/*略*/} 只有属性的简…

java中注解的解析_全面解析Java中的注解与注释

注解一、什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次,可以成为java 的一个类型。语法是以 开头简单来说&#x…

安装配置Mysql主从

环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # 确保有如下行 server-id 1 log-binmysql-bin binlog-do-dbmysql #需要备份的数据库名&#xf…

玩的时候好好玩,学的时候好好学。不做半吊子

要用大块的时间学习,玩的时间也不能短。比如:一周七天六天认认真真学习,不要某天下午一犹豫懒惰就不去实验室了,没有任何目的度过了无聊的下午。同时又没有玩的计划所以,玩的也不开心。 现在要做到的就是正常的计划不要…