神经网络基本原理

文章目录

  • 神经网络基本原理
  • 前言
  • 一、神经网络是什么?
    • 1.1 神经网络的分类
    • 1.2 神经网络结构图
    • 1.3 神经元
    • 1.4 为什么神经网络能预测?
  • 二、 一个最简单的神经网络模型
    • 1.去不去爬山?
    • 2.案例代码
      • 2.1 引入类库
      • 2.2 创建数据
      • 2.3 初始假设
      • 2.4 神经元计算
      • 2.5 运行结果
      • 2.6 小结
    • 3.神经网络的自我学习
  • 总结

前言

神经网络是一门重要的机器学习技术,它是目前最为火热的研究方向----深度学习的基础。本文以一个生活中的小场景切入,不去调用别人训练好的神经网络模型,手撸每一行代码,详细的介绍了人工神经网络的本质基本原理。


一、神经网络是什么?

神经网络是机器学习中的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

1.1 神经网络的分类

  • 前馈神经网络:在网络中,当前层的输入只依赖于前一层的节点输出,与更早的网络输出状态无关;
  • 反馈神经网络:将输出经过一步时移再接入到输入层,输入不仅仅取决于上一层节点的输出

图1-1 神经网络的分类

1.2 神经网络结构图

一个经典的神经网络,一般包含三个层次的神经网络。红色的是输入层,绿色的是输出层,紫色的是中间层(也叫隐藏层)。输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。

图1-2 神经网络结构图

几点说明:

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

1.3 神经元

下图为生物神经网络中一个神经元。

图1-3 生物神经元基本结构图

我们的人工神经网络也可以类比生物神经网络,神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。

下图是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能。中间的箭头线称为“连接”,每个箭头线上都有一个“权值”。一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好。

图1-4 神经元计算

我们使用a来表示输入,用w来表示权值。一个表示连接的有向箭头可以这样理解:在初端,传递的信号大小仍然是a,端中间有加权参数w,经过这个加权后的信号会变成aw,因此在连接的末端,信号的大小就变成了aw,最终神经元计算得到的输出信号z=g(a1w1+a2w2+a3*w3)。

1.4 为什么神经网络能预测?

从宏观上来理解:根据历史数据(即训练集),利用神经网络,建立从输入到输出之间的映射关系,并且假定该映射关系在未知的预测集上也同样成立,从而在给定预测集输入的基础上给出输出,实现预测。

具体到上图的神经元模型就是利用三个已知属性的值a1,a2,a3,通过神经元计算公式,计算出未知属性的值z。这里,已知的属性称之为特征,未知的属性称之为目标。假设特征与目标之间确实是线性关系,并且我们已经得到表示这个关系的权值w1,w2,w3(训练集训练得到的)。那么,在遇到未知数据集时,我们就可以输入未知数据集的特征(已知属性a1,a2,a3),通过神经元模型预测新样本的目标(未知属性z)。

二、 一个最简单的神经网络模型

人脑中的神经网络是一个非常复杂的组织,成人的大脑中估计有1000亿个神经元之多。今天我们只用一个神经元对案例中的问题进行信息处理。

1.去不去爬山?

为了能说清楚神经网络的本质和实际意义,我们首先引入生活中的一个场景——去不去爬山?
小A、小B、小C、小D是登山爱好者,经常相约一起去爬山。我们用数字“1”表示去爬山了,数字“0”表示没去爬山,前五次的结果如下表:

小A 小B 小C 小D
0 1 0 1
1 1 0 1
1 0 1 0
0 0 1 0
0 1 1 1

今天四个人又相约去爬山,结果如下:

小A 小B 小C 小D
0 1 0

现在我们根据上面的几组数据找一下规律,预测下小D今天去不去爬山呢?

我们可能已经发现了,小D是不是喜欢小B呢?因为每次小B去,小D也会去。今天小B决定去爬山,所以我们预测小D也会去爬山。刚刚我们动用了1000亿个神经元的人脑神经网络对上述问题进行信息收集、处理和计算,最终得到小D会去爬山的结果,待会我们用只有一个神经元的人工神经网络对上述问题进行预测。

2.案例代码

针对上述问题,我们构建一个最简单的神经网络对小D今天是否去爬山做个预测。

2.1 引入类库

from numpy import array,exp,random,dot

2.2 创建数据

