神经网络的工作原理介绍图_神经网络的工作原理介绍
在机器学习及相关领域,人工神经网络的计算模型受到生物神经网络的启发:每个神经元都与其他神经元相连,当它被激发时,会像邻近的神经元一样发送化学物质,从而改变这些神经元中的电位;如果一个神经元的电位超过一个阈值,它就会被激活(激发),并向其他神经元发送化学物质。人工神经网络通常表现为按照一定层次结构连接的“神经元”,它可以从输入的计算值进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂性,通过调整大量内部节点之间的互联关系来达到处理信息的目的。并且还用于估计或者可以依赖大量的输入和一般的未知逼近函数,最大化的拟合现实中的实际数据,提高机器学习预测的准确性。
概述
简单来说,神经网络的概念有些抽象。首先举例说明机器学习中神经网络处理数据的完整过程。
01神经网络的一个例子
1.1案例介绍
示例:训练一个神经网络模型来拟合广告投入(电视、广播和报纸)与销售产出之间的关系,可以根据广告预测销售情况。
样本数据:参考下图。
抽样资料
电视、广播、报纸是样本数据的三个特征,销售是样本标签。
1.2准备数据
# Add reference import tensor flow as TF import panda as PD import numpy as NP # Load data=PD . read _ CSV('/dataset/advertising.csv') # PD是数据分析库熊猫#根据电视、广播、印刷(类型(数据),数据建立模型。shape) # # (200,5) #取特征X的值,除以第一列和最后一列的值,取出所有广告的值。x=data.iloc[:1:-1]#200*3#y取最后一列销售额的值标签Y=data。iloc。
1.3构建神经网络
建立顺序模型:顺序
隐层:一个多层感知器(隐层10,Dense(10),shape input_shape=(3,)对应样本的三个特征列,activation='relu function=' relu '),
输出图层:标签为预测值,纬度为1。
model=TF . keras . sequential([TF . keras . layers . dense(10,input_shape=(3,),activation='relu '),tf.keras.layers.Dense(1)])
模型结构打印(model.summary())
模型结构
描述:
1)keras模型,Sequential的意思是顺序模型,因为是全连通的,所以选择顺序模型。
2)tf.keras.layers.Dense是一个添加网络层的API。
3)隐层参数40个,感知器(神经元)10个,每个感知器有4个参数(w1,w2,w3,b),共计10*4=40。
4)输出层有十一个参数,一个感知器(神经元),十一个参数(W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,B)。
5)模型参数总数为40 ^ 11=51。
1.4将优化器和损失函数添加到创建的模型中。
# Optimizer adam,线性回归模型的损失函数是均方误差(mse)
model.compile(optimizer='adam 'loss='mse ')
1.5开始培训
#培训模式
model.fit(x,y,epochs=100)
x是样品的特征;y是样本的标签。
历元是梯度下降中的一个概念。当一个完整的数据集通过神经网络一次,返回一次,这个过程就叫做EPOCH。当一个历元对于计算机来说太大时,需要分成几个小块,需要设置batch_size,这将在下面的梯度下降章节中详细介绍。
1.6使用模型预测
#使用此模型根据现有数据预测前10个样本的销售量。
test=data.iloc[:10,1:-1]
Print('测试值'model.predict(测试))
以上步骤展示了一个神经网络模型的建立、训练和预测的全过程,然后介绍原理。
O2神经元的数学模型
神经元的数学模型
输入输入
(x1,x2,x3)是外部输入信号,一般是一个训练数据样本的多个属性/特征,在例子中可以理解为三种广告模式。
重量重量
(w1,w2,w3)是每个输入信号的权重值。对于上面的(x1,x2,x3)的例子,x1的权重可以是0.92,x2的权重可以是0.2,x3的权重可以是0.03。当然,权重值加起来不一定是1。
偏移偏差
还有一个B是怎么来的?一般的书或者博客都会告诉你,是因为y=wx by,b是偏移值,所以直线才能沿着y轴上下移动。从生物学上讲,在脑神经细胞中,只有当输入信号的电平/电流大于某个临界值时,神经元才会兴奋,而这个B实际上就是那个临界值。即当:w1*x1 w2*x2 w3*x3=t时,神经元会被激发。我们把t移到等式的左边,它就变成(t),然后写成b,就变成:w1*x1 w2*x2 w3*x3 b=0。
03神经网络训练过程
还是以之前的广告为例。在神经网络训练之前,需要先建立一个网络,然后填入数据(加入带有特征和标签的样本数据)进行训练。训练过程就是不断更新权值W和偏移量b的过程,输入有10层,每层的特征个数由样本决定(例子中有三个广告模式的三个特征列),每层有四个参数(w1,w2,w3,b)。全连接时,10层相当于10*4=40个参数。下面是单层神经网络模型,但是有两个神经元。
两个神经元的模型
培训过程
训练的过程就是不断更新权值w和偏移量b的过程,直到找到稳定的w和b,使模型的整体误差最小。具体过程如下:
培训流程示意图
与神经网络相关的概念
4.1反向传播
反向传播算法是一种计算数据流图中梯度的有效技术。每一层的导数都是下一层导数和上一层输出的乘积,这就是链式法则的神奇之处,误差反向传播利用的就是这个特性。
反向传播算法示意图
在前馈中,从输入层到输出层逐个计算每个隐层的输出。
正向过程
Step1,输入图层,随机输入x的第一个值,x的取值范围为(1,10),假设x为2;
步骤2,第一层网络计算,接收步骤1传入的x的值,计算:a=x ^ 2;
步骤3,第二层网络计算,接收步骤2中传输的a的值,计算:b=ln(a);
第四步,第三层网络计算,接收第三步传入的b的值,计算:c=sqrt { b };
步骤5,即输出层,接收从步骤4传入的c值。
然后,计算导数,并从输出层通过隐藏层一个接一个地传播回来。为了减少计算量,需要重用所有计算的元素。
翻转过程
反向传播-每一层的导数是下一层的导数和上一层的输出的乘积。
第六步,计算y和c的差值: c=c-y,返回第四步。
Step7和step4接收step5返回的 c,并计算 b= c * 2sqrt (b)。
Step8和step3接收step4返回的b,并计算a=b * a。
Step9和step2接收step3返回的 A,计算 X=/(2 * x)。
Step10,Step1接收step2返回的x,更新x(x-x),返回step1,从输入层开始下一个循环。
4.2.梯度下降
梯度下降是机器学习中用来寻找最佳结果(曲线最小值)的迭代优化算法,包含以下两层含义:
梯度:函数当前位置的最快上升点;
下降:用数学语言描述的与倒数相反的方向为负号,即与上升方向相反的运动,即下降,代价函数减小。
梯度下降的数学公式
其中包括:
(n 1):下一个值
(n):当前值
-:减号,梯度的反向,
:学习速度或步长,控制好每一步的距离,不要太快,避免错过极值点;不要太慢,以免收敛时间过长。
:梯度,函数当前位置的最快上升点。
J():函数
梯度下降算法是迭代的,这意味着需要多次使用该算法才能得到最优结果。梯度下降的迭代性质可以使欠拟合图进化以获得数据的最佳拟合。
梯度下降算法示意图
如上图左边所示,刚开始的时候学习率很高,所以下降的步长比较大。随着点的下降,学习率越来越小,所以下降的步长变小。同时成本函数也是递减的,或者说成本是递减的,有时叫做损失函数或者损失,两者是一样的。
一般情况下,不可能一次性将数据输入电脑。因此,为了解决这个问题,我们需要将数据分成小块,一个一个地传送给计算机,并在每一步结束时更新神经网络的权重,以拟合给定的数据。所以我们需要知道纪元和批量的概念。
纪元
当一个完整的数据集通过神经网络一次,返回一次,这个过程就叫做epoch。然而,当一个历元对于计算机来说太大时,它需要被分成几个小块。
设置纪元的数量。
完整的数据集在同一个神经网络中传输多次。但是请记住,我们使用的是有限的数据集,我们使用的是一个迭代过程,即梯度下降,来优化学习过程和图表。因此,仅更新一次权重或使用一个历元是不够的。
在神经网络中传输一次完整的数据集是不够的,我们需要随着历元数的增加增加神经网络中权值的更新次数,曲线由欠拟合变为过拟合。那么,多少个纪元是合适呢?呵呵,这个问题没有确定的标准答案,需要开发者根据数据集的特点和个人经验来设置。
一批
当数据不能一次通过神经网络时,需要将数据集分成若干批。
重复
迭代是批处理需要完成一个时期的次数。记住:在一个epoch中,批处理和迭代的数量是相等的。
例如,对于具有2000个训练样本的数据集。将2000个样本分成400个批次(5个批次),那么完成一个历元需要5次迭代。
4.3损失函数
“损失”是所有样本的“误差”之和,即(mm为样本数):
损失函数表达式
(1)0-1损失函数
(2)绝对损失函数
(3)铰链损失函数
(4)对数损失函数
(5)均方误差损失函数
(6)交叉熵损失函数
均方差和交叉熵表达式
4.优化功能
在示例的1.4节中,优化器和损失函数被添加到创建的模型中。
# Optimizer adam,线性回归模型的损失函数是均方误差(MSE) model.pile (optimizer=' Adam 'loss=' MSE ')。
这里使用了Adam optimizer。在神经网络中,有许多优化方法。这里选取几个做个简单介绍,详细情况需要单独找资料。
1)梯度下降法
梯度下降法是最重要的方法,也是许多其他优化算法的基础。
2)随机梯度下降法。
每次只使用一个样本更新,计算量小,更新频率高;容易导致模型超调和收敛不稳定。
3)小批量梯度下降
Mini batch梯度下降法是梯度下降法和随机梯度下降法的折中,即在计算损失时,计算一个批次的损失,而不是直接计算整个数据集或仅一个样本的损失,批次的大小自行设定。
4)动量
带动量的梯度下降法也是一种很常见的优化算法。这种方法由于引入了动量,可以加速梯度下降法。
5)内斯特罗夫
NAG算法,简而言之就是在动量梯度下降法之前做一个预演,看是否适合沿着之前的方向更新,不适合就立刻调整方向。也就是说,参数更新的方向不再是当前的梯度方向,而是未来参数的真实方向。
6)阿达格勒
在训练过程中,每个非参数都有自己的学习率,并且这个学习率会根据其之前梯度的平方和而衰减。
优点:在训练过程中,不需要人为调整学习速率,一般设置默认初始学习速率即可。
缺点:随着迭代的进展,公式(6)中的学习率会因为分母越来越大而变得越来越小,模型的参数在训练后期几乎不会更新。
7)阿达德尔塔
AdaDelta是Adagrad的改进版本,旨在解决Adagrad在训练后期学习率变得很小,降低模型收敛速度的问题。
8)亚当
下面是亚当的简介
我们从经典的梯度下降法开始,介绍了几种改进的梯度下降法。
动量法通过添加动量来提高收敛速度;
在当前更新之前预览内斯特罗夫方法,以找到更适合当前情况的梯度方向和幅度;
Adagrad使不同的参数有不同的学习率,通过引入梯度的平方和作为衰减项,在训练时自动降低学习率;
AdaDelta对Adagrad进行改进,使模型在训练后期也能有更合适的学习率。
既然不同的参数可以有不同的学习率,那么不同的参数也可以有不同的动量吗?
亚当法就是根据上述思想提出的。对于每个参数,它不仅有自己的学习率,还有自己的动量量,这样在训练过程中,每个参数的更新更加独立,提高了模型的训练速度和稳定性。
Adam(自适应矩估计):
一般 1设为0.9, 2设为0.999。
套用别人说过的话:
Adam在实践中表现良好,并且优于其他自适应技术。
事实上,如果你的数据是稀疏的,像SGD、NAG和Momentum这样的方法往往表现不佳,因为它们对模型中的不同参数都使用相同的学习速率,这将导致那些应该快速更新的参数更新缓慢,而那些应该缓慢更新的参数有时会因为数据而变得更快。因此,应针对稀疏数据使用自适应方法(Adagrad、AdaDelta、Adam)。同样,对于一些深度神经网络或非常复杂的神经网络,使用Adam或其他自适应方法也能更快地收敛。
05摘要
回顾本文的主要内容:
1)理解概念:人工神经网络受生物神经网络的启发,通过增加隐神经元的数目来提高模型逼近的精度,可以按照任意给定的精度逼近任意连续函数。
2)结合实例介绍了机器学习构建人工神经网络模型的实现过程。
3)人工神经网络的训练过程
4)详细介绍了与神经网络相关的一些基本概念:反向传播、梯度下降、损失函数、优化函数、历元、批量、优化器、学习速率等。
回顾唐子红
推荐阅读
- 如何涂指甲油,怎样涂指甲油干得快
- 纪念碑谷艾达的梦攻略第四关,纪念碑谷艾达的梦攻略
- udk虚幻4引擎(游戏开发包工具)软件介绍(udk虚幻4引擎(游戏开发包工具))
- OG梅奥为什么离开nba Pubmed GIST文献月评第十九期(Jun 2018)
- 12306用户名和密码忘记怎么找回账号,12306用户名和密码忘记怎么找回
- 哈尔滨市极乐寺简介
- 二人麻将打法技巧,迅速如何掌握二人麻将技巧
- 故宫门票多少钱一张2021,故宫门票多少钱
- 如何删除微信中的表情包,微信如何删除自己保存的表情
- dnf已经有红字的怎么把红字洗掉,dnf已经洗出红字的装备怎么洗掉
- 海蛏子的家常做法,海蛏子的做法大全
- 微信聊天记录怎么恢复吗,微信聊天记录怎么恢复方法:
- qq飞车帧数如何能锁,QQ飞车帧数如何修改
- 1盎司相当于多少克黄金,盎司等于多少克及一盎司黄金等于多少克
- 怎么恢复路由器出厂,怎样恢复路由器出厂设置
- 触手tvlogo怎么买,如何录制触手TV文章
- 藏语常用问候语及礼貌语 旅行必备
- 腾讯文章的会员怎么取消自动续费,腾讯文章VIP会员怎么取消自动续费设置
- 支付宝绑定银行卡与银行预留手机号不符,支付宝绑定银行卡提示与预留手机号码不一致
- 如何饲养土狗,饲养土狗的实用方法