深度神经网络DNN反向传播BP算法公式推导

embedded/2024/11/19 17:24:35/

深度神经网络DNN反向传播BP算法推导、δ法则

文章目录

  • 前言
  • 一、单个神经元的内部结构
  • 二、前向传播
  • 三、反向传播
  • 总结


前言

\;\;\;\;\; 本文详细推导深度神经网络DNN反向传播BP算法中对权重w和偏置b的更新公式。通过图片和一步步的数学公式推导深刻理解反向传播BP算法δ法则


提示:以下是本篇文章正文内容,转载请附上链接!

一、单个神经元的内部结构

\;\;\;\;\; 神经网络中的神经元是对生物神经元的模拟,它接收来自外部的若干个变量值,为每个变量值赋予不同的权重,对变量进行加权求和,并经过内部激活函数的处理,最终输出激活值。
在这里插入图片描述
首先对输入变量进行加权求和:
z = x 1 ∗ w 1 + x 2 ∗ w 2 + x 3 ∗ w 3 + ⋯ + x n ∗ w n + b = ∑ i = 1 n x i w i + b = x ∗ w + b \begin{aligned}\text{z}&=x_1*w_1+x_2*w_2+x_3*w_3+\cdots+x_n*w_n+b\\&=\sum_{i=1}^nx_iw_i+b\\&=\mathbf{x}*\mathbf{w}+b\end{aligned} z=x1w1+x2w2+x3w3++xnwn+b=i=1nxiwi+b=xw+b
然后将加权求和结果输入到激活函数:
y = f ( z ) = f ( x ∗ w + b ) y=f(z)=f(\mathbf{x}*\mathbf{w}+b) y=f(z)=f(xw+b)
输入 x \mathbf{x} x:神经元的输入变量值,可以理解为上一层神经元的输出结果。
权重 w \mathbf{w} w:每一个输入对应着一个权重,代表着该输入的重要程度,重要程度越高,则权重越大。
偏置b:偏置可以理解为激活该神经元的阈值,当超过阈值时该神经元被激活。
激活函数f:当输入激励达到一定强度,神经元就会被激活,产生输出信号。模拟这一细胞激活过程的函数,就叫激活函数。
输出y:激活函数的输出结果,不同的激活函数有着不同的输出结果。

二、前向传播

先进行相关符号的定义:
w j k l w_{jk}^{l} wjkl:第( l − 1 l-1 l1)层的第 k k k 个神经元连接到第 l l l 层的第 j j j 个神经元的权重
b j l b_j^l bjl:第 l l l 层的第 j j j 个神经元的偏置
z j l z_j^l zjl:第 l l l 层的第 j j j 个神经元的带权输入(上一层的激活值与偏置的加权之和)
a j l a_j^l ajl:第 l l l 层的第 j j j 个神经元的激活值

