误差逆传播算法

devtools/2025/2/10 9:28:28/

一、误差逆传播算法

1、神经网络

神经网络是由具有适应性的简单单元组成的广泛并行互联的网络。其实,神经网络是一个很大的学科领域,对于数学家和自动控制专家对其有不同的看法。对于我们一般来讲神经网络看作算法,对于西瓜书而言仅仅讨论神经网络与机器学习的交集,即"神经网络学习"亦称"连接主义"学习。

2、误差逆传播算法(BP算法)

BP算法不仅可用于多层前馈神经网络。它是一种监督学习算法,用于根据输入数据和对应的目标输出数据,调整神经网络的权重,使得网络能够对输入数据做出正确的预测。

BP算法的基本思想是通过计算网络输出与真实目标之间的误差,并将误差反向传播到网络中的每个神经元,以便调整各层之间的连接权重,从而降低误差,提高网络的预测能力。该算法主要分为两个阶段:前向传播和反向传播。

给定训练集D=\left \{ {(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}\right \},x_i\in\mathbb{R}^d,y_i\in\mathbb{R}^l。也就是输入 d 维特征向量、 l 维实值向量。便于理解,看下图:

输出层第 j 个神经元的阈值用 \theta_j 表示,隐层第 h 个神经元的阈值用 \gamma _h 表示。输入层第 i 个神经元与隐藏层第 h 个神经元之间的连接权v_{ih},隐藏层第 h 个神经元与输出层第 j 个神经元之间的连接权w_{hj}。记隐层第 h 个神经元接收到的输入为a_h=\sum_{h=1}^{q}w_{hj}b_h,输出层第  j 个神经元接收的输入为\beta _j=\sum_{h=1}^{q}w_{hj}b_h,其中 b_h 为隐层第 h 个神经元的输出。

PS1-1:为什么设置 β 呢?引入 β 是为了让整体处理的更方便,其等于所有的输入的加和,称为"静输入"。是为了后面描述的更加方便。

对于训练例(x_k,y_k),假定网络的实际输出为\widehat{y}_k=(\widehat{y}_1^k,\widehat{y}_2^k,...,\widehat{y}_l^k)。考虑例3-1给出的图,可知:

k,代表的是第 k 个样例上;j,代表的是对第 j 个神经元进行处理。若是在回归问题上,最重要考虑的就是均方误差,即在(x_k,y_k)上:

即,考虑实际输出和真是输出之间的差别,前面有个\frac{1}{2}为的是平方求导后将2抵消。这里其实在前面的笔记里说了很多次了。需要通过学习确定的参数数目:

PS1-2:看上图,输入层和隐层直接的权重参数有 d×q 个,隐层与输出层直接的权重参数有 l×q 个,隐层又有 q 个阈值,输出层有 l 个阈值。所有一共是 (d+l+1)q+l。

在训练过程中根据一些数据来敲定上述的参数。BP是一共迭代的学习算法,在迭代的每一轮中采用广义感知机学习规则对参数进行更新估计。说白了,就是从感知机推广到多层感知机。通常我们把多层前馈网络用BP算法训练的时候称为多层感知机。任意参数v的更新使用下面的准则:

PS1-3:这个式子很好理解,就是上一次是v,学习就是对这个v进行调整,加上一个调整量∆v。

所以我们的重点就是要知道这个∆v。那∆v是怎么改变的呢?一定是因为有误差!如果要是没有误差,一次过。那我们就啥都不用改了。正是因为有误差,所以我们要有一个调整量∆v进行修正。

在第三章就说过了,有误差怎么改?求导,倒数为0,求极值。所以BP算法采用梯度下降法(在之前的笔记中讲过,这里不赘述)策略,以目标的负梯度方向对参数进行调整。以学习参数w_{hj}为例,对误差E_k,给定学习率 η ,有:

我们回看PS3-1中的图,这里的 w 要和 E_k 发生联系,但是我们发现 w 和 E_k 不是直接联系的,E_k 由 \widehat{y}_j^k决定的,\widehat{y}_j^k由 β 决定,β 是由 w 决定。所以是 w_{hj} 先影响到 \beta _j ,再影响到 \widehat{y}_j^k ,然后才影响到 E_k ,有:

PS1-4:其实就是偏导的链式法则罢了。

进行推导一下:

PS1-5:这里的f(x)是sigmoid函数,他有一个很好的性质。就是f'(x)=f(x)(1-f(x))

其实很简单,自己推一下。将前两项项拼起来,得:

于是,可求得 w_{hj} 的更新公式为:\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}}=\eta g_jb_h。看上面给出的神经网络的图b_h是隐层神经元的输入信号,g_j是处理得到的一项。

