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

news2024/9/23 2:29:19

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


          人工神经网络(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.coloradmin.cn/o/1944481.html

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

相关文章

【vue教程】三. 组件复用和通信(7 种方式)

目录 本章涵盖知识点回顾 组件开发与复用组件的创建和注册全局定义局部定义单文件组件(.vue 文件)组件的注册方式在实例中注册在 Vue 中注册 组件的 props定义 props传递 props 组件事件自定义事件的创建和触发父组件监听子组件事件父组件处理事件 Vue 实…

网格布局 HTML CSS grid layout demo

文章目录 页面效果代码 (HTML CSS)参考 页面效果 代码 (HTML CSS) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

Golang | Leetcode Golang题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; func hIndex(citations []int) int {n : len(citations)return n - sort.Search(n, func(x int) bool { return citations[x] > n-x }) }

你了解GD32 MCU上下电要求吗

你了解GD32 MCU的上下电要求吗&#xff1f;MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例&#xff0c;上电/掉电复位波形如如下图所示。 上电过程中&#xff0c;VDD/VDDA电压上电爬坡&#xff0c;当电压高于VPOR&#xff08;上电复位电压&#xff09;MCU开始启动&a…

设计测试用例的具体方法

一.等价类 等价类分为: 1.有效等价类 [6~15] 2.无效等价类 :小于6位,大于15位(不在数据范围内) 组合规则: 有效等价类组合的时候,尽可能一条测试用例尽可能多的覆盖有效等价类 无效等价类组合的时候,一条测试点,之恶能覆盖一个无效等价类 二.边界值 1.上点,离点,内点 上…

科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

git clone超时的解决方法

问题描述&#xff1a;在克隆一个仓库的时候&#xff0c;报错如下 git clone https://github.com/TeamWiseFlow/wiseflow.git Cloning into wiseflow... fatal: unable to access https://github.com/TeamWiseFlow/wiseflow.git/: Failed to connect to github.com port 443 aft…

【PyTorch】图像二分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 图像分类是计算机视觉中的一项重要任务。在此任务中&#xff0c;我们假设每张图像只包含一个主对象。在这里&#xff0c;我们的目标是对主要对象进行分类。…

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

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

论文阅读——Integrated Diffusive Antenna Array of Low Backscattering

文章目录 摘要一、背景介绍二、天线结构A. 缝隙天线B. 低频扩散单元C. 高频扩散单元D. 集成设计 三、验证总结 论文来源&#xff1a;https://ieeexplore.ieee.org/document/10309141 摘要 文章提出了一种低雷达散射截面&#xff08;RCS&#xff09;的扩散天线阵列。 作为示例…

axios请求大全

本文讲解axios封装方式以及针对各种后台接口的请求方式 axios的介绍和基础配置可以看这个文档: 起步 | Axios中文文档 | Axios中文网 axios的封装 axios封装的重点有三个&#xff0c;一是设置全局config,比如请求的基础路径&#xff0c;超时时间等&#xff0c;第二点是在每次…

【数据结构】二叉树——顺序结构——堆及其实现

一、树 1.1、树的概念和结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成的一个具有层次关系的集合。 树有一个特殊的节点&#xff0c;称为根节点&#xff0c;根节点没有前驱结点。 除根节点外&#xff0c;其余部分被分为M&…

Mysql - 索引

目录 一、存储引擎 二、索引 索引结构 索引分类 索引语法 联合索引 前缀索引 索引使用规则 最左前缀法则 范围查询使索引失效 字段做运算操作索引失效 字符串字段不加单引号索引失效 字段做前模糊查询索引失效 or连接条件索引失效 数据发布情况索引失效 指定使用…

Matlab编程资源库(1)选择结构

一、if语句 在 MATLAB 中&#xff0c; if 语句有 3 种格式。 (1) 单分支 if 语句&#xff1a; if 条件 语句组 end 当条件成立时&#xff0c;则执行语句组&#xff0c;执行完之后&#xff0c; 继续执行 if 语句的后继语句&#xff0c;若条件不成 立&#xff0c;则直接执…

什么是PCB流锡槽焊盘/C型焊盘,如何设计?-捷配笔记

在PCB进行机器组装器件时&#xff08;如波峰焊&#xff09;&#xff0c;为了防止部分需要二次焊接的元器件的焊盘堵孔&#xff0c;就需要在PCB焊盘上面开个过锡槽&#xff0c;以便过波峰焊时&#xff0c;这些焊锡会流掉。开流锡槽就是在焊盘裸铜&#xff08;敷锡&#xff09;部…

setsockopt选项对tcp速度

GPT-4 (OpenAI) 每个setsockopt调用都涉及到一个套接字描述符&#xff0c;一个指定网络层的常数&#xff08;如IPPROTO_IP, IPPROTO_TCP, IPPROTO_IPV6, SOL_SOCKET等&#xff09;&#xff0c;一个指定需配置的选项的常数&#xff0c;一个指向配置值的指针&#xff0c;以及那个…

04-数据库MySQL

一、项目要求 二、项目过程介绍 1、新建数据库 2、新建表 3、处理表 1.修改student 表中年龄(sage)字段属性&#xff0c;数据类型由int 改变为smallint 2.为Course表中Cno 课程号字段设置索引,并查看索引 3.为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引&#xf…

20分钟上手新版Skywalking 9.x APM监控系统

Skywalking https://skywalking.apache.org/ Skywalking是专为微服务、云原生和基于容器的&#xff08;Kubernetes&#xff09;架构设计的分布式系统性能监控工具。 Skywalking关键特性 ● 分布式跟踪 ○ 端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和API仪表板。…

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

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

Android TabLayout的简单用法

TabLayout 注意这里添加tab&#xff0c;使用binding.tabLayout.newTab()进行创建 private fun initTabs() {val tab binding.tabLayout.newTab()tab.text "模板库"binding.tabLayout.addTab(tab)binding.tabLayout.addOnTabSelectedListener(object : TabLayout.On…