在上一篇文章神经网络的数学原理(一):简单的预测机与分类器模型中,我们通过两个简单的例子对训练与迭代、学习率与适度改进有了一个大致的了解。之后的内容就正式进入这个系列的中心——神经网络的数学原理部分了。


1. 神经元——大自然创造的计算机

人类大脑大约具有1000亿个神经元,一只果蝇大约具有10万个神经元,而一只线虫仅仅具有302个神经元。

302个神经元,这与今天的计算机所具有的资源相比简直微乎其微。但是,一只线虫可以完成一些相当有用的任务,传统的计算机程序面对这些任务却无能为力。

计算机拥有大量的电子计算元件、巨大的存储空间,运行频率比生物大脑快的多,但为什么生物大脑的能力要远大于电子计算机?我们可以从二者架构的不同之处入手:传统的计算机按照严格的串行顺序准确处理数据,但生物大脑对信号的处理方式却似乎是并行的,节奏慢得多,并且具有模糊的特征。

虽然大脑的一些功能至今仍然不甚明确,但我们可以从一些简单的部分入手更深入的了解大脑,比如说,我们来看看神经元是如何工作的。

就像我们曾经介绍过的机器

输入
计算过程
输出

,神经元做的工作也类似这样。我们介绍过的预测器背后的数学模型是简单的线性函数,也就是说输出与输入可以表示成输出 = 输入 × 常数 + 偏置常数,神经元对输入信号的处理不是这种简单的关系。

由于神经元不希望传递微小的噪声信号,所以只有当输入超过某个阈值后,神经元才会产生输出——也就是传递有意识的明显信号。想要用输血式表达神经元的输入与输出关系,我们可以考虑使用一类被称为激活函数的数学函数,比如说阶跃函数和S函数(sigmoid function)。

阶跃函数

由于阶跃函数比较简单,我们可以自己创建:

import numpy as np
import matplotlib.pyplot as pltdef function(x):if x < 1:return 0else:return 1xs = np.linspace(-5,5)
ys = [function(x) for x in xs]plt.figure()
plt.grid('on')
plt.plot(xs,ys,c='red')
plt.show()

如图所示:

S函数

S函数比阶跃函数复杂一点,我们来看其表达式:

SciPy库为我们提供了这个函数:

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import expitxs = np.linspace(-10,10)
ys = [expit(x) for x in xs]plt.figure()
plt.grid('on')
plt.plot(xs,ys,c='red')
plt.show()

我们的S函数就是scipy.special.expit()函数。它的图像是

这两个函数都有这样的特点:输入较小时,函数输出为0;一旦输入达到某个阈值,输出就“一跃而起”——神经元就激发了。相比阶跃函数,S函数更加平滑、更加“符合自然”。

对于单个神经元,它可能会有多个输入——对应着该神经元的多个树突。对于这些输入,神经元将它们简单的相加,然后通过激活函数计算输出,决定是不是向下一个神经元传递信号。这就是单个神经元的工作机制,我们可以把它表达的更形象一点:

输入a
求和 -> 激活函数
输入b
输入c
输出

2. 神经网络

我们对单个的神经元建立了模型,那么下一步我们就要讨论它们的组合形式了。先让我们看看:

这是单个神经元的图片,其中较短的树突用来接受输入,长的轴突用来传递输出。轴突会与多个神经元的树突相接,各个树突也会连接多个其它神经元的轴突。这样,每个神经元会接受来自多个神经元的输入,如果此神经元被激发,也会提供信号给更多的神经元。大批的神经元组合起来,进行相对复杂、同时具有模糊意味的计算。我们可以用下面这幅图对一个神经网络进行建模:

这幅图片中有五层神经元集合,除了后边(左边)的输入层和前边(右边)的输出层之外,其它的层中每个神经元都和与其相邻的层内的所有神经元相连。单个神经元的一个输出信号被按比例调整为多个输出,流向更多的神经元。在实际中,这个生物过程的描述在之前的文章中介绍过:

可以看出,上面的图示中神经元之间的连接其实是有可调节的权重值的。我们创建这个这个模型的目的,是像创建预测器或者分类器一样,希望可以对它进行训练——就像调整预测器中的斜率k一样,我们的这些权重也是可以通过误差来调整的。调整权重,也就是调整节点之间的连接强度。我们采用了把所有的节点都连在一起的方式,通过某种训练,我们希望调整这些节点的连接强度。

我们假设,这个神经网络的作用是识别图片。我们的神经网络是对大脑的模拟,所以我们有理由相信这个神经网络可以完成识别图片的任务——我们只需要对其进行训练(这是前面构建预测器时带给我们的思路):我们输入的是图片——一个二维矩阵(我们可以把它变成一维,这无关紧要)。既然是训练数据,我们已经知道图片是什么了,所以我们将这个结果转换成一种数字形式,然后将这种形式与实际的神经网络输出进行对比,得到误差,然后对权重进行调整。经过大量的调整之后,我们相信,当我们输入某张图片时,神经网络内部的模糊计算会使我们得到对应的正确输出。


