史上最通俗易懂的手写人工神经网络——(一)

2023-10-30

1.神经元——思维的基本单元

我们知道一方面计算机以速度飞快而称奇,但是对于事物识别以及复杂的任务却无能为力,另一方面人类没有计算机快,但是可以做很多极其复杂的事情。一只苍蝇有10万个左右的神经元就可以完成飞行,寻找食物,躲避天敌等等很复杂的任务。一只线虫仅仅有302,个神经元,却可以完成蠕动等相当有用的任务,但是这些任务对于飞快的计算机却很难完成。

下面是一个神经元图:

树突细胞体轴突髓鞘,以及轴突末端的突触组成。

        图片来自网路

下图为秀丽隐杆线虫的神经元连接图,即线虫的神经网路,可见其结构还是相当复杂的。

 

秀丽隐杆线虫,图片来自Nature, 2019, doi:10.1038/s41586-019-1352-7。

生物学家研究发现,电信号化学信号在神经元间传递,比如你打针的时候,针会刺疼你,针扎的这种信号通过皮肤传到脑神经。针扎的疼痛因素只有激活痛感受器,将其转化为痛信号背根节神经元的中枢突传递至脊髓背角,由此处的投射神经元形成上行传导通路,经脑干、丘脑等多级中继到达皮质,才能产生痛感觉。也就是说只有针扎程度达到一定阈值才能激活痛觉。

下图为生物神经元与人工神经元的比较图,是不是有很多相似之处。

如:一个树突好比一个输入轴突好比一个输出总口,轴突的每一个末端突触类似于一个输出神经元细胞体类似于一个激活函数,因为输入细胞体的信号只有达到一定的阈值细胞体才会处理才会,除此外神经元细胞体可能还有其他处理。

 

                                                                图片来自网络

受神经元启发,人们发明了人工神经元。如下图其基本思想是:所有输入神经元的信号按一定的权重同一时刻叠加到一起,然后叠加的和信号超过一定的阈值时才会触发神经元的输出。

用公式描述一个人工神经元:

output = f(x1*w1+x2*w2+x3*w3+......+xn*wn+b)

1.output为神经元的输出;

2.x1——xn为神经元的n个输入;

3.w1——wn为神经元对应n个输入的权重;

4.b为受外界影响的偏移量;

5.f是激活函数,也就是可以控制输出的函数;

所以从本质上讲一个人工神经元就是一个n元的线性函数加一个非线性的处理。

 

                                                                图片来源网络

2.神经网络——智能产生的地方

如下图所示为人脑的神经网络彩图和人脑示意图,数以亿计的神经元以各种各样的连接组成一个巨大的神经网络,从而让人处于生物界智慧的顶端。

                                                                                                                                        图片来源网络

模拟生物或者人类的神经网络,产生了人工神经网络。如下为一个7层的人工神经网络和3层人工神经网络。

人工神经元连接到一起形成了人工神经网络,信号从神经网络的最左侧流向最右侧,即信号从输入层输入,穿过中间层,最终流向输出层

前面说过,每一个神经元相当便于一个n元的线性函数加一个非线性的处理,那么人工神经网络就是多层的多个n元的线性函数加一个非线性的处理的多次叠加与非线性处理,这样想的话人工神经网络确实是一个很复杂的东西,让人很难理解,不过我们不用想那么多,就这么个东西却有很大的用处。

 

我们以最简单的二层人工神经网络来理解,如下图所示,第一层有3个人工神经元,第二层有2个人工神经元。

信号流向从第一层流向第二层最后输出,可见第一层的输出对于第二层就是输入,所以

第二层的第一个神经元的输出可以写为:

z1 = g(a1*w1+a2*w2+a3*w3)

类似第二层的第二个神经元输出可以写为:

z2 = g(a1*w4+a2*w5+a3*w6)

