神经网络的原理和bp算法哪个好,神经网络bp算法推导

神经网络的原理和BP算法神经网络,中间我们假设有一个合适的 θ 矩阵,来完成我们的前向传播,那么我们如何来选择 θ 呢?开始我们的讨论内容,构造一个神经网络,使

神经网络原理及BP算法

假设神经网络的中心有一个适合完成前向传播的矩阵。

那么,我们应该如何选择呢?

首先,我们将构建一个神经网络并使用反向传播来求解。

神经网络模型:

7fdae18859ab4bf98a2554a59135bb8e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=ePMYd9SxqyR2siHdMv6Nm50qGps%3D

为了显示:

L:神经网络层数

Sl:l层神经元数量

K:输出多类别情况下的类别数

然后需要一个好的神经网络来优化所有边的权重。此时,可以考虑损失函数和梯度下降。

成本函数:

45c2e0863e6d42c3bd8d51c5ca870888~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=YaVYjgkMLGZeeuFln9ZCjSBSUgM%3D

在该图中,您可以看到神经网络成本函数是逻辑回归成本函数的广义表示。这可以理解为具有多个逻辑回归单元。因此,对于二分类问题,成本函数采用逻辑回归成本函数的形式。对于多分类问题,每个分类的成本必须包含在总成本中。类似地,式2中的正则化项是对每层中所有神经元的所有边缘权重求和(不包括偏置项)。

成本函数还可以使用SVM/hinge 损失和softmax/交叉熵损失。

因此,在神经网络的成本函数中,前一个表达式也代表了模型的拟合能力,后一个表达式代表了神经网络的复杂度。

使用成本函数时,下一步是找到最合适的边权重 来最小化成本函数。你怎么做呢?

BP算法(反向传播)

我们的目标:

6f9e065ca909416bbb3fc1a7f6c99068~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=tpu%2FvnHGvqBPqcygq6Kha3DstOQ%3D

总体思想是使用反向传播来找到每个边缘权重 的梯度或导数,并使用梯度下降来找到边缘权重 的最优解。

c9284fac01274db3b6e91edbf7957acf~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=fisJpCQEaVEyDZg5M5juSGc%2Faw8%3D

a1fbe2bb88764c61a5f309eb29cb8127~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=nFHD%2BRsXV6xvR1yXdibZDpN7IE0%3D

8851cb41cb0f4a7b9bcc983d7e0a10a1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=lg5Alb7MA7nSTaGpdyGPxWyzzXs%3D

在上面的图1中,通过前向传播,我们可以计算输出和中间结果对应的向量。

然后,使用的下标j和上标l来表示第一层第j个节点的误差。它是激活值与真实值之间的误差。

我们来谈谈反向传播。

在上一篇博客中,我在a 后面添加了l。下标j表示第l层第j个单元的激活值,即神经元的输出值。因此,项在一定程度上捕获了该神经节点激活值的误差。

具体来说,我们以上图所示的四层神经网络结构为例。在这种情况下,大写的L 等于4。对于每个输出单元,准备计算损失的 项。第四层第j个单元的等于该单元的激活值减去训练样本的真实值。这就是虚拟输出和训练集的y 值之间的差异。

接下来,计算网络前一层的误差项。

(4):输出层的输出结果减去样本值得到的值。

(3) 的公式: (3) 等于(3) 的转置乘以(4) 再乘以g'(z(3))。

g’(z(3)):当输入值为z(3)时激活函数g的导数。导数项g’ 实际上是a(3) (1-a(3)) 的点积。其中a(3)是第三层的激活向量。

使用相同的公式计算(2)。

不存在(1)。这是因为它对应于输入层(即训练集数据并且没有错误)。所以在这个例子中,项仅存在于第二层和第三层中。

反向传播类似于将输出层误差反向传播到第三层并将其传递到第二层。这就是反向传播的意义。

介绍完BP算法的思想后,下一步就是利用该方法计算参数的偏导数。

如上图所示,如果你有一个非常大的训练样本集,假设你有一个包含m 个样本的训练集。

我们要做的第一件事就是用下标ij(实际上是希腊大写字母)修复这些( 的集合)。统一设置为0。事实上,这些大写的ij 是用来计算偏导数项的,即上标j 和下标ij 的偏导数。

因此,我们将这些作为累积项(初始值为0)并逐渐增加它们来计算它们的偏导数,如上图所示。

