IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 神经网络之误差反向传播算法推导 -> 正文阅读

[人工智能]神经网络之误差反向传播算法推导

原理

误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的。而权重和偏置的调整一般使用梯度下降法。

推导前的准备

本文误差反向传播算法的推导以包含隐藏层的多层感知器为例,结构如下图所示:

在这里插入图片描述

这里,图中和推导过程中涉及的符号代表的含义分别为:

符号含义
x i x_i xi?输入值
a j a_j aj?隐藏层激活值
y k y_k yk?实际输出值
r k r_k rk?期望输出值
w 1 i j w_{1ij} w1ij?网络输入层的第i个神经元和下一层网络第j个神经元之间的连接权重
w 2 j k w_{2jk} w2jk?网络隐藏层的第j个神经元和下一层网络第k个神经元之间的连接权重
b j 2 b_j^2 bj2?网络隐藏层第j个神经元的偏置
b k 3 b_k^3 bk3?网络输出层第k个神经元的偏置
u 1 j u_{1j} u1j?隐藏层第j个神经元的激活函数的加权输入
u 2 k u_{2k} u2k?输出层第k个神经元的激活函数的加权输入
E E E误差函数
η \eta η学习率

这里,误差函数采用最小二乘误差函数,公式如下:
E = ∑ n = 1 N ∣ ∣ r n ? y n ∣ ∣ 2 E=\sum_{n=1}^N||r_n-y_n||^2 E=n=1N?rn??yn?2
激活函数使用sigmoid函数,公式如下:
f ( u ) = 1 1 + e ? u f(u)=\frac{1}{1+e^{-u}} f(u)=1+e?u1?其中,
u = ∑ i = 1 N w i x i + b u=\sum_{i=1}^Nw_ix_i+b u=i=1N?wi?xi?+b

开始推导