在这里插入图片描述
第1层神经元的带权输入值为:
[ z 1 ( 1 ) z 2 ( 1 ) ] = [ w 11 ( 1 ) w 12 ( 1 ) w 21 ( 1 ) w 22 ( 1 ) ] [ x 1 x 2 ] + [ b 1 ( 1 ) b 2 ( 1 ) ] = w 1 x + b 1 \begin{bmatrix}z_1^{(1)}\\z_2^{(1)}\end{bmatrix}=\begin{bmatrix}w_{11}^{(1)}&w_{12}^{(1)}\\w_{21}^{(1)}&w_{22}^{(1)}\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}+\left[\begin{array}{c}b_1^{(1)}\\b_2^{(1)}\end{array}\right]=\mathbf{w}_1\mathbf{x}+\mathbf{b}_1 [z1(1)z2(1)]=[w11(1)w21(1)w12(1)w22(1)][x1x2]+[b1(1)b2(1)]=w1x+b1
第1层神经元的激活值为,其中 σ \sigma σ为激活函数:
y 1 = [ a 1 ( 1 ) a 2 ( 1 ) ] = [ σ ( z 1 ( 1 ) ) σ ( z 2 ( 1 ) ) ] \mathbf{y}_1=\left[\begin{array}{c}a_1^{(1)}\\a_2^{(1)}\end{array}\right]=\left[\begin{array}{c}\sigma\Big(z_1^{(1)}\Big)\\\sigma\Big(z_2^{(1)}\Big)\end{array}\right] y1=[a1(1)a2(1)]= σ(z1(1))σ(z2(1))
第2层神经元的带权输入值为:
[ z 1 ( 2 ) z 2 ( 2 ) ] = [ w 11 ( 2 ) w 12 ( 2 ) w 21 ( 2 ) w 22 ( 2 ) ] [ a 1 ( 1 ) a 2 ( 1 ) ] + [ b 1 ( 2 ) b 2 ( 2 ) ] = w 2 y 1 + b 2 \begin{bmatrix}z_1^{(2)}\\z_2^{(2)}\end{bmatrix}=\begin{bmatrix}w_{11}^{(2)}&w_{12}^{(2)}\\w_{21}^{(2)}&w_{22}^{(2)}\end{bmatrix}\left[\begin{array}{c}a_1^{(1)}\\a_2^{(1)}\end{array}\right]+\left[\begin{array}{c}b_1^{(2)}\\b_2^{(2)}\end{array}\right]=\mathbf{w}_2\mathbf{y}_1+\mathbf{b}_2 [z1(2)z2(2)]=[w11(2)w21(2)w12(2)w22(2)][a1(1)a2(1)]+[b1(2)b2(2)]=w2y1+b2
第2层神经元的激活值为:
y = [ y 1 y 2 ] = [ a 1 ( 2 ) a 2 ( 2 ) ] = [ σ ( z 1 ( 2 ) ) σ ( z 2 ( 2 ) ) ] \mathbf{y}=\left[\begin{array}{c}y_1\\y_2\end{array}\right]=\left[\begin{array}{c}a_1^{(2)}\\a_2^{(2)}\end{array}\right]=\left[\begin{array}{c}\sigma\Big(z_1^{(2)}\Big)\\\sigma\Big(z_2^{(2)}\Big)\end{array}\right] y=[y1y2]=[a1(2)a2(2)]= σ(z1(2))σ(z2(2))

三、反向传播

对于每一个样本,拟合误差用如下二次损失函数表示:
C = 1 2 ∑ j ( y j − d j ) 2 = 1 2 ∑ j ( a j ( 2 ) − d j ) 2 \begin{aligned}C&=\frac12\sum_j(y_j-d_j)^2=\frac12\sum_j(a_j^{(2)}-d_j)^2\end{aligned} C=21j(yjdj)2=21j(aj(2)dj)2
其中 j j j 表示第 j j j 个神经元, y j y_j yj 表示输出层第 j j j 个神经元的预测值(激活值), d j d_j dj 表示第 j j j 个神经元的标签。

在这里插入图片描述