类似这种推导过程,可以把其他的参数全推导出来:

其中\Delta \gamma _h是隐层的阈值调整量,\Delta v_{ih}是输出层与隐层之间的权重调整量,\Delta \theta _h是输出层的阈值调整量。上述式子中的:

e_h的推导过程同g_j自行推导练习。以上的学习率η∈(0,1),该学习率控制算法每一轮迭代的更新步长,太小收敛速度慢,太大就震荡。但是学习率还是有可能引发震荡现象的,所以要有办法让其停止,设置其在几轮内停止,这里引入"轮次":

        ①将训练样本每一个都走一遍称为一轮;

        ②将每一个样本给到模型中并调整一次,有多少样本就调几次就有几轮;

        ③每轮之间计算误差下降的情况,在第二章提起过,第一轮误差为0.8,第二轮误差为0.7,那就继续下去。若第一轮误差为0.8,第二轮误差为0.9,那就停止。

以上三种方法都可以使其停下来。如何理解这个 η ,画一个几何图作为理解:

所以,其实一开始调整步长可以比较大。可以设置成动态学习率,如:η、\frac{\eta }{2}\frac{\eta }{4}

显然,从数学的理论推导,也轻易能看懂BP算法的工作流程了:

始终注意,BP算法的目标是最小化训练集D上的累计误差:

"标准BP算法" 每次仅针对一个训练样例更新连接权和阈值(其实,上面讲述的都是针对一个样例更新连接权和阈值),"累计误差逆传播"推导出基于累计误差最小化的更新规则。

PS1-6:"标准BP算法" 与"累计BP算法"的区别类似随机梯度下降与标准梯度下降的区别。

3、BP网络的过拟合

有两种策略可以用来缓解BP网络的过拟合:

"早停": 将数据分为训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值;

"正则化":其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和

其中w_i表示连接权和阈值,λ ∈ ( 0 , 1 )用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。增加连接权与阈值平方和后,训练过程将会偏好较小的连接权和阈值,以减少过拟合 。

PS1-7:正则化是什么?

具体是在模型的损失函数中添加一个额外的惩罚项,通过对模型参数进行约束,限制模型的复杂度,防止模型对训练数据过拟合,使模型在未知的训练数据上也能有较好的泛化性能。

目的:在模型训练过程中,让模型在拟合训练数据和保持简单性之间找到一个平衡,避免模型过于复杂而过度拟合训练数据中的噪声和细节,从而提高模型对新数据的适应性和预测准确性。

常见的正则化方法有:L1正则化、L2正则化、Dropout正则化(也称丢弃法)

过拟合就不说了,之前的笔记里说的很清楚了。

先讲L1、L2正则化,L1、L2正则化就是在损失函数里加正则化项:

注意这里的正则化项前面的 λ 不是正则化项的一部分,而是正则化项在损失函数中的权重。另外L1、L2正则化项都要 ≤ θ(不包含 λ系数 )

①为什么加入正则化项可解决过拟合问题?

我们要使损失函数尽可能的小,加入正则化项后,还要使参数w尽可能的小。即,降低参数w的大小范围——>降低了模型复杂度——>解决过拟合。

②为什么加入正则化项时只限制参数w而不限制b?

因为b只是一个偏移量,只是对拟合的曲线进行平移,并不会改变曲线形状。解决过拟合问题只是想让曲线更为平滑。

③比较L1正则化和L2正则化

L1正则化能起到稀疏化的作用,可以用于特征选择,举个例子:

看上去可能比较费解,红色的等高线是loss函数的等高线。蓝色阴影部分,分别是对w的限制区域。我们要找的是损失最小的点,而且保证w在被限制的区域内。为什么L1可以被稀疏化,交点在(0,1)点,此时w2=0就稀疏了。但是L2正则化显然切点不是坐标轴上。