首先,再明确一下我们的目的是计算使用梯度下降法时神经网络各层间连接权重和偏差的变化值,即 Δ w 1 i j , Δ w 2 j k , Δ b j 2 \Delta w_{1ij},\Delta w_{2jk},\Delta b_j^2 Δw1ij?,Δw2jk?,Δbj2?等值。
这里,计算过程以求解 Δ w 1 i j \Delta w_{1ij} Δw1ij?为例,其它值类似,而
Δ w 1 i j = η δ E δ w 1 i j \Delta w_{1ij}=\eta\frac{\delta E}{\delta w_{1ij}} Δw1ij?=ηδw1ij?δE?
根据链式求导得:
δ E δ w 1 i j = ∑ k = 1 q ( δ E δ y k δ y k δ u 2 k δ u 2 k δ a j δ a j δ u 1 j δ u 1 j δ w 1 i j ) \frac{\delta E}{\delta w_{1ij}}=\sum_{k=1}^q (\frac{\delta E}{\delta y_k} \frac{\delta y_k}{\delta u_{2k}} \frac{\delta u_{2k}}{\delta a_j} \frac{\delta a_j}{\delta u_{1j}} \frac{\delta u_{1j}}{\delta w_{1ij}}) δw1ij?δE?=k=1q?(δyk?δE?δu2k?δyk??δaj?δu2k??δu1j?δaj??δw1ij?δu1j??)
然后逐个对等式右侧各部分求解得:
δ E δ y k = ? ( r k ? y k ) \frac{\delta E}{\delta y_k}=-(r_k-y_k) δyk?δE?=?(rk??yk?)
δ y k δ u 2 k = f ( u 2 k ) ( 1 ? f ( u 2 k ) ) = y k ( 1 ? y k ) \frac{\delta y_k}{\delta u_{2k}}=f(u_{2k})(1-f(u_{2k}))=y_k(1-y_k) δu2k?δyk??=f(u2k?)(1?f(u2k?))=yk?(1?yk?)
δ u 2 k δ a j = w 2 j k \frac{\delta u_{2k}}{\delta a_j}=w_{2jk} δaj?δu2k??=w2jk?
δ a j δ u 1 j = a j ( 1 ? a j ) \frac{\delta a_j}{\delta u_{1j}}=a_j(1-a_j) δu1j?δaj??=aj?(1?aj?)
δ u 1 j δ w 1 i j = x i \frac{\delta u_{1j}}{\delta w_{1ij}}=x_i δw1ij?δu1j??=xi?
最后得:
δ E δ w 1 i j = ? ∑ k = 1 q [ ( r k ? y k ) y k ( 1 ? y k ) w 2 j k a j ( 1 ? a j ) x i ] \frac{\delta E}{\delta w_{1ij}}=-\sum_{k=1}^q [(r_k-y_k) y_k(1-y_k) w_{2jk} a_j(1-a_j) x_i] δw1ij?δE?=?k=1q?[(rk??yk?)yk?(1?yk?)w2jk?aj?(1?aj?)xi?]
因此,权重 w 1 i j w_{1ij} w1ij?得变化值为:
Δ w 1 i j = η ∑ k = 1 q [ ( r k ? y k ) y k ( 1 ? y k ) w 2 j k a j ( 1 ? a j ) x i ] \Delta w_{1ij}=\eta \sum_{k=1}^q [(r_k-y_k) y_k(1-y_k) w_{2jk} a_j(1-a_j) x_i] Δw1ij?=ηk=1q?[(rk??yk?)yk?(1?yk?)w2jk?aj?(1?aj?)xi?]
根据上述计算过程可以发现,权重的变化值的组成依次为:学习率、误差函数导数、激活函数导数、对应连接权重、激活函数导数和输入值,根据这个规律可以快速写出各层权重和偏差的变化值,例如:
Δ w 2 j k = η ∑ k = 1 q [ ( r k ? y k ) y k ( 1 ? y k ) a j ] \Delta w_{2jk} = \eta \sum_{k=1}^q [(r_k-y_k)y_k(1-y_k)aj] Δw2jk?=ηk=1q?[(rk??yk?)yk?(1?yk?)aj]
Δ b j 2 = η ∑ k = 1 q [ ( r k ? y k ) y k ( 1 ? y k ) w 2 j k a j ( 1 ? a j ) ] \Delta b_j^2 = \eta \sum_{k=1}^q[(r_k-y_k)y_k(1-y_k)w_{2jk}a_j(1-a_j)] Δbj2?=ηk=1q?[(rk??yk?)yk?(1?yk?)w2jk?aj?(1?aj?)]

小结

误差反向传播算法会通过误差函数计算梯度,然后调整权重与偏置,经过反复迭代训练的调整,最终获得最优解。
本文在推导过程中使用的误差函数为最小二乘误差函数,除此以外还有很多其它函数用于计算误差,比如一般多分类问题中使用交叉熵误差函数:
E = ? ∑ c = 1 C ∑ n = 1 N r c n l n y c n E=-\sum_{c=1}^C \sum_{n=1}^N r_{cn}lny_{cn} E=?c=1C?n=1N?rcn?lnycn?
二分类中的常用的误差函数为:
E = ? ∑ n = 1 N [ r n l n y n + ( 1 ? r n ) l n ( 1 ? y n ) ] E=-\sum_{n=1}^N [r_nlny_n+(1-r_n)ln(1-y_n)] E=?n=1N?[rn?lnyn?+(1?rn?)ln(1?yn?)]
同时,激活函数除sigmoid外还有tanh、ReLU等函数:
t a n h ( u ) = e x p ( u ) ? e x p ( ? u ) e x p ( u ) + e x p ( ? u ) tanh(u)=\frac{exp(u)-exp(-u)}{exp(u)+exp(-u)} tanh(u)=exp(u)+exp(?u)exp(u)?exp(?u)?
R e L U ( u ) = m a x ( u , 0 ) ReLU(u)=max(u,0) ReLU(u)=max(u,0)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:41:36  更:2021-08-23 16:42:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:44:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码