然后创建一个矩阵X,将小A、小B、小C三个人前五次的数据放到矩阵中去;创建一个装置矩阵y,将小D前五次的数据放到矩阵中去。注意矩阵X是3x5的,所以这里需要将1x5的矩阵y转置一下成5x1的矩阵,才能进行矩阵运算。

X = array([[0,1,0],[1,1,0],[1,0,1],[0,0,1],[0,1,1]])
y = array([[1,1,0,0,1]]).T

2.3 初始假设

下面利用随机数做一个假设,假设小D去不去爬山与小A、小B、小C三人去不去爬山的相关关系的数值(权重)为weights。

random.seed(1)
weights = 2 * random.random((3,1))-1

2.4 神经元计算

接下来进入循环,使用假设的weights算出output(output数值越接近“0”,代表小D去不去爬山的可能性越大,output数值越接近“1”,代表小D去爬山的可能性越大),前五次小D的数据y - 利用假设关系得到的output数值=得到误差 error,通过循环不断调整假设关系weights,减小误差,最终得到误差最小的一组关系系数weights。

for it in range(100000):output = 1/(1+exp(-dot(X,weights)))error = y - outputdelta = error * output *(1-output)weights += dot(X.T,delta)

2.5 运行结果

为了便于理解中间数据的计算过程,这里我们可以打印下“error”和“weights”的计算结果
最后根据上面得到的关系系数weights,预测今天(第六次)小D去爬山的概率

print("误差为:\n",error)
print("相关系数为:\n",weights)
climbing_probability = 1/(1+exp(-dot([[0,1,0]],weights)))
print("小D会去爬山的概率为:\n",climbing_probability)

运行结果如下:

图2-1 运行结果图

可以看出小D去不去爬山与小A去不去爬山的相关系数为-1.5662,与小B去不去爬山的相关系数为11.31693,与小C去不去爬山的相关系数为-5.56755,小D今天(第六次)去爬山的概率为0.999。

2.6 小结

上述过程可以概述为以下几个步骤:

图2-2 代码流程

3.神经网络的自我学习

对于上述问题,我们经过简单的分析我们也可以写下面一段程序,同样也可以准确预测小D今天(第六次)去不去爬山。

if(小B去)小D去
else小D不去

这样一看,好像这种方法更简单呢。但是这种代码是死的,不会根据数据的变化自我学习。如果数据集变成下面这样的:

小A 小B 小C 小D
0 1 0 0
1 1 0 1
0 0 0 1
0 0 1 0
1 0 1 1
0 1 0

通过我们人脑神经网络分析,小D好像移情别恋喜欢上小A了,因为小D去不去爬山跟小A去不去爬山的关系非常大,跟小B去不去爬山几乎没什么关系,而今天(第六次)小A不去爬山,从而我们预测今天(第六天)小D也不去爬山。所以上述简单的if,else判断程序很显然就不适用于新场景了,那么神经网络是如何自我学习的呢?

我们把数据集替换下,新数据集下神经网络预测的结果是否和我们人脑预测的一致呢?

from numpy import array,exp,random,dot
X = array([[0,1,0],[1,1,0],[0,0,0],[0,0,1],[1,0,1]])
y = array([[0,1,1,0,1]]).T
random.seed(1)
weights = 2 * random.random((3,1))-1
for it in range(100000):output = 1/(1+exp(-dot(X,weights)))error = y - outputdelta = error * output *(1-output)weights += dot(X.T,delta)
climbing_probability = 1/(1+exp(-dot([[0,1,0]],weights)))
print("误差为:\n",error)
print("相关系数为:\n",weights)
print("小D会去爬山的概率为:\n",climbing_probability)

预测结果如下:

图2-3 新数据集预测结果图

可以看出,即使替换了数据集,神经网络因为具有自我学习的能力,所以仍然具有很好的预测效果。

总结

各位的鼓励就是我创作的最大动力,如果哪里写的不对的,欢迎评论区留言进行指正,如有收获请给博主一个免费的赞鼓励下呗

