神经网络的数学——一个完整的例子

embedded/2024/12/3 0:51:48/

神经网络是一种人工智能方法,它教导计算机以类似于人脑的方式处理数据。神经网络通过输入多个数据实例、预测输出、找出实际答案与机器答案之间的误差,然后微调权重以减少此误差来进行学习。

虽然神经网络看起来非常复杂,但它实际上是线性代数和多元微积分的巧妙运用。本文旨在全面介绍破坏神经网络的数学原理。

假设和预备知识

神经网络需要对大学水平的微积分和线性代数有扎实的理解。在可汗学院网站上可以找到很好的复习资料(链接在上一句中)。本例中必不可少的算法是梯度下降,本视频对此进行了很好的解释。

对于与神经网络更相关的课程,Adam Dhalla 的这个视频仅教您此示例所需的微积分和线性代数的必要领域。

神经网络基础

我们将使用的示例是:

通常,输入层(绿色)是来自数据集的输入变量输出层(红色)是神经网络预测值。在隐藏层和输出层中,对每个节点进行加权和(用s表示),然后应用激活函数(用a表示),根据所需的激活函数对值进行归一化。

将数据从输入端通过网络馈送到输出端的过程称为前向传播。观察前向传播的错误率并将错误反馈回网络以微调神经网络权重的过程称为反向传播。我们在反向传播之前先进行前向传播。

前向传播

注意:在这个例子中,我使用sigmoid函数作为激活函数(激活函数用作将输入映射到一定范围内 - 对于 sigmoid 来说,范围是 (0, 1))。

隐藏层

隐藏层 1:

隐藏层 2:

隐藏层 3:

输出层

输出层 1:

输出层 2:

均方误差 (MSE) 计算

均方误差是预期输出和实际输出之间差异的度量。我们正在寻找较低的 MSE 分数,这表明模型与数据的拟合度更高。我们将使用梯度下降法来降低该值。

反向传播

现在已经计算出预测值,神经网络需要根据预测误差调整其权重。这是通过反向传播完成的。

对于此示例,考虑学习率为 0.1

反向传播背后的一般数学思想是应用链式法则来找到误差函数随权重变化的变化。以权重 7 为例:

所有三个部分方程均可从我们的工作中推导出来。

首先,

第二,

最后,

因此,把这三个术语放在一起,

该公式可以适用于连接隐藏层和输出层的所有权重。

注意:作者通常会使用 delta 来写方程:δ₀₁= (a₀₁−expected₁) × a₀₁ × (1−a₀₁),因此方程可以写成 ∂E₀₁ / ∂w₇ = δ₀₁ × aₕ₁

现在我们得到了误差函数的梯度。