第2层神经元的误差为:
e 1 = y 1 − d 1 e 2 = y 2 − d 2 e_{1} = y_{1} - d_{1}\\e_{2} = y_{2} - d_{2} e1=y1d1e2=y2d2
第2层第1个神经元的 δ 1 ( 2 ) \delta_1^{(2)} δ1(2) 为:
δ 1 ( 2 ) = ∂ C ∂ z 1 ( 2 ) = ∂ C ∂ a 1 ( 2 ) ⋅ ∂ a 1 ( 2 ) ∂ z 1 ( 2 ) = 1 2 ∑ j ( a j ( 2 ) − d j ) 2 ∂ a 1 ( 2 ) ⋅ ∂ a 1 ( 2 ) ∂ z 1 ( 2 ) = ( a 1 ( 2 ) − d 1 ) ⋅ ∂ a 1 ( 2 ) ∂ z 1 ( 2 ) = ( y 1 − d 1 ) ⋅ σ ′ ( z 1 ( 2 ) ) = σ ′ ( z 1 ( 2 ) ) ⋅ e 1 \begin{aligned} \delta_1^{(2)}=\frac{\partial C}{\partial z_1^{(2)}} &=\frac{\partial C}{\partial a_1^{(2)}}\cdot\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}} =\frac{\frac12\sum_j(a_j^{(2)}-d_j)^2}{\partial a_1^{(2)}}\cdot\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}} \\ &=\begin{pmatrix}a_1^{(2)}-d_1\end{pmatrix}\cdot\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}} =(y_1-d_1)\cdot\sigma^{\prime}(z_1^{(2)})=\sigma^{\prime}(z_1^{(2)})\cdot e_{1} \end{aligned} δ1(2)=z1(2)C=a1(2)Cz1(2)a1(2)=a1(2)21j(aj(2)dj)2z1(2)a1(2)=(a1(2)d1)z1(2)a1(2)=(y1d1)σ(z1(2))=σ(z1(2))e1
同理,第2层第2个神经元的 δ 2 ( 2 ) \delta_2^{(2)} δ2(2) 为:
δ 2 ( 2 ) = σ ′ ( z 2 ( 2 ) ) ⋅ e 2 \begin{aligned} \delta_2^{(2)}=\sigma^{\prime}(z_2^{(2)})\cdot e_{2} \end{aligned} δ2(2)=σ(z2(2))e2
第2层第1个神经元偏置 b 1 ( 2 ) b_1^{(2)} b1(2) 的偏导数为:
∂ C ∂ b 1 ( 2 ) = ∂ C ∂ z 1 ( 2 ) ⋅ ∂ z 1 ( 2 ) ∂ b 1 ( 2 ) = δ 1 ( 2 ) ⋅ ∂ ( w 11 ( 2 ) a 1 ( 1 ) + w 12 ( 2 ) a 2 ( 1 ) + b 1 ( 2 ) ) ∂ b 1 ( 2 ) = δ 1 ( 2 ) \begin{aligned} \frac{\partial C}{\partial b_1^{(2)}}=\frac{\partial C}{\partial z_1^{(2)}}\cdot\frac{\partial z_1^{(2)}}{\partial b_1^{(2)}} =\delta_1^{(2)}\cdot\frac{\partial\left(w_{11}^{(2)}a_1^{(1)}+w_{12}^{(2)}a_2^{(1)}+b_1^{(2)}\right)}{\partial b_1^{(2)}} =\delta_1^{(2)} \end{aligned} b1(2)C=z1(2)Cb1(2)z1(2)=δ1(2)b1(2)(w11(2)a1(1)+w12(2)a2(1)+b1(2))=δ1(2)
同理: ∂ C ∂ b 2 ( 2 ) = = δ 2 ( 2 ) \begin{aligned} \frac{\partial C}{\partial b_2^{(2)}}= =\delta_2^{(2)} \end{aligned} b2(2)C==δ2(2)
第2层第1个神经元权重 w 11 ( 2 ) w_{11}^{(2)} w11(2) 的偏导数为:
∂ C ∂ w 11 ( 2 ) = ∂ C ∂ z 1 ( 2 ) ⋅ ∂ z 1 ( 2 ) ∂ w 11 ( 2 ) = δ 1 ( 2 ) ⋅ ∂ ( w 11 ( 2 ) a 1 ( 1 ) + w 12 ( 2 ) a 2 ( 1 ) + b 1 ( 2 ) ) ∂ w 11 ( 2 ) = δ 1 ( 2 ) ⋅ a 1 ( 1 ) \begin{aligned} \frac{\partial C}{\partial w_{11}^{(2)}} &=\frac{\partial C}{\partial z_1^{(2)}}\cdot\frac{\partial z_1^{(2)}}{\partial w_{11}^{(2)}}=\delta_{1}^{(2)}\cdot\frac{\partial\left(w_{11}^{(2)}a_1^{(1)}+w_{12}^{(2)}a_2^{(1)}+b_1^{(2)}\right)}{\partial w_{11}^{(2)}}=\delta_1^{(2)}\cdot a_1^{(1)} \end{aligned} w11(2)C=z1(2)Cw11(2)z1(2)=δ1(2)w11(2)(w11(2)a1(1)+w12(2)a2(1)+b1(2))=δ1(2)a1(1)
同理得: ∂ C ∂ w 2 = [ δ 1 ( 2 ) δ 2 ( 2 ) ] y 1 T \begin{aligned} \frac{\partial C}{\partial \mathbf{w}_2} =\left[\begin{array}{c}\delta_1^{(2)}\\\delta_2^{(2)}\end{array}\right] \end{aligned}\mathbf{y}_1^{T} w2C=[δ1(2)δ2(2)]y1T
在这里插入图片描述
[ e 1 ( 1 ) e 2 ( 1 ) ] = [ w 11 ( 2 ) w 21 ( 2 ) w 12 ( 2 ) w 22 ( 2 ) ] [ δ 1 δ 2 ] = w 2 T [ δ 1 δ 2 ] \begin{bmatrix}e_1^{(1)}\\e_2^{(1)}\end{bmatrix}=\begin{bmatrix}w_{11}^{(2)}&w_{21}^{(2)}\\w_{12}^{(2)}&w_{22}^{(2)}\end{bmatrix}\begin{bmatrix}\delta_1\\\delta_2\end{bmatrix}=\mathbf{w}_2^T\begin{bmatrix}\delta_1\\\delta_2\end{bmatrix} [e1(1)e2(1)]=[w11(2)w12(2)w21(2)w22(2)][δ1δ2]=w2T[δ1δ2]
那么可以总结以下公式:
δ j l = ( a j l − d j ) ⋅ σ ′ ( z j l ) ∂ C ∂ b j l = δ j l ∂ C ∂ w j k l = δ j l ⋅ a k l − 1 δ l − 1 = ( ( w l ) T δ l ) ⊙ σ ′ ( z l − 1 ) \begin{aligned} &\delta_j^l=(a_j^l-d_j)\cdot\sigma^{\prime}(z_j^l) \\ &\frac{\partial C}{\partial b_j^l}=\delta_j^l \\ &\frac{\partial C}{\partial w_{jk}^l}=\delta_j^l\cdot a_k^{l-1} \\ &\delta^{l-1}=\left(\left(w^l\right)^T\delta^l\right)\odot\sigma^{\prime}\left(z^{l-1}\right) \end{aligned} δjl=(ajldj)σ(zjl)bjlC=δjlwjklC=δjlakl1δl1=((wl)Tδl)σ(zl1)
然后更新权重和偏置:
w j k l → ( w j k l ) ′ = w j k l − η ∂ C ∂ w j k l b j l → ( b j l ) ′ = b j l − η ∂ C ∂ b j l w_{jk}^l\to\left(w_{jk}^l\right)^{\prime}=w_{jk}^l-\eta\frac{\partial C}{\partial w_{jk}^l}\\b_j^l\to\left(b_j^l\right)^{\prime}=b_j^l-\eta\frac{\partial C}{\partial b_j^l} wjkl(wjkl)=wjklηwjklCbjl(bjl)=bjlηbjlC


