从零开始:神经网络(1)——什么是人工神经网络

  声明:本文章是根据网上资料,加上自己整理和理解而成,仅为记录自己学习的点点滴滴。可能有错误,欢迎大家指正。


          人工神经网络(Artificial Neural Network,简称ANN)是一种模仿生物神经网络结构和功能的计算模型。它由大量的节点(或称神经元)相互连接而成,这些节点通常按照分层的方式组织。

         人工神经网络的基本思想是通过模拟生物神经元的工作方式来处理信息。每个神经元接收来自其他神经元的输入信号,并对这些信号进行加权求和,然后通过一个激活函数来产生输出信号。这些输出信号又可以作为其他神经元的输入,从而形成一个复杂的网络结构。下面让我们从生物神经网络说起。

1. 什么是生物神经网络

 1.1 生物神经元

      众所周知,人类大脑是人体最复杂的器官,由神经元、神经胶质细胞、神经干细胞和血管组成。 神经元(Neuron),也叫神经细胞(Nerve Cell),是携带和传输信息的细胞,是人脑神经系统中最基本的单元。神经元结构如下图所示:

图1  神经元结构图

神经元结构组成部分介绍:

(1) 胞体(soma):是神经元的中心部分,含有细胞的染色体,能够迅速评估同时接收到的数百上千条信息。其中有些信息可能是兴奋性的(“放电”),有些是抑制性的(“不要放电”),胞体的唤起程度取决于所有传入信息的汇总。胞体相当于一个信息处理器,对来自其他神经元的信号进行求和,并产生神经脉冲输出信号。对应生理活动:兴奋或抑制
(2) 细胞突起是由细胞体延伸出来的细长部分,又可分为树突和轴突.

  • 树突(Dendrite):树枝状的纤维从细胞体向外伸出,分叉且非常多,这些纤维被称为树突。树突主要是收集来自感觉器官的直接刺激或来自相邻神经元的活动信息,并把传入信息传递给神经元的中心部分即胞体。 每个神经元可以有一或多个树突。总的来说,树突主要起感受器的作用,并且可以接受一个或者多个输入。
  •  轴突(axon):从胞体上伸出,上有髓鞘(轴突覆盖物),传递被唤起的神经元自己的信息(兴奋大于抑制)。轴突有时很长,有的人连接脊与脚趾的轴突可以长达一米多。轴突有时会非常短,大脑里中间神经元之间的轴突可能只有不到1厘米长。每个神经元只有一个轴突。总的来说,轴突主要起传输的作用,且只有一个输出

了解生物神经网络前,我们先了解一些基础概念:

  • 动作电位(action potential):当细胞体的唤起达到临界水平时,触发轴突中的电脉冲,轴突内外电荷发生逆转,导致电信号沿轴突传递,我们称之为神经元“放电”
  • 全或无原则(all-or-none principle):动作电位没有中间状态,要么放电,要么不放电。
  • 静息电位(resting potential):在正常的静止状态时,细胞中的离子使轴突带有少量的负电荷,此时状态即为静息电位。
  • 突触小体(terminal buttons):位于轴突末端,灯泡一样的结构。
  • 神经递质(neurotransmitter):突触小体中气泡状的小囊泡中所包含的化学物质
  • 去极化:减小神经元内的负电位。
  • 超极化:增大神经元内的负电位。
  • 兴奋阈限:引发动作电位的最低膜电位值。

图2   一个神经元的动作电位图

 1.2 生物神经网络

        在生物神经网络中,神经元之间没有物理连接,中间留有20纳米左右的缝隙。 每个神经元与其它神经元,通过突触联接进行互联来传递信息,形成一个神经网络,即神经系统

1.2.1 神经元自身的信息传递

          一个典型的神经元能够通过树突和胞体一次接收上千条信息。当胞体被充分唤起时,它自己的信息便会被传递给轴突。轴突通过动作电位将信息传递到突触小体。这个含有神经递质的小泡破裂,将神经递质释放到突触间隙中。形状合适的神经递质分子来到突触后膜时,会停留在受体上并刺激接收细胞。多余的神经递质通过再摄取过程被回收到“发送”神经元中。

图3 神经元自身的信息传递过程

神经元自身的信息传递具体传递步骤为:

第一步:当胞体的唤起达到临界水平时,触发轴突中的电脉冲。

第二步:轴突靠近胞体的一小片膜中的小孔打开,正电子流便可以迅速通过,这部分轴突的内部电荷便从负变成了正。

第三步:之后就像推倒了多米诺骨牌,这些改变沿着轴突前进,使得电信号从胞体被传到轴突末梢。

1.2.2 神经元之间的信息传递

        神经元之间通过一种特殊的电信号传递信息。有些信号将身体外面的信息,比如你看到的、听到的或者闻到的,传递给大脑。有些信号则是给身体里的器官,腺体和肌肉的指令。神经元通过自己的树突从它相邻的神经元那里接收信号。接着,这些信号被传递到细胞主体,也就是胞体。然后,信号离开胞体,沿着轴突一路向下到达突触。在这个过程中,髓鞘包裹着轴突,将电信号们和外界隔离开来,加快信号传递的速度。最后,信号离开突触,并被传递给下一个神经细胞。

       神经元之间的“信息”传递,属于化学物质传递。一个神经元可被视为一种仅有两种状态的细胞:兴奋(放电)和抑制(不放电)。神经元的状态取决于从其它的神经细胞收到的输入信号量,及突触的强度(抑制或加强)。 当信号量总和超过了某个阈值时,细胞体就会被“激活(activation)”,也就会兴奋。当它“兴奋(fire)”时,就会向与它相连的神经元发送化学物质(神经递质, neurotransmiter),从而改变这些神经元的电位;如果某些神经元的电位超过了一个“阈值(threshold)”,那么,它也会“兴奋”起来,接着向其它神经元发送化学物质,犹如涟漪一般,一层接着一层传播,如图所示。

图4 神经元间的信息传递

神经元间的信息传递具体传递步骤为:

第一步:当电脉冲抵达突触小体时,突触小体中气泡状的小泡会破裂,释放出其中的化学物质,即神经递质。

第二步:这些神经递质会尝试着将神经信息传过与相邻神经元的间隙,即神经递质嵌入邻近神经元上的特定受点,胞体被唤起,将信息传递下去。

第三步:没有与之相匹配的受点的神经递质则会被再摄取,回收到囊泡中去,其余的神经递质被相应的酶所分解。

2、什么是人工神经网络

 2.1  人工神经元

           1943 年,心理学家 Warren McCulloch 和数学家 Walter Pitts 最早提出并给出了人工神经网络的概念及人工神神经元的数学模型,这种神经元模型称为MP 模型(即McCulloch-Pitts模型),是最早的神经元模型之一,至此开启了人工神经网络研究的序幕。下图是MP 模型图。看不懂,别着急,往下看,和生物神经元类比就明白了。

     图5  M-P神经元模型图

人工神经元模型是一个包含输入,输出与计算功能的模型。

  •  对于生物神经网络中的单个神经元而言, 人工神经元的前半端(下图中红色虚线框)相当于生物神经元的树突,是输入端,用来接受多个神经元输出的信号(如图中的a、b、c)并进行组合;
  • 人工神经元的后半端(下图中绿色虚线框)相当于生物神经元的轴突,是输出端,用来输出信号(如图中的y) 给接下来更多的神经元;
  • 前后端中间的分界线是激活函数,相当于生物神经元的阀值函数,用来对输入的组合信号判断是否达到阀值,如果达到阀值则该神经元激活,向输出端输出信号,否则抑制信号,不进行输出。
  • 神经元间的连接强度的强弱用权重表示(如图中的wa、wb、wc)。权重可以看作是连接上的“放大器”或“调节器”,决定着输入信号在通过连接时被增强或减弱的程度。