我们想应用梯度下降来获得权重 w₇ 的新值。新的 w₇(我们可以将其符号化为 w₇')可以通过从 w₇ 中减去学习率乘以梯度来获得。

一般来说,对于输出神经元:

输出层

现在,应用示例中的实数来查找 w₇ 到 w₁₂ 的新值

输出层 1:

输出层 2:

隐藏层(衍生)

找到一种方法来优化隐藏层权重具有更大的推导量——本节中的任何内容都与计算无关,因此如果需要,可以随意跳过此部分。

考虑更新 w₁ 的权重——原则上,更新任何权重在围绕偏微分旋转方面都会具有相同风格的公式。

然而这一次,我们离输出神经元更远了——因此,为了找到这个方程右侧各个分量的值,还需要进行更多的“链接”……

对于一阶导数:

在哪里:

现在,由于我们之前已经计算了 δ₀₁ 和 δ₀₂(参见本文输出层部分所做的计算),我们可以将这些增量的值代入方程中。

因此,加权和相对于前一层的神经元的导数本质上就是相应的权重。

现在,用这些值代替部分误差项:

∂aₕ₁ / ∂sₕ₁ 的值只是 S 型函数的导数

∂sₕ₁ / ∂w₁ 的值是前一层神经元的输出(在本例中,由于只有一个隐藏层,所以是输入层神经元)

综上所述:

我希望您能看到这些步骤中发生了什么——可以进行类似的工作过程来找到所有权重的公式(我不会展示)。

但本质上,要找到更新权重的值,首先计算权重输出神经元的增量,然后从增量中减去旧权重,乘以增量,再乘以权重输入神经元的先前值。

如果这很难理解,那么下面的计算可能会帮助您了解数字上发生的情况。

隐藏层(计算)

先前计算的 delta 值:
δ₀₁ = -0.0984
δ₀₂ = 0.1479

隐藏层 1:

隐藏层 2:

隐藏层 3:

完成了!

具有更新权重的神经网络

结束语

以下是 3 层神经网络前向和反向传播的完整示例。

通常,神经网络在多个数据实例上进行训练,也可以进行多次迭代训练(我们称之为时期)。这样做会根据实例逐渐增加/减少权重,直到神经网络针对一组实例进行优化。

这个过程非常费力,而且数学运算量很大——幸好这就是我们用计算机模拟所有这些工作的原因。像PyTorch这样的库抽象了许多数学复杂性,绝对应该用于任何类型的模型训练。

尽管如此,完整的数学演练肯定有助于强化实施该模型时所需的理解。


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

相关文章

软件测试丨Pytest生命周期与数据驱动

Pytest的生命周期概述 Pytest 是一个强大的测试框架,提供了丰富的特性来简化测试执行。它的生命周期包括多个阶段,涉及从准备测试、执行测试到报告结果的完整流程。因此,理解Pytest的生命周期将帮助我们更好地设计和管理测试用例。 开始阶段…

注意http-proxy-middleware要解决跨域问题,想修改origin请求头不要设置changeOrigin=true

在使用http-proxy-middleware的时候,有一个配置是“changeOrigin”,通过名字来看这个字段是用来控制是否修改origin的,但是实际使用下来,你会发现,当设置为true的时候,header中的origin的值并不会修改&…

详解Qt PDF 之 QPdfDocument与 QPdfView 打开与显示pdf

文章目录 使用Qt PDF:QPdfDocument与QPdfView加载与显示PDF文档引言1. QPdfDocument类1.1 QPdfDocument的构造和加载文档1.2 QPdfDocument的主要功能1.3 错误处理和状态管理 2. QPdfView类2.1 QPdfView的构造和文档设置2.2 QPdfView的视图模式2.3 缩放功能2.4 控件的…

008静态路由-特定主机路由

按照如上配置,用192.168.0.1 电脑ping 192.168.1.1 发现能够ping通 用192.168.0.1 电脑ping 192.168.2.1 发现不能ping通 这是因为192.168.0.1 和 192.168.1.1 使用的是同一个路由器R1。 192.168.0.1 和 192.168.2.1 通信需要先经过R1,再经过R2 &#xf…

A02、Java 设计模式优化

1、单例模式 1.1、什么是单例模式 它的核心在于,单例模式可以保证一个类仅创建一个实例,并提供一个访问它的全局访问点。该模式有三个基本要点:一是这个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向…

UNDO LOG日志

目录 undo log的作用 undo log的生成与管理 undo log与事务操作 undo log的配置与优化 undo log结构 整体结构 回滚段(Rollback Segment) undo log段(Undo Log Segment) undo log页(Undo Log Page&#xff09…

Opencv+ROS实现摄像头读取处理画面信息

一、工具 ubuntu18.04 ROSopencv2 编译器:Visual Studio Code 二、原理 图像信息 ROS数据形式:sensor_msgs::Image OpenCV数据形式:cv:Mat 通过cv_bridge()函数进行ROS向opencv转换 cv_bridge是在ROS图像消息和OpenCV图像之间进行转…

使用Hugo和GitHub Pages创建静态网站个人博客

不需要服务器,不需要域名,不需要数据库,可以选择模版,内容为Markdown格式。 Hugo:https://gohugo.io 文档:https://gohugo.io/getting-started/quick-start/ 中文文档:https://www.gohugo.or…