迭代i=1到m描述的训练集,在第i次循环中得到训练样本(xi,yi)。

首先,设置输入层激活值a(1)。接下来,使用前向传播计算第二层的激活值,然后是第三层和第四层。直到最后L层。

接下来,使用样本输出值yi? 计算与该输出值对应的误差项L。即,L 是期望输出减去目标输出。

然后使用反向传播算法计算(L-1)、(L-2) 等,直到(2)。

最后,我们使用大写的 来累积我们之前写的偏微分项。具体来说,如果我们将 视为矩阵,则ij 表示矩阵内的位置。因此,如果(L) 是矩阵,则将(l) 乘以等于(l) 加上小写(l+1) 的a(l) 转置,得到向量化形式,可以用以下方式实现都是我和j。最后,执行完for 循环体后,我们跳出for 循环,通过计算上图3 左下角的表达式来计算D。我们将讨论两种情况:j=0 和j0。

这就是为什么我们没有为j=0 编写额外的归一化项,因为对于j=0,它是相应的偏差项。

最后,一旦我们计算出这些,它们正是每个参数的成本函数的偏导数(梯度),因此我们可以在梯度下降或其他更高级的优化算法中使用它们,以最小化您可以找到合适的参数或边缘。总费用。

我现在有点困惑,我应该如何计算ij?

946cc8f44acd47088d63bfc387dbdb46~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=4ldDKCqplGMDOfY0X0OfXOxaaL8%3D

a1ab5a92649847e5bbf61ebc41add5d6~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=y44xIHumyj34nbJxTWMMiH%2Fx7kM%3D

首先,让我们回顾一下神经网络的成本函数。成本函数假设只有一个输出单位。

这里我们将重点关注单样本前向和后向传播。例如,考虑样本(xi, yi)。同时,这里我们不考虑正则化,所以=0。因此,最后一项将被删除。现在看看这个总公式。我们可以看到这个成本项与训练数据xi,yi有关。因此,一个样本的成本只是上图左下角蓝色框中的成本。简而言之,我们的目标是平均最小化该值。我们要做的就是尽可能降低这个成本,因为它的价值衡量的是模型拟合真实数据的能力。

反向传播细节和ij 的计算:

令(l) j 为第l 层第j 个单元的激活值的成本。更正式地说, 项实际上是关于z(l) j 的偏导数。

回想一下(3) 的公式。

(3) 等于(3) 的转置乘以(4) 再乘以g'(z(3))。

因此,成本函数是标签y和整个网络表达的假设函数h(x)之间的函数。因此,对神经网络中z(l)j的值进行微小的改变会对网络的整体输出产生一定的影响,从而进一步影响成本函数。因此,这些项实际上只是成本函数相对于这些内部中间项的偏导数。

更改神经网络的内部权重时,您可以衡量对整体成本函数的影响。

现在让我们仔细看看反向传播是如何工作的。

输出层的(4)1 等于y(i)-a(4)1。 所以这是一个真正的错误。这就是真实值和神经网络预测值之间的差异。

然后将该值反向传播,然后向前传播以计算每个隐藏层节点的。

事实上,反向传播所做的就是执行链式推导规则。

我们简单解释一下链式规则。

680d5b43412b47d28c300da84ebb3bff~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=Lv8koHKyBNPulJ51gxMQXUWACVU%3D

事实上,我们的神经网络定义了一个非常复杂的假设函数h(x)。上图中,z和a实际上是函数,它们都嵌套在h(x)中。所以对于这个大的嵌套函数,如果我们需要求某个参数(l)ij 的偏导数,我们实际上就是在反向链接上连续求所有嵌套函数的偏导数。最终结果是我们在这里编写的常用(2)2 和(3)2 方程。

斜率测试

45cf9cb30ef449a891d41bd551205b81~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=PsaykxX4ZwIzW8jEImDdF7ot6Gc%3D

7c36b054937d45b6a5d05167bcf78f36~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=AtioqxU%2F8xmRPLenCH9W%2BYlBA0M%3D

验证反向传播是否正确。

随机初始化

首先,考虑这个问题:如果我们将所有边权重初始化为0,会发生什么? 我们计算的激活值很可能和逻辑回归中只有一个特征一样,效果会很差。 目前我必须随机初始化参数来解决这个问题。

7bf4615dae1d49bb8b738c93c349275a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=npdzz7gnV%2Bdxvy2qdkuZUX%2Fxuew%3D

