BP-网络与反向传播算法

BP-网络通过正向传播计算预测值,反向传播求解损失函数的梯度,更新参数。以一个简单的神经网络模型为例,说明神经元结构、三层神经网络的工作原理及反向传播的误差计算。通过这种方式,使得复杂的神经网络学习过程变得清晰易懂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BP-网络可谓是机器学习领域的劝退哥,让人觉得难以亲近,其实理解之后会发现它和线性回归、逻辑回归一样,只是做了很简单的事情

那么,如何表示BP-网络才能让人更好地理解呢?

1)概念表示得是否易于理解,概念是给人看的,越容易理解越好
2)必须解释正向和反向传播在干嘛?为什么要进行反向传播?
3)应从最简单的神经网络开始,参数少,好记,不会眼花缭乱
4)公式、参数的表示和含义都要清楚,尤其是上标、下标

结合上面这几点,以解决二元分类问题为例,我们来看看BP-网络究竟做了什么

假设样本只有一个特征,一个标签,用(x,y)来表示一个样本

神经元

神经元由两个部分组成,一个是线性模型,另一个是激活函数,一般根据实际应用选择不同的激活函数

在这里插入图片描述

这是一个最简单的神经元:
1)有一个输入x,表示样本的一个特征(通常还有一个偏置项,我们将其忽略,因为它不影响理解)
2)设z为线性模型的输出,θ为参数
3)以sigmoid函数作为激活函数可以得到神经元的输出h(z)

没错,实际上一个神经元所做的事情和最简单的逻辑回归模型没有任何区别,但是当样本特征的数量逐渐增加时,在逻辑回归中我们常常采用将特征组合的方式构成一个多项式模型,而这将导致大量的参数需要处理,效率极低,这也是为何我们要使用神经网络的原因,就好比现在要用性能更好的多核处理器代替单核处理器了 为什么要使用神经网络?

神经网络

神经网络有三个层级,输入层隐藏层输出层
1)输入层的神经元读入样本特征且不做任何处理,神经元的个数取决于样本特征的数目
2)输出层表示分类的结果,对于多元分类(类别≥3),神经元的个数取决于类别的数目
3)输入层和输出层有且只有一层,而隐藏层可以有多层,每一层对上一层传递来的数据进行处理;隐藏层>1时,确保每个隐藏层的神经元个数相同;神经元的个数一般来说在不超过计算能力的情况下越多越好

在这里插入图片描述

这是一个三层的神经网络:
θ i j ( k ) 表示第 k 层第 i 个神经元映射到第 k + 1 层第 j 个神经元的参数 θ^{(k)}_{ij}表示第k层第i个神经元映射到第k+1层第j个神经元的参数 θij(k)表示第k层第i个神经元映射到第k+1层第j个神经元的参数

正向和反向传播

万事具备,那么,正向和反向传播究竟做了什么?

如果要类比线性回归,那么正向传播就是在计算预测值ŷ,反向传播就是用预测值ŷ减去样本值y得到损失函数,再对损失函数求导得到梯度,使用梯度下降法更新参数

在这里插入图片描述
a j ( i ) 表示第 i 层第 j 个神经元的输出 a^{(i)}_j表示第i层第j个神经元的输出 aj(i)表示第i层第j个神经元的输出

z j ( i ) 表示第 i 层第 j 个神经元的输入 z^{(i)}_j表示第i层第j个神经元的输入 zj(i)表示第i层第j个神经元的输入

正向传播:

第一层:
a 1 ( 1 ) = z 1 ( 1 ) = x a^{(1)}_1=z^{(1)}_1=x a1(1)=z1(1)=x
第二层:
z 1 ( 2 ) = θ 11 ( 1 ) a 1 ( 1 ) = θ 11 ( 1 ) x z^{(2)}_1=θ^{(1)}_{11}a^{(1)}_1=θ^{(1)}_{11}x z1(2)=θ11(1)a1(1)=θ11(1)x

a 1 ( 2 ) = h ( z 1 ( 2 ) ) = 1 1 + e − z 1 ( 2 ) a^{(2)}_1=h(z^{(2)}_1)=\frac {1}{1+e^{-z^{(2)}_1}} a1(2)=h(z1(2))=1+ez1(2)1

z 2 ( 2 ) = θ 12 ( 1 ) a 1 ( 1 ) = θ 21 ( 1 ) x z^{(2)}_2=θ^{(1)}_{12}a^{(1)}_1=θ^{(1)}_{21}x z2(2)=θ12(1)a1(1)=θ21(1)x

a 2 ( 2 ) = h ( z 2 ( 2 ) ) = 1 1 + e − z 2 ( 2 ) a^{(2)}_2=h(z^{(2)}_2)=\frac {1}{1+e^{-z^{(2)}_2}} a2(2)=h(z2(2))=1+ez2(2)1

第三层:
z 1 ( 3 ) = θ 11 ( 2 ) a 1 ( 2 ) + θ 21 ( 2 ) a 2 ( 2 ) z^{(3)}_1=θ^{(2)}_{11}a^{(2)}_1+θ^{(2)}_{21}a^{(2)}_2 z1(3)=θ11(2)a1(2)+θ21(2)a2(2)

a 1 ( 3 ) = h ( z 1 ( 3 ) ) = 1 1 + e − z 1 ( 3 ) a^{(3)}_1=h(z^{(3)}_1)=\frac {1}{1+e^{-z^{(3)}_1}} a1(3)=h(z1(3))=1+ez1(3)1

反向传播:

在这里插入图片描述
δ j ( i ) 表示第 i 层第 j 个神经元的误差 δ^{(i)}_j表示第i层第j个神经元的误差 δj(i)表示第i层第j个神经元的误差

交叉熵损失函数
L ( a 1 ( 3 ) , y ) = − [ y l o g a 1 ( 3 ) + ( 1 − y ) l o g ( 1 − a 1 ( 3 ) ) ] L(a^{(3)}_1,y)=-[yloga^{(3)}_1+(1-y)log(1-a^{(3)}_1)] L(a1(3),y)=[yloga1(3)+(1y)log(1a1(3))]

使用梯度下降法更新隐藏层与输出层间的参数,其中α为学习率
θ 11 ( 2 ) = θ 11 ( 2 ) − α ∂ L ( a 1 ( 3 ) , y ) ∂ θ 11 ( 2 ) θ^{(2)}_{11}=θ^{(2)}_{11}-α\frac {∂L(a^{(3)}_1,y)}{∂θ^{(2)}_{11}} θ11(2)=θ11(2)αθ11(2)L(a1(3),y)

θ 21 ( 2 ) = θ 21 ( 2 ) − α ∂ L ( a 1 ( 3 ) , y ) ∂ θ 21 ( 2 ) θ^{(2)}_{21}=θ^{(2)}_{21}-α\frac {∂L(a^{(3)}_1,y)}{∂θ^{(2)}_{21}} θ21(2)=θ21(2)αθ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值