图6  人工神经元的基本原理

 2.2人工神经网络

     人工神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。芬兰计算机科学家Teuvo Kohonen对神经网络定义为:“神经网络,是一种由具有自适应性简单单元(即神经元)构成的广泛并行互联的网络,它的组织结构能够模拟生物神经系统对真实世界所作出的交互反应。”

     仿照生物神经网络,构建多层人工神经网络,每一层的人工神经元都与其前后层的神经元相互连接,如图7所示。在每个连接上显示了相关的连接权重,较小的权重将弱化信号,而较大的权重将放大信号。

         图7  人工神网络的基本原理

  • 输入层(输入节点):相当于生物神经元的树突,是输入端,用来接受多个神经元输出的信号并进行组合。在输入节点中,不进行任何的计算——仅向隐藏节点传递信息
  • 中间层(也叫隐藏层或隐藏节点):相当于生物神经元的阀值函数,用来对输入的组合信号判断是否达到阀值,如果达到阀值则该神经元激活,向输出端输出信号,否则抑制信号,不进行输出。隐藏层和外部世界没有直接联系(由此得名)。这些节点进行计算,并将信息从输入节点传递到输出节点。
  • 输出层(输出节点):相当于生物神经元的轴突,是输出端,用来输出信号给接下来更多的神经元。主要负责计算,并从网络向外部世界传递信息。

        图中输入层有3个输入单元,隐藏层有3个单元,输出层有3个单元。

       因此,神经网络的基本原理是将神经网络的输出值y与训练样本中标定的真实输出值进行比较,计算出输出误差,之后再使用这个误差值来指导前后两层中每两个神经元之间连接权重的调整,进而逐步改善神经网络的输出值,直至与训练样本的真实输出值之间的误差达到很小,在设定的可容忍范围内为止。可以看出,前后两层中每两个神经元之间的连接权重就是神经网络需要进行学习的内容,对这些连接权重持续进行优化,才能使神经网络的输出越来越好,达到我们满意的结果。

 注意:

  1. 设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定;
  2. 神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;
  3. 结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。

3. 人工神经网络的发展

3.1 神经网络的发展历程

    下面了解一下人工神经网络发展的历程。从单层神经网络(感知器)开始,到包含一个隐藏层的两层神经网络,再到多层的深度神经网络,一共有三次兴起过程。详见下图。

3.2 神经网络的分类

下面重点介绍下单层神经网络、两层神经网络和多层神经网络。

(1)神经元模型

由上面的介绍已知神经元模型。我们可将神经元模型用下图表示:包含有3个输入,1个输出。

图8   神经元模型

(2)单层神经网络(感知器)

          继MP模型提出后,于1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字--“感知器”(Perceptron)(有的文献翻译成“感知机”,下文统一用“感知器”来指代)。感知器是当时首个可以学习的人工神经网络。

         下面来说明感知器模型。在原来MP模型的“输入”位置添加神经元节点,标志其为“输入单元”。其余不变,于是我们就有了下图:从本图开始,我们将权值w1, w2, w3写到“连接线”的中间。

图9    单层神经网络 

       在“感知器”中,有两个层次。分别是输入层和输出层。输入层里的“输入单元”只负责传输数据,不做计算。输出层里的“输出单元”则需要对前面一层的输入进行计算。我们把需要计算的层次称之为“计算层”,并把拥有一个计算层的网络称之为“单层神经网络”。有一些文献会按照网络拥有的层数来命名,例如把“感知器”称为两层神经网络。

具体的感知机内容详见:从零开始:神经网络(2)——MP模型-CSDN博客

(3)两层神经网络(多层感知器)

        单层神经网络无法解决异或问题。但是当增加一个计算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分类效果。

         两层神经网络除了包含一个输入层,一个输出层以外,还增加了一个中间层(如下图中的a1、a2)。此时,中间层和输出层都是计算层。我们扩展上节的单层神经网络,在右边新加一个层次(只含有一个节点)。

图10    两层神经网络 

(4)多层神经网络(深度学习)

      两层神经网络虽然轻松解决了异或问题,但仍存在很多问题,如训练时长久,容易陷入局部最优。此外,隐藏层的节点数需要进行调整,而这个过程比较繁琐,不太方便使用。

      在2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了“深度信念网络”的概念。与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。他给多层神经网络相关的学习方法赋予了一个新名词--“深度学习”。

  我们延续两层神经网络的方式来设计一个多层神经网络。在两层神经网络的输出层后面,继续添加层次。原来的输出层变成中间层,新加的层次成为新的输出层。依照这样的方式不断添加,我们可以得到更多层的多层神经网络。所以可以得到下图。

图11   多层神经网络

          多层神经网络中,输出也是按照一层一层的方式来计算。从最外面的层开始,算出所有单元的值以后,再继续计算更深一层。只有当前层所有单元的值都计算完毕以后,才会算下一层。有点像计算向前不断推进的感觉。所以这个过程叫做“正向传播”。   