具体来说,上述问题称为对称现象,因此随机初始化技术有时也称为对称性破缺。

随机初始化允许指定一定范围内的初始化,如[-,],因此所有参数都是在一定范围内随机初始化的。

然后编写上面的代码来初始化它。 rand 函数返回请求的维度,但重要的是,它返回0 到1 之间的随机数。将该值乘以两倍,得到0 到2。对于介于两者之间的值,减去另一个 会得到以下结果:值介于[-, ] 之间。

我们这里所说的 与前面提到的用于斜率测试的 或用于确定收敛性的 不同。事实上,它们都在各自的场景中发挥着最小值的作用。在数学中,字母 通常用于表示最小值,因此在这些不同的情况下,最小值被称为。为了避免此处混淆,您可以在代码中将该变量命名为init_epsilon。

总结

8780207bcde74c9bb46f702219478df3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=3mqT9UByK%2F1ULiP5oMLPNeQt8%2FY%3D

07d9c532688947809ba877bb000db4c4~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=xhmIxEdoSyOStNHqyG%2B53%2Ff6SxY%3D

deee3673e2d9460fb1b6ec79775c3d60~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=UWugEinMBZ8e8oszKp6AqV4%2FmFk%3D

dec48ac22e054d5cbbe13e116285aafe~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717726350&x-signature=rshzUrg0QGg2kI5wgtPwU26tm2U%3D

当训练神经网络时,我们要做的第一件事就是构建网络的通用框架。

网络框架的含义是神经元之间的连接模式,如上图1所示。所以我们所说的网络框架是指有多少层以及每层有多少个节点。在更复杂的层中,各层可能不完全连接。

具体应该如何选择呢?

首先,您可以看到我们定义了输入单元的数量。确定特征集x也就确定了相应的输入单元的数量。对于多类别,这等于特征xi 的维度。当分类问题进行时,输出层的单元数量由分类问题中需要区分的类别数量决定。例如,对于两类,仅需要一个输出单元,而对于数字。在一个识别应用中,可能有10个目标类别,这些类别也需要重写为矢量格式。

隐藏层是对初始特征的高级处理,因此隐藏层的神经元越多越好,隐藏层的数量越多,就可以更好地抽象高层特征。然而,更多的隐藏层和神经元需要更多的计算和更复杂的优化算法。因此,对于典型的简单应用,使用一两个隐藏层通常就足够了。如果您需要更多,您可能想进入深度神经网络,这是目前深度学习的热门类别。

训练神经网络。

6 个步骤:

1. 构建神经网络并随机初始化权重。通常,权重不会初始化为0,而是初始化为接近0 的非常小的值。

2. 运行前向传播算法。即对于一个神经网络输入xi,计算对应的hx值,它是输出值y的向量。

3.通过代码计算成本函数j。

4. 运行反向传播算法来计算这些偏导数或偏微分项,即j 对于参数 的偏导数。这样我们就可以获得神经网络每一层中每个单元对应的所有激活值a(l)和项。

5、坡度测试。将使用反向传播算法计算的偏导数与使用数值方法获得的估计进行比较,并验证两种方法获得的两个值基本接近。通过梯度验证,我们可以保证反向传播算法得到的结构是正确的。

6. 可以将梯度下降算法等优化算法与反向传播算法结合使用,尽可能降低代价函数,得到合理可用的参数矩阵。

对于神经网络成本函数j来说,它是一个非凸函数,因此理论上可以保持在局部最小值。事实上,梯度下降算法和其他先进的优化技术理论上可以收敛到局部最小值。

最后我们来说说梯度下降算法和神经网络的关系。上面第四张照片。

有一个特定的成本函数,并且神经网络有一组参数值。当然,实际上一个神经网络可以包含许多参数值。 (1)、(2) 和许多其他边权重。由于这些都是矩阵,因此参数的维数非常高。由于绘图限制,无法绘制更高维度的图像。因此,我们假设这个神经网络只有两个参数值。

然后,成本函数j 测量神经网络与训练数据的拟合程度。

因此,梯度下降算法的原理就是从一个随机的初始点开始,不断向某个方向达到最小值。

反向传播算法的目的是计算梯度下降的方向,梯度下降的过程就是沿着这个方向逐步下降。

原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/80609.html

(0)
小条's avatar小条
上一篇 2024年5月31日 上午10:12
下一篇 2024年5月31日 上午10:12

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注