其中,w1为第一层第一个神经元与第二层第一个神经元之间的连接权重,其余权重以相同的方式理解。为了便于记忆:我们把第1层第i个神经元与第二层第j个神经元的连接权重用wij 表示,把第一层第i个神经元的输出用 ai 表示,第二层第j个神经元的输出用 zj 表示,那么下面的二层神经网络输出可以表示为:

z1 = g(a1*w11+a2*w21+a3*w31)

z2 = g(a1*w12+a2*w22+a3*w32)

仔细观察这两个表达式,忽略掉g激活函数,感觉有些像线性代数里的线性方程组。

我们知道线性方程组可以用矩阵来描述,所以二层神经网络的输出是否可以用矩阵来描述呢?答案是肯定的。

使用矩阵描述二层神经网络如下:

简写为:

受二层神经网络的启发,那么更多层神经网络能否用矩阵描述呢?很明显也是可以的。因为3层是2层的拓展,更多层又是3层的拓展,所以矩阵的乘法可以表示多层神经网络

 

由于篇幅问题,后续的神经网络算法和参数内容放到第二篇来阐述,第三篇讲述神经网络的python实现代码以及训练和测试情况。

手写神经网络源代码下载地址: python手写神经网络数据和源代码.rar_手写人工神经网络-Python文档类资源-CSDN下载

第二篇地址:史上最通俗易懂的手写人工神经网络之(二)反向传播算法_卷积神经网络的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

史上最通俗易懂的手写人工神经网络——(一) 的相关文章

