目录
什么是神经网络?
神经网络由很多神经元 (类似人脑的神经元)组成,这些神经元按层次结构排列,并通过权重(类似神经连接强度)相互连接。
神经网络的目的是通过学习输入数据(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神经网络是有监督的,损失函数衡量网络输出【运算结果】与真实值差距【正确答案】



误差反向传播
输出层误差:

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




隐藏层误差:


更新权重

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

再来一题

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




熟悉理解一下这个计算过程,这个题目基本掌握了
总结步骤
- 前向传播 :
- 输入数据从输入层逐层传递到输出层。
- 计算每个神经元的激活值。
- 误差计算 :
- 计算输出层的误差(实际值与预测值的差异)。
- 反向传播 :
- 从输出层到输入层,按链式法则计算梯度。
- 更新权重和偏置,减少误差。
- 重复迭代 :
- 不断重复前向传播和反向传播,直到网络收敛。