Bootstrap

【机器学习】神经网络(BP算法)含具体计算过程

目录

神经元的“激活函数”

多层前馈网络结构​编辑

BP(BackPropagation:误差逆传播算法)

BP算法推导

手动计算BP神经网络的权值来实现学习

前向传播(正向运算)的过程

隐藏层输入:

隐藏层输出:

 输出层输入:

输出层输出:

个人计算过程: 

计算误差

误差反向传播


什么是神经网络?

神经网络由很多神经元(类似人脑的神经元)组成,这些神经元按层次结构排列,并通过权重(类似神经连接强度)相互连接。

神经网络的目的是通过学习输入数据(x)和输出结果(y)之间的关系,来进行预测或分类。

每个神经元接收来自前一层的输入,并进行加权求和。然后,将这个和通过一个激活函数,得到该神经元的输出,输出会传递到下一层神经元。 

f 就是激活函数(响应/挤压函数)

神经网络的基本结构是由输入层隐藏层输出层构成。

  • 输入层(Input Layer):接收外部数据。每个神经元表示一个特征。
  • 隐藏层(Hidden Layer):是神经网络的“工作区域”,负责学习输入数据的复杂模式和特征。可以有多层,通常深度神经网络有多个隐藏层。
  • 输出层(Output Layer):输出网络的预测结果或分类结果。

神经元的“激活函数”

加权和  通过激活函数 f() 进行非线性变换,输出给下一层神经元。

Sigmoid:输出范围在 (0,1)(0, 1)(0,1),常用于二分类问题。

常见的激活函数包括Sigmoid、Tanh、ReLU、Leaky ReLU、Softmax等

我学bp的时候,用sigmoid函数。故其他的就不提了

多层前馈网络结构

  • 输入层(Input Layer):该层负责接收输入数据。每个神经元代表一个输入特征。

  • 隐藏层(Hidden Layers):该层是神经网络中间的部分,通常由多个神经元构成,神经元数量和层数可以根据具体任务来设定。隐藏层的作用是通过激活函数学习输入数据中的非线性关系。

  • 输出层(Output Layer):该层给出最终的预测结果或分类标签。在回归任务中,输出层通常只有一个神经元;在分类任务中,输出层的神经元数等于类别数

  • 通过权重传递信息:从输入层到隐藏层的信息是加权传递的,权重是神经网络在训练过程中学习得到的参数。



BP(BackPropagation:误差逆传播算法)

通过调整网络中的权重和偏置,最小化输出结果与实际标签之间的误差

BP算法推导

如果一个函数是凸函数,那么梯度为零意味着达到了全局最优点

BP 算法的损失函数无法保证是凸函数,这意味着目标函数可能具有多个局部极值点。对于非凸优化问题,仅通过求导令梯度为零的方法无法确保找到全局最优解。因此,BP算法通常结合梯度下降法来进行权重和偏置的更新

BP 算法基于 梯度下降 策略,以目标的负梯度方向对参数进行调整 

BP 算法就是让网络的输出误差逐层传递回去,把“错误”反馈到每一个权重。

每次迭代中,权重和偏置都会朝着减小损失的方向微调。

这一时没有看懂没关系,可以结合下面的题目体会体会



手动计算 BP 神经网络的权值更新可以帮助理解算法过程和数学推导

手动计算BP神经网络的权值来实现学习

3层的bp神经网络
 

绿色的是输入层【2个,蓝色的是输出层【2个,橙色的是隐藏层【3个】

b1 ,b2指的是偏置值
 

初始权重,这个随机给定的,需要我们后面更新【这是我们要求的】

更新后的权重

学习率给定的是0.5

解题步骤

按照 前向传播计算误差误差反向传播 的顺序进行计算。

前向传播(正向运算)的过程

一个神经网络的正向运算过程主要分为两个部分:线性部分非线性部分(激活函数)

线性部分:本神经元连接的前面的东西作为输入,做一个线性叠加(乘上权值w之后再相加)

将当前神经元的输入值进行线性加权求和

非线性部分【激活函数--用sigmoid函数】:用刚刚的线性叠加结果作为输入,求出输出(本神经元的输出

【将线性叠加结果  输入到激活函数。通过 Sigmoid 函数计算神经元的输出,输出是一个非线性值,范围在 0 到 1 之间】

隐藏层输入

隐藏层输出

应用 Sigmoid 激活函数

 输出层输入

输出层输出

应用 Sigmoid 激活函数

个人计算过程: 

计算误差

     监督学习  BP神经网络是有监督的,损失函数衡量网络输出【运算结果】与真实值差距【正确答案】

误差反向传播

输出层误差

输出层的梯度(使用链式法则)

隐藏层误差

更新权重 

求出这个结果后再去重复上述过程


再来一题

手写的部分过程,保留的小数位看题目要求

熟悉理解一下这个计算过程,这个题目基本掌握了 


总结步骤

  • 前向传播
    • 输入数据从输入层逐层传递到输出层。
    • 计算每个神经元的激活值。
  • 误差计算
    • 计算输出层的误差(实际值与预测值的差异)。
  • 反向传播
    • 从输出层到输入层,按链式法则计算梯度。
    • 更新权重和偏置,减少误差。
  • 重复迭代
    • 不断重复前向传播和反向传播,直到网络收敛。
;