神经网络原理一个简单的神经网络模型搭建相关推荐

  1. PyTorch | (4)神经网络模型搭建和参数优化

    PyTorch | (1)初识PyTorch PyTorch | (2)PyTorch 入门-张量 PyTorch | (3)Tensor及其基本操作 PyTorch | (4)神经网络模型搭建和参数 ...

  2. keras卷积处理rgb输入_CNN卷积神经网络模型搭建

    前言 前段时间尝试使用深度学习来识别评测过程中的图片,以减少人力成本.目前是在深度学习框架Keras(后端使用TensorFlow)下搭建了一个CNN卷积神经网络模型,下面就如何搭建一个最简单的数字图 ...

  3. 如何训练一个简单的语音识别网络模型---基于TensorFlow

    这篇文章是翻译自Google的教程:还有一部分没完成,但今天上去发现登录不了,只好先发这部分上来. 欢迎有兴趣学习的朋友,与我交流.微信:18221205301 如何训练一个简单的语音识别网络模型 准 ...

  4. 神经网络原理的简单介绍,神经网络的神经元结构

    神经网络的基本原理是什么? 神经网络的基本原理是:每个神经元把最初的输入值乘以一定的权重,并加上其他输入到这个神经元里的值(并结合其他信息值),最后算出一个总和,再经过神经元的偏差调整,最后用激励函数 ...

  5. 神经网络批量训练原理,训练好的神经网络模型

    1.图计算软件Gelly和Graphscope有什么区别? Gelly是Flink的图API库,而GraphScope是阿里研发的图计算平台,是一个完整的平台,包括图数据管理,执行引擎还支持多种图算法 ...

  6. 神经网络原理的简单介绍,神经网络几何原理图

    人工神经网络的定义,详细说明 人工神经网络(ArtificialNeuralNetworks,ANN),一种模范动物神经网络行为特征,进行分布式并行信息处理的算法数学模型. 这种网络依靠系统的复杂程度 ...

  7. 人工神经网络的典型模型,人工神经网络模型定义

    神经网络BP模型 一.BP模型概述误差逆传播(ErrorBack-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. PallWerbas博士于1974年在他 ...

  8. 神经网络原理的简单介绍,神经网络的基本原理

    神经网络的基本原理是什么? 神经网络的基本原理是:每个神经元把最初的输入值乘以一定的权重,并加上其他输入到这个神经元里的值(并结合其他信息值),最后算出一个总和,再经过神经元的偏差调整,最后用激励函数 ...

  9. python神经网络编程 豆瓣,python训练神经网络模型

    人工神经网络的学习类型 学习是神经网络研究的一个重要内容,它的适应性是通过学习实现的.根据环境的变化,对权值进行调整,改善系统的行为.由Hebb提出的Hebb学习规则为神经网络的学习算法奠定了基础. ...

最新文章

  1. 基于OpenCV的条形码区域分割
  2. Java、Python、Go 哪个后端编程语言适合web前端工程师学习?
  3. 关于dataTables 的排序问题
  4. pythonunbuffered_python所遇到的坑
  5. c++ 纯虚成员函数+抽象基类
  6. CIKM 2021 | 自监督学习在社会化推荐系统中的应用
  7. 浙江中医药大学第十一届程序设计竞赛题解
  8. mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...
  9. 基于知识图谱的小微企业贷款申请反欺诈方案
  10. 通用的N-Tier模型合理么?
  11. 大讲堂专访丨连接Oracle DBA与开发的桥梁:Oracle的redo与undo
  12. mysql数据表案例_mysql中库和表的简单操作案例
  13. 飞康力推“一次付费”的存储定价模式
  14. 如何调用VS自带的数据源选择对话框
  15. K-th largest element in an array
  16. java ftp 上传文件 无效_使用java进行ftp文件上传出现425错误
  17. 如何使用代码调用API接口发送短信?(以SendCloud为例)
  18. 我国著名的计算机科学家,我国著名计算机科学家、西安交大郑守淇教授逝世
  19. Win11系统打开电脑磁盘显示磁盘错误无法打开怎么办?
  20. HEVC视频扩展解决方法

热门文章

  1. 编写简单的中文分词程式-.NET教程,Asp.Net研发
  2. 亿格名片 | 亿格云牵手“共享充电宝行业龙头公司“怪兽充电
  3. VMware中使用ubuntu虚拟机内存越来越大的问题
  4. 百度图像模糊程度判断
  5. linux TTY子系统(3) - tty driver
  6. python中.find函数的使用方法及实例_FIND函数的详细讲解及实例分析
  7. 没有学历,在IT界边缘苦苦挣扎的我们,该何去何从
  8. Ubuntu 安装 PostgreSQL 教程
  9. 互联网竞争,本质是渠道之争(从360、小米手机到淘宝...)
  10. 如何修改点击触摸屏的默认声音