之后,我们会对这些内容进行详细的解答,包括通过矩阵运算实现信号在神经网络中的传递、通过反向传播得到每个权重的误差、通过梯度下降来更新权重等等。最后,我们会用一个完整的神经网络模型来进行一个手写数字识别的任务。并且,之后的内容我们会增加代码部分。

神经网络的数学原理(二):神经元与神经网络相关推荐

  1. 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】

    卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10) 本章主要进行卷积神经网络的相关数学原理和pytorch的对应模块进行推导分析 代码也是通过demo实 ...

  2. 刷脸背后,卷积神经网络的数学原理原来是这样的

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|深度学习这件小事 计算机视觉技术在日常生活中有着非常普遍 ...

  3. 人工神经网络原理及应用,神经网络的数学原理

    神经网络算法原理 4.2.1概述人工神经网络的研究与计算机的研究几乎是同步发展的. 1943年心理学家McCulloch和数学家Pitts合作提出了形式神经元的数学模型,20世纪50年代末,Rosen ...

  4. unity调整旋转需要传什么参数?参数在数学上叫做什么?_人脸识别背后,卷积神经网络的数学原理原来是这样的...

    在自动驾驶.医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情.卷积神经网络可能是这一巨大成功背后的关键组成模块.这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工 ...

  5. 卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的

    在自动驾驶.医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情.卷积神经网络可能是这一巨大成功背后的关键组成模块.这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工 ...

  6. BP神经网络的数学原理及其算法实现

    说明: 1.本文以截图形式转载自http://blog.csdn.net/zhongkejingwang/article/details/44514073 2.转载供个人学习研究,对部分内容做出个人笔 ...

  7. 【科普】刷脸背后,卷积神经网络的数学原理

    (给机器学习算法与Python学习加星标,提升AI技能) 选自:towardsdatascience 作者:Piotr Skalski 编译:机器之心(almosthuman2014) 原文:http ...

  8. 人工神经网络的算法原理,最简单的神经网络算法

    神经网络算法原理 一共有四种算法及原理,如下所示:1.自适应谐振理论(ART)网络自适应谐振理论(ART)网络具有不同的方案.一个ART-1网络含有两层一个输入层和一个输出层. 这两层完全互连,该连接 ...

  9. 图卷积神经网络的数学原理——谱图理论和傅里叶变换初探

    Math of GCN 一.warmup 1.Graph vs Image ①Graph是相比于Image更加广义的一种拓扑结构. ②Image是Grape在欧式空间的一种特例. 2.符号含义 ①A: ...

  10. 机器学习中的数学原理——二分类问题

    今天是2022年的最后一天,提前祝大家新年快乐!这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新一下<白 ...

最新文章

  1. 企业网络推广专员浅析如何完善网站维护企业网络推广吸引用户浏览
  2. keepalived 主从配置日志报错:one or more vip associated with vrid mismatch actual master advert...
  3. python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限
  4. php background-color:,background-color属性怎么用
  5. socket阻塞和非阻塞的区别
  6. git 怎么跟踪空目录
  7. 配合jenkins 启动jar包需要的脚本
  8. SAP 电商云 Spartacus UI 支持延迟加载的新功能的入口设计
  9. c++的文件输入/输出
  10. [蓝桥杯2018决赛]阅兵方阵-模拟,枚举
  11. P5322-[BJOI2019]排兵布阵【背包】
  12. WinSock I/O 模型 -- Select 模型
  13. C语言?看女程序员是怎么往死里坑师兄的
  14. SPSS 随机区组秩和检验
  15. 1970年图灵奖--詹姆斯·威尔金森生平
  16. 筚路蓝缕的十九年,天翎经历了什么?
  17. java scavenge_Java虚拟机(JVM)垃圾回收器Parallel Scavenge收集器 - Break易站
  18. 卡图星小机器人怎么过_《瑞奇与叮当》图文攻略 全剧情流程图文攻略
  19. 2022红帽RHCSA考题解析
  20. 游戏的角色模型是如何创建的?ZBrush中制作3D兽人,全流程解析

热门文章

  1. MySQL实验7存储过程_mySQL 教程 第7章 存储过程和函数
  2. C#开发工控上位机编程 csdn_中吉午餐自动售货机加热自动午餐盒智能便利店【盒饭售货机】_智能云仓储库存wms管理分配货_电子标签价签拣货系统_工控erp上位机软件开发设计...
  3. 【回眸】安装Hightec后如何导入源码及相关环境配置
  4. [论文阅读笔记47]ZEN-BERT-based Chinese (Z) text encoder Enhanced by N-gram representations
  5. 海康威视摄像头 rtsp 地址格式
  6. ios版塔防类游戏源码
  7. 拆分PDF文件的一个办法
  8. 服务器主机如何多开虚拟机,服务器主机多开虚拟机
  9. Mac os查看共享文件
  10. ansys添加力矩_ansys中施加力矩