反向传播算法:定义,概念,可视化(一)

简介: 反向传播算法:定义,概念,可视化

定义

向前传播

通常,当我们使用神经网络时,我们输入某个向量x,然后网络产生一个输出y,这个输入向量通过每一层隐含层,直到输出层。这个方向的流动叫做正向传播。

在训练阶段,输入最后可以计算出一个代价标量J(θ)。

反向传播算法

然后,代价通过反向算法返回到网络中,调整权重并计算梯度。未完待续……

分析

可能是你们在学校里做过用代数的方法来分析反向传播。对于普通函数,这很简单。但当解析法很困难时,我们通常尝试数值微分。

数值微分

由于代数操作很困难,在数值方法中,我们通常使用计算量大的方法,因此经常需要用到计算机。一般有两种方法,一种是利用近邻点,另一种是利用曲线拟合。

随机梯度下降法

负责“学习”的算法。它使用了由反向传播算法产生的梯度。

反向传播算法

然后,反向传播算法返回到网络中,调整权重来计算梯度。一般来说,反向传播算法不仅仅适用于多层感知器。它是一个通用的数值微分算法,可以用来找到任何函数的导数,只要给定函数是可微的。

该算法最重要的特点之一是,它使用了一个相对简单和廉价的程序来计算微分,提高效率。

如何计算一个代价函数的梯度

给定一个函数f,我们想要找到梯度:

640.png

x是一组我们需要它的导数的变量,y是额外的变量,我们不需要它的导数。

为了使网络继续学习,我们想要找到代价函数的梯度。

损失函数

这个函数通常应用于一个数据点,寻找预测点和实际点之间的距离。大多数情况下,这是距离的平方损失。

640.png

代价函数

这个函数是所有损失函数的组合,它不总是一个和。但有时是平均值或加权平均值。例如:

640.png

如何计算一个代价函数的梯度

给定一个函数f,我们想要找到梯度:

640.png

x是一组我们需要它的导数的变量,y是额外的变量,我们不需要它的导数。

为了网络的学习,我们想要找到代价函数的梯度。

640.png

微积分链式法则

假设x是实数,f和g都是实数到实数的映射函数。此外,

640.png

640.png


根据链式法则,

640.png

多变量链式法则

已知x和y是不同维数的向量,

640.png

g和f也是从一个维度映射到另一个维度的函数,

640.png

640.png

或者说,

640.png

∂y /∂x是g的n×m雅可比矩阵。

梯度

而导数或微分是沿一个轴的变化率。梯度是一个函数沿多个轴的斜率矢量。

雅可比矩阵

有时我们需要找出输入和输出都是向量的函数的所有偏导数。包含所有这些偏导数的矩阵就是雅可比矩阵。

有函数

640.png

雅可比矩阵J为:

640.png

640.png

张量的链式法则

我们大部分时间都在处理高维数据,例如图像和视频。所以我们需要将链式法则扩展到张量。

想象一个三维张量,

640.png

z值对这个张量的梯度是,

640.png

对于这个张量, iᵗʰ 指数给出一个向量,

640.png

所以考虑到这一点,

640.png

张量的链式法则是,

640.png

概念

计算图

640.png

这是一个关于直线方程的计算图的例子。开始节点是你将在方程中看到的,为了计算图的方便,总是需要为中间节点定义额外的变量,在这个例子中是节点u。节点“u”等价于“mx”。

我们引入这个概念来说明复杂的计算流程的支撑算法。

640.png

还记得之前,当我们把损失函数定义为差的平方,这就是我们在计算图的最后一层使用的。其中y是实际值a是预测值。

640.png

请注意,我们的损失值严重依赖于最后的激活值,而最后的激活值又依赖于前一个激活值,再依赖于前一个激活值,以此类推。

在神经网络的前进过程中,我们最终得到一个预测值a。在训练阶段,我们有一个额外的信息,这就是网络应该得到的实际结果,y。我们的损失函数就是这些值之间的距离。当我们想要最小化这个距离时,我们首先要更新最后一层的权重。但这最后一层依赖于它的前一层,因此我们更新它们。所以从这个意义上说,我们是在向后传递神经网络并更新每一层。

敏感性改变

当x的一个小变化导致函数f的一个大变化时,我们说函数对x非常敏感如果x的一个小变化导致f的一个小变化,我们说它不是很敏感。

例如,一种药物的有效性可用f来衡量,而x是所使用的剂量。灵敏度表示为:

640.png

为了进一步扩展,我们假设现在的函数是多变量的。

640.png

函数f可以对每个输入有不同的敏感度。举个例子,也许仅仅进行数量分析是不够的,所以我们把药物分解成3种活性成分,然后考虑每种成分的剂量。

640.png

最后一点扩展,如果其中一个输入值,比如x也依赖于它自己的输入。我们可以用链式法则来找出敏感性。同样的例子,也许x被分解成它在身体里的组成部分,所以我们也要考虑这个。

640.png

我们考虑x的组成,以及它的成分如何影响药物的整体效果。

640.png

在这里,我们测量的是整个药物的效果对药物中这个小成分的敏感度。

一个简单的模型

640.png

这个计算图考虑了节点a和它前面的节点a '之间的连接。

640.png

用链式法则,

640.png

它测量了a对u的微小变化有多敏感。然后我们继续前面的3次计算,

640.png

目录
相关文章
|
1月前
|
存储 算法
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
这篇文章详细介绍了图的概念、表示方式以及深度优先遍历和广度优先遍历的算法实现。
52 1
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
140 2
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
156 1
|
5月前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
51 0
|
1月前
|
人工智能 算法 前端开发
无界批发零售定义及无界AI算法,打破传统壁垒,累积数据流量
“无界批发与零售”是一种结合了批发与零售的商业模式,通过后端逻辑、数据库设计和前端用户界面实现。该模式支持用户注册、登录、商品管理、订单处理、批发与零售功能,并根据用户行为计算信用等级,确保交易安全与高效。
|
1月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
14 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习还不如浅层网络?RL教父Sutton持续反向传播算法登Nature
【9月更文挑战第24天】近年来,深度学习在人工智能领域取得巨大成功,但在连续学习任务中面临“损失可塑性”问题,尤其在深度强化学习中更为突出。加拿大阿尔伯塔大学的研究人员提出了一种名为“持续反向传播”的算法,通过选择性地重新初始化网络中的低效用单元,保持模型的可塑性。该算法通过评估每个连接和权重的贡献效用来决定是否重新初始化隐藏单元,并引入成熟度阈值保护新单元。实验表明,该算法能显著提升连续学习任务的表现,尤其在深度强化学习领域效果明显。然而,算法也存在计算复杂性和成熟度阈值设置等问题。
62 2
WK
|
2月前
|
机器学习/深度学习 监控 算法
反向传播算法是如何工作的
反向传播算法通过最小化损失函数优化神经网络。首先,输入数据经由前向传播得到预测结果,并计算损失;接着,反向传播计算各参数的梯度,并利用梯度下降法更新权重和偏置。这一过程反复进行,直至满足停止条件。算法具备高效性、灵活性及可扩展性,能处理复杂模式识别与预测任务,适用于不同类型与规模的神经网络,显著提升了模型的预测准确性和泛化能力。
WK
51 3
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
40 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法