3.3 神经网络发展的效果

         随着神经网络的发展,其表示性能越来越强。从单层神经网络,到两层神经网络,再到多层神经网络,下图说明了,随着网络层数的增加,以及激活函数的调整,神经网络所能拟合的决策分界平面的能力。

  可以看出,随着层数增加,其非线性分界拟合能力不断增强。图中的分界线并不代表真实训练出的效果,更多的是示意效果。神经网络的研究与应用之所以能够不断地火热发展下去,与其强大的函数拟合能力是分不开关系的

3.4 神经网络发展的外因

        当然,光有强大的内在能力,并不一定能成功。一个成功的技术与方法,不仅需要内因的作用,还需要时势与环境的配合。神经网络的发展背后的外在原因可以被总结为:更强的计算性能,更多的数据,以及更好的训练方法。只有满足这些条件时,神经网络的函数拟合能力才能得已体现,见下图。

图12   发展的外在原因

  在单层神经网络年代,由于当时的计算性能不足,导致Rosenblat无法制作一个双层分类器。而10年以后,计算机CPU的快速发展已经使得我们可以做两层神经网络的训练,并且还有快速的学习算法BP。但是在两层神经网络快速流行的年代。更高层的神经网络由于计算性能的问题,以及一些计算方法的问题,其优势无法得到体现。直到2012年,研究人员发现,用于高性能计算的图形加速卡(GPU)可以极佳地匹配神经网络训练所需要的要求:高并行性,高存储,没有太多的控制需求,配合预训练等算法,神经网络才得以大放光彩。

  互联网时代,大量的数据被收集整理,更好的训练方法不断被发现。所有这一切都满足了多层神经网络发挥能力的条件,所谓是“时势造英雄”。

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

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

相关文章

《500 Lines or Less》(5)异步爬虫

https://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html ——A. Jesse Jiryu Davis and Guido van Rossum 介绍 网络程序消耗的不是计算资源,而是打开许多缓慢的连接,解决此问题的现代方法是异步IO。 本章介绍一个简单的网络爬虫&a…

STM32F0-标准库时钟配置指南

启动 从startup_stm32f0xx.s内的开头的Description可以看到 ;* Description : STM32F051 devices vector table for EWARM toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set t…

【Leetcode】十八、动态规划:不同路径 + 最大正方形

文章目录 1、动态规划2、leetcode509:斐波那契数列3、leetcode62:不同路径4、leetcode121:买卖股票的最佳时机5、leetcode70:爬楼梯6、leetcode279:完全平方数7、leetcode221:最大正方形 1、动态规划 只能…

C#开源、简单易用的Dapper扩展类库 - Dommel

项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dommel 能够根据你的 POCO 实体自动生成相应的 SQL 查询语句。这大大减少了手动编写 SQL 代码的工作量,并提高了代码的可读性和可维护性。 Dommel 支持 LINQ 表达式&#xff…

记一次因敏感信息泄露而导致的越权+存储型XSS

1、寻找测试目标 可能各位师傅会有苦于不知道如何寻找测试目标的烦恼,这里我惯用的就是寻找可进站的思路。这个思路分为两种,一是弱口令进站测试,二是可注册进站测试。依照这个思路,我依旧是用鹰图进行了一波资产的搜集&#xff…

SSIS_SQLITE

1.安装 SQLite ODBC 驱动程序 2.添加SQLite数据源 在“用户DSN”或“系统DSN”选项卡中,点击“添加”。选择“SQLite3 ODBC Driver”,然后点击“完成”。在弹出的配置窗口中,设置数据源名称(DSN),并指定S…

英迈中国与 Splashtop 正式达成战略合作协议

2024年7月23日,英迈中国与 Splashtop 正式达成战略合作协议,英迈中国正式成为其在中国区的战略合作伙伴。此次合作将结合 Splashtop 先进的远程桌面控制技术和英迈在技术服务与供应链管理领域的专业优势,为中国地区的用户带来更加安全的远程访…

联想教育电脑硬盘保护同传EDU系统使用简明教程

