艾巴生活网

您现在的位置是:主页>科技 >内容

科技

神经网络的工作原理介绍图_神经网络的工作原理介绍

2023-08-06 15:17:01科技帅气的蚂蚁
在机器学习及相关领域,人工神经网络的计算模型受到生物神经网络的启发:每个神经元都与其他神经元相连,当它被激发时,会像邻近的神经元一

神经网络的工作原理介绍图_神经网络的工作原理介绍

在机器学习及相关领域,人工神经网络的计算模型受到生物神经网络的启发:每个神经元都与其他神经元相连,当它被激发时,会像邻近的神经元一样发送化学物质,从而改变这些神经元中的电位;如果一个神经元的电位超过一个阈值,它就会被激活(激发),并向其他神经元发送化学物质。人工神经网络通常表现为按照一定层次结构连接的“神经元”,它可以从输入的计算值进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂性,通过调整大量内部节点之间的互联关系来达到处理信息的目的。并且还用于估计或者可以依赖大量的输入和一般的未知逼近函数,最大化的拟合现实中的实际数据,提高机器学习预测的准确性。

概述

简单来说,神经网络的概念有些抽象。首先举例说明机器学习中神经网络处理数据的完整过程。

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)详细介绍了与神经网络相关的一些基本概念:反向传播、梯度下降、损失函数、优化函数、历元、批量、优化器、学习速率等。

回顾唐子红