全连接神经网络反向传播详解

        训练神经网络基本采用反向传播+梯度下降来进行,具体过程如下:

        全连接层神经元之间互相连接,假设第一层有三个节点,第二层有个节点,如下图所示:

        

        我们通过w11,w12,w21,w22,w31,w32来分别表示神经网络中节点到节点的权重,实际上,这可以被表示为矩阵的形式:

       

        因此,神经网络层与层之间的权重矩阵W在程序中就是通过这一个个矩阵表示出来的。而刚好每一层的神经元又可以采用向量的形式表示出来,故要求得第二层神经元的各个值,我们只需要将向量与矩阵相乘就行了。(上图中向量为1*3向量,而矩阵是3*2矩阵,两个相乘得到1*2向量,这个向量刚好对应第二层的两个神经元节点)

         在训练开始时,W矩阵中的所有元素被设为随机初始值(一般为-0.5--0.5,因为全连接神经网络一般用sigmoid激活函数激活,选择-0.5--0.5的值有利于反向传播顺利进行)

        首先由数据进入一个随机生成参数的网络,数据不断通过神经元及激活函数向前传播,直至到达输出层,在训练过程中,我们会有监督值t来监督这次前向传播的值是否正确,如果不正确,则监督值会传出一个误差值,告诉这个网络你的计算和我想要的差了多少。这个过程有点像猜数字游戏,A心里想好一个数,B来猜,B先猜是5,A说小了,那B就会说一个比5大的数。

        神经网络的更新与此相似,但是输出层告诉整个神经网络的是一个精准的误差值,而整个神经网络要调整的是整个权重矩阵的参数,而不是像猜数字那样,只用对一个数字进行增大或减小,具体就是告诉整个矩阵中的每一个数是该变大还是变小,而且由于矩阵是一个整体,你必须要考虑矩阵中的所有数变大变小的程度,而不是说矩阵中的每一个数都增加或减少一个定值。那怎么确定一个矩阵中的每个权重值变大还是变小,又各自改变多少呢?这就是梯度下降要做的事。

        梯度是多元函数微分中的概念,相当于分别求得矩阵中各个变量下降最快的方向,那么,用这个方向乘以一定的步长就可以粗略的作为该次反向传播w权值的更新结果。

        原理如下:我们通过监督值t减去网络给出的输出值得到误差,但我们一般采用均方误差:

        

 

我们改变W矩阵的各个值,目的是为了使损失L最小。

即我们求得W对L的梯度表达式:

 

通过一次误差反向传播,原理与正向传播一致,拿上图的例子说明即:一个1*2误差向量乘上2*3(W的转置)得到1*3向量,按照这样的做法,我们可得到各个层的误差值。(详细的数学推导我另发帖子阐明,对于编程来讲,了解是如何操作的就够了)

        而刚好L可以被y表达出来(第一个式子),且y又可以被如下式子表示,其中f()表示激活函数

 那么由多元微分的传递性可得:

 f '()中的值实际上就是该层节点没有经过激活函数而只有线性求和的值。而t-y表示误差,xi是上一层的输入。有了梯度,这样我们就知道W矩阵中的每个值该如何修改了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全连接神经网络反向传播算法是一种用于训练神经网络算法。它是一种基于梯度下降的优化算法,通过计算代价函数的梯度来更新神经网络的权重和偏置。 下面是全连接神经网络反向传播算法的详细步骤: 1. 前向传播:将输入数据送入神经网络进行前向传播,得到输出结果。 2. 计算代价函数:计算输出结果与实际结果之间的代价函数,通常使用平方误差函数。 3. 反向传播:计算代价函数对权重和偏置的梯度,通过链式法则计算每一层的梯度值。 4. 更新权重和偏置:根据梯度下降算法的原理,更新每一层的权重和偏置。 下面是一个全连接神经网络反向传播算法的实例: 假设我们有一个三层的全连接神经网络,输入层有 2 个神经元,隐藏层有 3 个神经元,输出层有 1 个神经元。我们使用 sigmoid 函数作为激活函数,使用平方误差函数作为代价函数。 1. 前向传播:假设输入数据为 [0.5, 0.8],将其输入到神经网络中进行前向传播,得到输出结果为 0.6。 2. 计算代价函数:假设实际结果为 0.4,计算平方误差代价函数为 (0.6 - 0.4)^2 = 0.04。 3. 反向传播:计算代价函数对权重和偏置的梯度。首先计算输出层的梯度,根据链式法则,代价函数对输出层的输出值的梯度为 2 * (0.6 - 0.4) = 0.4,输出层的梯度为 0.4 * sigmoid'(0.6) = 0.14。然后计算隐藏层的梯度,隐藏层的梯度等于输出层梯度乘以输出层与隐藏层之间的权重矩阵的转置乘以隐藏层的输出值的导数,即 0.14 * W2.T * sigmoid'(0.5, 0.2) = [0.041, 0.035, 0.046]。最后计算输入层的梯度,输入层的梯度等于隐藏层梯度乘以隐藏层与输入层之间的权重矩阵的转置乘以输入层的输出值的导数,即 [0.041, 0.035, 0.046] * W1.T * sigmoid'(0.5, 0.8) = [0.0042, 0.0054]。 4. 更新权重和偏置:根据梯度下降算法的原理,更新每一层的权重和偏置。假设学习率为 0.1,更新公式为: W = W - learning_rate * dW b = b - learning_rate * db 其中,W 表示权重矩阵,b 表示偏置向量,dW 表示权重的梯度,db 表示偏置的梯度。 对于输出层与隐藏层之间的权重矩阵,更新公式为: W2 = W2 - learning_rate * (a1.T * d2) b2 = b2 - learning_rate * d2 其中,a1 表示隐藏层的输出值,d2 表示输出层的梯度。 对于隐藏层与输入层之间的权重矩阵,更新公式为: W1 = W1 - learning_rate * (x.T * d1) b1 = b1 - learning_rate * d1 其中,x 表示输入数据,d1 表示隐藏层的梯度。 以上就是全连接神经网络反向传播算法详解以及实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值