随机推荐

  • Java 11 升Java 17 重要特性必读(摘录)

    1 JDK 17 在 2021 年 9 月 14 号正式发布了 根据发布的规划 这次发布的 JDK 17 是一个长期维护的版本 LTS SpingFramework 6 和SpringBoot 3中默认将使用JDK 17 所以JDK 17必
  • vue封装组件之上传图片组件(el-upload)

    vue封装组件之上传图片组件 el upload 未上传状态 上传状态 其他状态 查看 删除 自定义组件文件名称 这里叫UploadImg vue
  • 子串判断

    链接 https www nowcoder com questionTerminal 917a800d4de1423394827932f4725c68 orderByHotValue 1 done 0 pos 10 onlyReferenc
  • 亲身经历提醒大家,工作千万不要太快做完,快了领导就会认为你很能干,把最急、最难的任务分给你!...

    职场上 如何合理把握工作节奏 一位网友用亲身经历提醒大家 上班的时候千万不要搞太快了 搞快了领导就会认为你很能干 分任务的时候 永远把最多 最急 最难 最复杂的业务都交给你 然后别人搞完都下班了 唯独你一个人坐那加班 真是讽刺 许多网友都有
  • JavaScript中的类型详解

    一 JavaScript中的类型 JavaScript中的类型可以分为基本数据类型和引用类型两种 基本类型值 指的是保存在栈内存中的简单数据段 引用类型值 指的是那些保存在堆内存中的对象 意思是 栈内存中保存的实际上只是一个指针 这个指针指
  • 五位杰出的中国女科学家--巾帼不让须眉,见证科技中的“她力量”

    今年一月 英国广播公司 BBC 公布 20世纪最具标志性人物 票选活动 中国首位诺贝尔生理学或医学奖得主屠呦呦与居里夫人 爱因斯坦等一同入围 BBC还专门制作了介绍短片 讲述屠呦呦发现青蒿素的传奇故事 去年也是科研女性表现亮眼的一年 中国科
  • FBX动画导入Unity

    Unity动画 1 1 第一章 Unity导入FBX模型动画但不能动 文章目录 Unity动画 前言 一 FBX模型动画 二 Unity导入后设置参数 1 设置材质 2 设置动画 总结 前言 随着AR VR等技术发展 摸一手Unity动画总
  • 拷贝构造函数和赋值运算符区别

    只有在赋值时 才调用赋值函数 当在声明变量时 B b3 b1和B b4 b3 调用的函数是一样的 均为拷贝构造函数 一 拷贝构造 是一个的对象来初始化一边内存区域 这边内存区域就是你的新对象的内存区域赋值运算 对于一个已经被初始化的对象来进
  • pyecharts运用——对数据进行可视化处理

    pyecharts运用 对数据进行可视化处理 前言 本博客记录这学期关于数据可视化的一些学习 由于我是一个菜鸟 编程能力很弱 希望路过的大佬多多海涵 一 为什么要数据可视化 数据可视化的根本目的就是教会我们如何去分析一段数据 并让非专业的人
  • Linux编程MQTT实现主题发布订阅

    物联网阿里云平台开发项目实战 附课件资料 智能硬件开发 数据上云 零基础入门 4G模块连接阿里云教程 MQTT通信协议 mosquitto 在Linux上的环境构建与测试 MQTT通信协议 mosquitto 发布订阅例子C语言实现 MQT
  • 继承与多态---------继承

    一 子类对象实例化 public class Test public static void main String args Student1 stu new Student1 stu setName 张三 stu setAge 21 s
  • Element-UI表格嵌入popover出现的问题以及解决方案

    最近几天遇到一个比较棘手的问题 需求是在触发表格某一列的cell 弹窗展示新的数据 不是表格内的数据 而是需要重新向后端请求 我这里使用了popover展示弹窗 代码是删减过的 为了更清楚地记录 有些这里没有用到的代码就删了
  • Qt5中char*和QString的互转问题

    1 char 转换成QString 1 如果char 中没有中文字符 那么转换的时候 非常的简单 char ch abcd QString strzw ch strzw ch 等等 2 如果char 中含有中文字符 那么转换的时候必须注意了
  • springboot打包成war并部署到阿里云tomcat服务器最简洁有用的教程

    一 打包成war 1 配置文件pom xml中的
  • Visual C++ 2008 runtime files are out of data

    今天用 Setup Factory打了一个包 在win7系统上双击安装该包时 弹出如下错误 费了好长时间 最后才知道原因 是我将vcredist x86 exe作为从属文件加入Setup Factory时 Setup Factory对操作系
  • BGA焊盘设计的一般规则

    BGA焊盘设计的一般规则 1 焊盘直径既能影响焊点的可靠性又能影响元件的布线 焊盘直径通常小于焊球直径 为了获得可靠的附着力 一般减少20 25 焊盘越大 两焊盘之间的布线空间越小 如1 27mm间距的BGA封装 采用0 63mm直径焊盘
  • three.js几何体的_UV_、法向属性以及BufferGeometry类介绍

    一 几何体的 UV 以及法向属性 UV属性是一组二维坐标 每个顶点都有一个对应的UV坐标 在三维模型上贴上二维的纹理贴图时 需要将所有顶点映射到纹理上的对应位置 UV属性的取值范围一般是 0 1 表示纹理上的相对位置 通过修改UV属性 可以
  • Mybatis-plus全局配置主键生成策略

    mybatis可以配置全局的主键生成策略 也可以通过bean的属性加注解的方式设置 主键上使用 TableId注解 注解的type属性有6种选值 对应6中主键生成策略 当然还可以在数据库中设置该表字段的生成策略 mybatis plus默认
  • 微电子系统封装期末总结—国科大集成电路学院

    国科大集成电路学院曹立强老师开设的微电子系统封装课程 是集成电路工程专业研究生的学科基础课 通过讲述微电子电路的封装设计 制造 以及与封装技术密切相关的设备和材料基本概念与知识 要求学生掌握包括电子封装设计原理 准则 基本制造原理和工艺流程
  • 史上最通俗易懂的手写人工神经网络——(一)

    1 神经元 思维的基本单元 我们知道一方面计算机以速度飞快而称奇 但是对于事物识别以及复杂的任务却无能为力 另一方面人类没有计算机快 但是可以做很多极其复杂的事情 一只苍蝇有10万个左右的神经元就可以完成飞行 寻找食物 躲避天敌等等很复杂的