这里可能还有同学不明白,解释一下稀疏化吧!稀疏化是指通过某种方法使数据或模型中的大部分元素变为零或接近零,从而得到一个具有稀疏结构表示的过程。这样回看以后,w2=0,也就是说w2对应的特征被排除了,所以稀疏了。也就是减少特征数来避免过拟合!L2就是减少w的范围,来消除过拟合。推导到高维也是一样的。

再来看看Dropout正则化(不想打这么多字,所以下文称为"丢弃法"),依然举个例子:

设置一个概率P=0.5。使隐层的各个节点都有50%的概率保留和删除。使用了丢弃法的神经网络中未被连接的神经元节点都是被丢弃的节点。也就是说使用丢弃法后,会得到一个更为精简的神经网络。

①为什么丢弃法可以解决过拟合问题?

直观看是从一个复杂的模型变为一个精简的模型。网络模型的参数也变少了,模型复杂程度由两个方面,一个是参数的数目,另一个是参数的大小范围。因此,我们可以采用减少参数的数目,来降低模型的复杂度,因此就能解决过拟合。

另外,在原来的神经网络中,我们的输出值是由前层神经元之和决定的,但是在使用丢弃法以后,在每一层结点都有50%的概率被保留或者删除,因此每一个结点都不一定能保证留在网络中。这么看来输出的神经元就不能过度的依赖任意一个输入神经元,也就是说不可能给任何一个神经元赋一个过大的权重。因此权重参数w也变小,其大小范围变小了呢,相当于起了一个L2正则化的作用。也就解决了过拟合问题。


http://www.ppmy.cn/devtools/157595.html

相关文章

AI大模型评测对比2—ChatGPT对比DeepSeek

近期,DeepSeek 凭借其超高的性价比与卓越性能,在国内外各大社交媒体平台上赚足了眼球。令人瞩目的是,它仅耗费 2048 块显卡, 600 亿美元的成本,便成功训练出了可与顶级模型比肩的 Deepseek - V3 模型。这与美国公布的一…

Java爬虫:打造高效的数据抓取利器——详解详情接口设计与实现

在当今数字化时代,数据如同黄金般珍贵。无论是企业进行市场调研、竞争对手分析,还是研究人员收集信息,数据的需求无处不在。而爬虫技术,作为一种高效的数据抓取手段,成为了众多开发者手中的利器。本文将深入探讨如何使…

【C语言标准库函数】指数与对数函数:exp(), log(), log10()

目录 一、头文件 二、函数简介 2.1. exp(double x) 2.2. log(double x) 2.3. log10(double x) 三、函数实现(概念性) 3.1. exp(double x) 的模拟实现 3.2. log(double x) 和 log10(double x) 的模拟实现 四、注意事项 4.1. exp(double x) 的注…

【正点原子K210连载】第六十七章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第六十七章 音频FFT实验 本章将介绍CanMV下FFT的应用,通过将时域采集到的音频数据通过FFT为频域。通过本章的学习,读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节: 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

如何使用DeepSeek-R1进行二次处理?

使用DeepSeek-R1进行二次处理通常指的是在初步推理结果的基础上,进一步优化、分析或调整这些结果以更好地满足特定的应用需求。这可能包括但不限于后处理文本生成的输出、提高分类任务的准确性、细化搜索结果等。以下是一些常见的二次处理方法及其应用场景。 1. 文…

Stable Diffusion室内设计文生图实操

各们设计师,伙伴们,用Ai设计的时候,都知道需要模型才能使效果更佳理想,但是除了模型需要训练之外,还需要提示词,好的提示词和反向词,结合模型才能,完美生成效果。今天,我…

人工智能安全治理的中国认知与方案

文章目录 前言一、立足本土治理认知,构建风险分类体系1、《框架》沿风险治理思路,系统梳理了人工智能安全风险类型,为有效识别人工智能安全风险提供了重要依据。2、在安全风险类型增量方面,人工智能伦理域风险广受关注。二、尊重技术发展规律,践行双重治理路径3、在技术应…

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…