目录 一、原理概述 二、简明使用方法 1、软件下载 2、开机引导 3、开始安装 4、使用 (1)进入底层 (2)进行分区设置 (3)系统设置 (4)安装硬盘保护驱动 (5&…

前端模块化CommonJS、AMD、CMD、ES6

在前端开发中,模块化是一种重要的代码组织方式,它有助于将复杂的代码拆分成可管理的小块,提高代码的可维护性和可重用性。CommonJS、AMD(异步模块定义)和CMD(通用模块定义)是三种不同的模块规范…

leetcode-101. 对称二叉树

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 思路 1) 如果同时root1…

【调试笔记-20240723-Linux-gitee 仓库同步 github 仓库,并保持所有访问链接调整为指向 gitee 仓库的 URL】

调试笔记-系列文章目录 调试笔记-20240723-Linux-gitee 仓库同步 github 仓库,并保持所有访问链接调整为指向 gitee 仓库的 URL 文章目录 调试笔记-系列文章目录调试笔记-20240723-Linux-gitee 仓库同步 github 仓库,并保持所有访问链接调整为指向 gite…

Ubuntu20.04版本升级openssh9.8p1方法

一、问题描述: 8.5p1 和 9.7p1 之间的openssh版本漏洞可能会导致linux系统以root身份进行RCE,所以需安装最新版本 二、解决方法: 将当前openssh版本升级到最新的版本即openssh-9.8p1版本,OpenSSL大版本升级且OpenSSH有新稳定版本…

Zabbix监控应用

一.监控tomcat 1.在tomcat服务器上安装zabbix-agent服务 [rootnode2 etc]#vim zabbix_agentd.conf 94 Server192.168.240.13 #指向当前zabbix server ##### Passive checks related #被动检查相关配置### Option: ListenPort ListenPort10050 #监听端口 默认的无需修改11…

SPF配置教程:如何安全构建邮件发送策略?

SPF配置教程的步骤详解!SPF记录配置方法策略有哪些? SPF通过允许域名所有者指定哪些主机可以代表该域发送邮件,从而减少电子邮件欺诈和垃圾邮件的风险。AokSend将详细介绍SPF配置教程,并指导您如何安全地构建邮件发送策略。 SPF…

《白话机器学习的数学》第4章——评估

4.1模型评估 1.由于像多重回归这样的问题会导致无法在图上展示,所以需要能够够定量地表示机器学习模型的精度。 4.2交叉验证 4.2.1回归问题的验证 1.把获取的全部训练数据分成两份:一份用于测试,一份用于训练。然后用前者来评估模型。 一般…

C# 数组常用遍历方式

// 假设数组Point[] points new Point[2];// 第一种遍历 forfor (int i 0; i < points.Length; i){Point p points[i];Console.WriteLine($"X{p.X},y{p.Y}");}// 第二种遍历 foreachforeach (Point p in points){Console.WriteLine($"X{p.X},y{p.Y}"…

TCP三次握手和四次挥手的理解

三次握手 第一次握手&#xff1a; 客户端发出 请求报文其中SYN应1&#xff0c;选择一个序列号x 第二次握手&#xff1a; 服务端接收到之后回复 确认报文&#xff0c;其中SYN应1&#xff0c;ACK1&#xff0c;确认号是x1&#xff0c;同时为自己初始化序列号y 第三次握手&…

Hadoop架构

一、案列分析 1.1案例概述 现在已经进入了大数据(Big Data)时代&#xff0c;数以万计用户的互联网服务时时刻刻都在产生大量的交互&#xff0c;要处理的数据量实在是太大了&#xff0c;以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代…

Linux(CentOS)的“应用商城” —— yum

Linux&#xff08;CentOS&#xff09;的“应用商城” —— yum 关于 yum 和软件包Linux 系统&#xff08;CentOS&#xff09;的生态yum 相关操作yum 本地配置yum 安装 lrzsz.x86_64 关于 yum 和软件包 首先 yum 是软件下载安装管理的客户端&#xff0c;类似各种手机里的“应用…

WEB前端10- Fetch API(同步/异步/跨域处理)

Fetch API Fetch API 可以用来获取远程数据&#xff0c;用于在 Web 应用程序中发起和处理 HTTP 请求。它基于 Promise&#xff0c;提供了一种简单而强大的方式来处理网络通信&#xff0c;替代了传统的 XMLHttpRequest。 Promise对象 Promise 对象是 JavaScript 中处理异步操…