总结

\;\;\;\;\; 后面推导的有些跳跃,读者自己多多思考,公式是没有问题的。


http://www.ppmy.cn/embedded/138825.html

相关文章

RPA真的是人工智能吗?

1. RPA与AI的定义与区别 1.1 RPA的定义与特点 机器人流程自动化(Robotic Process Automation,简称RPA)是一种软件技术,它通过模拟人类用户的操作行为来自动执行重复性、基于规则的任务。RPA的核心特点包括: 非侵入性…

利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换

这段代码主要涉及图像处理任务,利用 OpenCV 和 Matplotlib 库进行图像读取、颜色空间转换、掩膜创建、颜色替换等操作。下面是对代码的逐部分解释和归类: 1. 导入库 import cv2 import matplotlib.pyplot as plt import numpy as npcv2: OpenCV库&…

蓝桥杯-洛谷刷题-day4(C++)

目录 1.高精度乘法 i.P1303 A*B Problem高精度乘法 2.P4924 [1007] 魔法少女小Scarlet i.题目 ii.代码 3.二维数组 i.二维数组的建立 ii.备份 iii.二维数组的转动 4.指令的及时处理 1.高精度乘法 即,将每一位变为数组中的一位,并在数组中以倒序排列&a…

Mybatis框架之模板方法模式 (Template Method Pattern)

MyBatis 中也使用到了 模板方法模式 (Template Method Pattern),主要体现在 执行 SQL 语句的流程控制 上。模板方法模式允许 MyBatis 定义数据库操作的标准流程,并允许子类或特定实现类去实现某些步骤。这种模式使得 MyBatis 能够在处理不同类型的 SQL 操…

数据结构——排序(续集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

【C++】哈希表实现

人这辈子最可悲的是道理明白却执迷不悟。最可恨的是爱来爱去但真正在乎的其实是自己。最后悔的是为了世俗错过了本该美好的时光。最遗憾的是很简单的东西却给不了彼此。💓💓💓 目录 •✨说在前面 🍋知识点一:哈希基本…

集群聊天服务器(13)redis环境安装和发布订阅命令

目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的,还可以存链表、数组等等复杂数据结构 而且数据是在…

Spring Data Redis常见操作总结

我列出来的都是最常用的&#xff0c;其他的你要自己去搜搜 1. 列表类型数据 Autowired private RedisTemplate<String ,Object> redisTemplate;public void f1() {String k "key";ListOperations<String, Object> list redisTemplate.opsForList();r…