当前位置: 首页 > news >正文

【学习笔记】理解深度学习和机器学习的数学基础:数值计算

深度学习作为人工智能领域的一个重要分支,其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色,它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战,以及如何应对这些挑战。

1. 数值计算的基本挑战

在数字计算机上进行连续数学计算时,我们面临的一个基本问题是需要用有限的比特模式来表示无限多的实数。这意味着几乎所有实数在计算机中的表示都会产生一些近似误差,即舍入误差。舍入误差在多个操作中累积时可能会导致理论上的算法在实践中失败。

2. 溢出和下溢

  • 下溢:当接近零的数被舍入为零时发生。许多函数在参数为零时的行为与小正数时的行为有显著不同。例如,除以零或取零的对数都会导致问题。
  • 溢出:当大数值被近似为无穷大或负无穷大时发生。进一步的算术运算通常会将这些无穷大值转换为非数值。

解决方案:在深度学习中,softmax函数是一个非常重要的数学工具,特别是在处理多分类问题时。

1.1 Softmax函数的定义

softmax函数通常用于将一个实数向量转换为概率分布。具体来说,对于一个输入向量x=[x_{1},x_{2},...,x_{n}],softmax函数的输出是一个概率向量 y=[y_{1},y_{2},...,y_{n}]其中每个元素 y_{i} 表示输入x_{i} 对应类别的概率。softmax函数的数学定义如下:

softmax(x _{i})= \frac{exp(x_{i})}{\sum_{j=1}^{n}exp(x_{j})}

这里,exp(x)表示自然指数函数 e^{x}

1.2. Softmax函数的作用

softmax函数的主要作用是将输入向量转换为概率分布,使得输出值在0到1之间,并且所有输出值的和为1。这使得softmax函数特别适合用于多分类问题中的最后一层,因为它的输出可以直接解释为每个类别的概率。

例如,假设我们有一个输入向量x=[1,2,3],通过softmax函数转换后,输出向量y将表示每个类别的概率:

y=[\frac{exp(1)}{exp(1)+exp(2)+exp(3)},\frac{exp(2)}{exp(1)+exp(2)+exp(3)},\frac{exp(3)}{exp(1)+exp(2)+exp(3)}]

计算结果为:

y=[0.090,0.245,0.665]

这表示输入向量 x=[1,2,3] 对应的三个类别的概率分别为0.090、0.245和0.665。

1.3. Softmax函数的数值稳定性

在实际应用中,softmax函数可能会遇到数值稳定性问题,特别是当输入值的范围很大时。具体来说,当输入值 x_{i}非常大或非常小时,指数函数exp(x_{i})可能会导致溢出或下溢。

为了解决这个问题,我们通常会对输入向量进行预处理,减去输入向量的最大值。这样可以确保指数函数的输入值不会过大,从而避免溢出问题。具体来说,我们计算:

softmax(z_{i})= \frac{exp(z_{i})}{\sum_{j=1}^{n}exp(z_{j})}

其中,z=x-max(x)

例如,对于输入向量 x=[1000,1001,1002],直接计算softmax可能会导致溢出。通过减去最大值,我们得到:

z=[1000-1002,1001-1002,1002-1002]=[-2,-1,0]

然后计算softmax:

y=[\frac{exp(-2)}{exp(-2)+exp(-1)+exp(0)},\frac{exp(-1)}{exp(-2)+exp(-1)+exp(0)},\frac{exp(0)}{exp(-2)+exp(-1)+exp(0)}]

计算结果为:

y=[0.090,0.245,0.665]

这样,我们成功避免了数值稳定性问题。

1.4. Softmax函数在深度学习中的应用

softmax函数在深度学习中广泛应用于多分类问题。具体来说,它通常用于神经网络的最后一层,将神经网络的输出转换为概率分布。这样,我们可以直接将输出解释为每个类别的概率,并使用这些概率进行分类决策。

例如,在图像分类任务中,假设我们有一个神经网络,其最后一层的输出是一个10维向量,表示10个类别的得分。通过softmax函数,我们可以将这些得分转换为概率,从而确定输入图像最可能属于的类别。

softmax函数是深度学习中一个非常重要的工具,它将输入向量转换为概率分布,特别适合用于多分类问题。通过理解softmax函数的定义、作用和数值稳定性问题,我们可以更有效地应用它来解决实际问题。希望本文能帮助你更好地理解softmax函数,为进一步学习和研究打下坚实的基础。

3. 条件数问题

在深度学习中,条件数问题是一个重要的数值稳定性问题,它影响着算法的收敛速度和解的质量。条件数衡量的是函数相对于输入的小变化而快速变化的程度。条件数大的矩阵在乘以真实矩阵逆时会放大预存在的误差。这使得在实践中,误差会被数值逆过程中的误差进一步放大。

3.1. 条件数的定义

条件数是衡量矩阵在求逆或解线性方程组时对输入误差的敏感程度的指标。具体来说,对于一个矩阵 A,其条件数定义为:

k(A)=\left \| A \right \|*\left \| A^{-1} \right \|

其中,\left \| A \right \| 表示矩阵 A的范数,\left \| A^{-1} \right \|表示其逆矩阵的范数。条件数越大,矩阵越接近奇异(不可逆),求解线性方程组或求逆时的数值稳定性越差。

3.2. 条件数的影响

条件数大的矩阵在数值计算中会导致以下问题:

  • 数值不稳定性:小的输入误差可能会导致大的输出误差。
  • 求解线性方程组困难:使用迭代方法求解线性方程组时,条件数大的矩阵需要更多的迭代次数才能收敛。
  • 求逆矩阵困难:直接求逆矩阵时,条件数大的矩阵可能会导致数值不稳定,甚至无法求逆。

3.3. 解决方法

为了解决条件数问题,可以采取以下方法:

  • 预处理:对矩阵进行预处理,如使用对角线缩放或Cholesky分解,以减小条件数。
  • 正则化:在矩阵中添加一个小的正则项,如 A +\lambda I,其中 \lambda是一个小的正数,I是单位矩阵。这可以增加矩阵的对角线元素,从而减小条件数。
  • 使用数值稳定的算法:选择数值稳定的算法,如使用QR分解或SVD分解来求解线性方程组或求逆矩阵。

4. 基于梯度的优化

在深度学习中,基于梯度的优化方法是训练神经网络的核心技术。这些方法通过计算目标函数的梯度来指导参数的更新,从而最小化或最大化目标函数。本文将详细介绍基于梯度的优化方法的基本原理、常见算法以及它们在深度学习中的应用。

关键概念

  • 梯度:对于多变量函数,梯度是包含所有偏导数的向量。
  • 学习率:确定步长的正标量,可以是小常数,也可以通过线搜索确定。

4.1. 梯度的基本概念

梯度是一个多变量函数的偏导数向量,它指出了函数在某一点处增长最快的方向。对于一个函数 f(x),其中 x=[x_{1},x_{2},...,x_{n}],其梯度 \nabla f(x)定义为:

\nabla f(x)=[\frac{\partial f }{\partial x_{1}},\frac{\partial f }{\partial x_{2}},...,\frac{\partial f }{\partial x_{n}}]

4.2. 梯度下降算法

梯度下降是最基本的基于梯度的优化算法,用于最小化目标函数。其基本思想是:在每一步中,沿着梯度的反方向更新参数,因为梯度的反方向是函数值减少最快的方向。

算法步骤

  1. 初始化参数x
  2. 计算目标函数 f(x) 的梯度 \nabla f(x)
  3. 更新参数: x\leftarrow x-\alpha \nabla f(x),其中 \alpha 是学习率。
  4. 重复步骤2和3,直到收敛。

示例: 假设我们有一个简单的二次函数f(x)=x^{2},初始参数 x=10,学习率\alpha =0.1。梯度下降的更新过程如下:

  1. 初始参数:x=10
  2. 计算梯度:\nabla f(x)=2x=20
  3. 更新参数: x\leftarrow 10-0.1*20 = 8
  4. 重复上述步骤,直到 x 收敛到0。

4.3. 梯度下降的变体

为了提高梯度下降的效率和稳定性,研究人员提出了多种变体:

  • 批量梯度下降(Batch Gradient Descent):使用整个训练集计算梯度,每次更新参数时使用全局信息,收敛稳定但计算成本高。
  • 随机梯度下降(Stochastic Gradient Descent, SGD):每次只使用一个样本计算梯度,更新速度快但收敛过程可能较不稳定。
  • 小批量梯度下降(Mini-batch Gradient Descent):每次使用一个小批量的样本计算梯度,结合了批量梯度下降和随机梯度下降的优点,是实际应用中最常用的方法。

4.4 超越梯度:雅可比矩阵和海森矩阵

在深度学习和优化算法中,雅可比矩阵和海森矩阵是两个重要的数学工具,它们分别描述了函数的一阶和二阶导数信息。这些矩阵在牛顿法等二阶优化算法中起着关键作用。

4.4.1. 雅可比矩阵

雅可比矩阵是当输入和输出都是向量时,所有偏导数构成的矩阵。具体来说,对于一个函数

f:\mathbb{R}^{n}\rightarrow \mathbb{R}^{m},其雅可比矩阵 J定义为:

4.4.2. 海森矩阵

海森矩阵是二阶导数构成的矩阵,用于衡量函数的曲率。具体来说,对于一个函数 f:\mathbb{R}^{n}\rightarrow \mathbb{R}^{m},其海森矩阵 H定义为:

海森矩阵的对角线元素表示每个输入分量的二阶导数,非对角线元素表示不同输入分量之间的混合偏导数。海森矩阵的特征值决定了函数在不同方向上的曲率,最大特征值对应最大曲率,最小特征值对应最小曲率。

4.4.3. 牛顿法

牛顿法是一种利用海森矩阵信息来指导搜索的二阶优化算法。其基本思想是通过二阶泰勒级数展开来近似函数,并求解临界点。具体来说,对于一个函数 f(x),其二阶泰勒级数展开为:

f(x+h) = f(x)+\nabla f(x)\top h+\frac{1}{2}h\top H(x)h

其中,h 是搜索方向,\nabla f(x) 是梯度,H(x) 是海森矩阵。为了找到临界点,我们需要求解:

\nabla f(x) + H(x)h = 0

h= H(x)^{-1}\nabla f(x)

因此,牛顿法的更新公式为:

x\leftarrow x-H(x)^{-1}\nabla f(x)

雅可比矩阵和海森矩阵是描述函数一阶和二阶导数信息的重要工具。它们在牛顿法等二阶优化算法中起着关键作用,通过提供函数的曲率信息来指导参数更新。理解雅可比矩阵和海森矩阵的概念和应用,可以帮助我们更有效地设计和优化深度学习模型。

5. 约束优化

在某些情况下,我们需要在参数满足特定约束的条件下优化目标函数。这称为约束优化问题。常见的约束优化方法包括:

  • 拉格朗日乘数法(Lagrange Multipliers):通过引入拉格朗日乘数,将约束优化问题转化为无约束优化问题。其基本思想是构造广义拉格朗日函数:

\pounds (x,\lambda ) = f(x)+ \sum_{i=1}^{m}\lambda _{i}g_{i}(x)

  • KKT条件(Karush-Kuhn-Tucker Conditions):对于包含不等式约束的优化问题,KKT条件是必要条件,有时也是充分条件。KKT条件包括:

    • 梯度条件:广义拉格朗日函数的梯度为零。
    • 约束条件:所有约束条件满足。
    • 互补松弛条件:不等式约束的乘数与约束值的乘积为零。

6. 实例:线性最小二乘

考虑线性最小二乘问题:

min\frac{1}{2}\left \| A(x)-b \right \|^{_{2}}_{2}

其中,A 是一个 m\times n 的矩阵,b 是一个 m 维向量。如果 A 的条件数很大,直接求解这个问题可能会导致数值不稳定。为了解决这个问题,可以使用正则化方法:

min\frac{1}{2}\left \| A(x)-b \right \|^{_{2}}_{2}+\frac{\lambda }{2}\left \| x \right \|^{2}_{2}

其中,\lambda 是一个小的正数。这可以增加 x的范数,从而减小条件数,提高数值稳定性。

牛顿法

  1. 利用二阶泰勒级数展开。
  2. 一步到位找到全局最小值。

7. 总结

数值计算在深度学习中至关重要,但同时也充满挑战。通过理解和应用上述概念和方法,我们可以更有效地实现和优化深度学习算法。这些方法不仅帮助我们解决实际问题,还为深入研究和创新提供了基础。

本文能帮助你更好地理解深度学习中的数值计算,为进一步学习和研究打下坚实的基础。

相关文章:

【学习笔记】理解深度学习和机器学习的数学基础:数值计算

深度学习作为人工智能领域的一个重要分支,其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色,它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战,以及如何应对…...

如何使用CSS让页面文本两行显示,超出省略号表示

talk is cheap, show me the code 举个栗子&#xff0c;如下&#xff1a; <span class"a">我说说<b class"b">打瞌睡党风建设打火机</b>说说色儿</span>a{display:block/inline-block;width:100px;overflow: hidden; white-spac…...

likeshop同城跑腿系统likeshop回收租赁系统likeshop多商户商城安装及小程序对接方法

前言&#xff1a;首先likeshop是一个开发平台&#xff0c;是一个独创的平台就像TP内核平台一样&#xff0c;你可以在这个平台上开发和衍生出很多伟大的产品&#xff0c;以likeshop为例&#xff0c;他们开发出商城系统&#xff0c;团购系统&#xff0c;外卖点餐系统&#xff0c;…...

C# 与 Windows API 交互的“秘密武器”:结构体和联合体

一、引言 在 C# 的编程世界里&#xff0c;当我们想要深入挖掘 Windows 系统的底层功能&#xff0c;与 Windows API 打交道时&#xff0c;结构体和联合体就像是两把神奇的钥匙&#x1f511; 它们能够帮助我们精准地操控数据&#xff0c;实现一些高级且强大的功能。就好比搭建一…...

PHP 使用 Redis

PHP 使用 Redis PHP 是一种广泛使用的服务器端编程语言,而 Redis 是一个高性能的键值对存储系统。将 PHP 与 Redis 结合使用,可以为 Web 应用程序提供快速的读写性能和丰富的数据结构。本文将详细介绍如何在 PHP 中使用 Redis,包括安装、连接、基本操作以及一些高级应用。 …...

嵌入式系统Linux实时化(四)Xenomai应用开发测试

1、Xenomai 原生API 任务管理 Xenomai 本身提供的一系列多任务调度机制,主要有以下一些函数: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任务的创建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…...

26个开源Agent开发框架调研总结(2)

根据Markets & Markets的预测&#xff0c;到2030年&#xff0c;AI Agent的市场规模将从2024年的50亿美元激增至470亿美元&#xff0c;年均复合增长率为44.8%。 Gartner预计到2028年&#xff0c;至少15%的日常工作决策将由AI Agent自主完成&#xff0c;AI Agent在企业应用中…...

Element UI与Element Plus:深度剖析

文章目录 前言一、概述二、技术特性三、设计理念四、使用体验五、迁移指南结语 前言 随着前端开发技术的快速发展&#xff0c;Vue.js 生态系统中的组件库也在不断进化。Element UI 和 Element Plus 是两个深受开发者喜爱的 Vue 组件库&#xff0c;它们分别构建于 Vue 2.x 和 V…...

二、BIO、NIO编程与直接内存、零拷贝

一、网络通信 1、什么是socket&#xff1f; Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作 系统提供。客户端连接上一个服务端&#xff0c;就会在客户端中产生一个 socket 接口实例&#xff0c;服务端每接受 一个客户端…...

VSCode 更好用的设置

配置 {"terminal.integrated.fontSize": 15,"security.workspace.trust.untrustedFiles": "open","editor.minimap.enabled": false,"workbench.colorTheme": "Visual Studio 2017 Light - C","gnuGlobal.c…...

【git】-3 github创建远程仓库,上传自己的项目,下载别人的项目

一、如何使用Github 1、创建远程仓库 2、使用github拉取/推送代码 克隆仓库 向远程仓库推送代码-git push 二、上传我们自己的项目到github 方法一&#xff1a;直接上传 方法二&#xff1a;使用git命令 方法三&#xff1a; 将仓库拉取到本地上传 三、下载别人的项目 …...

计算机组成原理(1)

系统概述 计算机硬件基本组成早期冯诺依曼机现代计算机 计算机各部分工作原理主存储器运算器控制器计算机工作过程 此文章的图片资源获取来自于王道考研 计算机硬件基本组成 早期冯诺依曼机 存储程序是指将指令以二进制的形式事先输入到计算机的主存储器&#xff0c;然后按照…...

Openstack网络组件之Neutron

从Nova到Neutron&#xff1a;OpenStack网络架构的演变 在云计算和虚拟化技术迅猛发展的背景下&#xff0c;OpenStack 成为了构建私有云和公有云平台的首选解决方案之一。早期版本中&#xff0c;Nova 项目不仅负责计算资源的管理&#xff0c;还承担了提供基本网络连接的任务。然…...

神州数码交换机和路由器命令总结

神州数码交换机和路由器命令总结 一、神州数码交换机命令总结 1. 交换机恢复出厂设置及其基本配置. 1) //进入特权模式 2) del startup.cfg 2. Telnet方式管理交换机. 1) //进入全局配置模式 2) enable password 0 [密码] 3) Line 0 4 4) Password 0 [密码] 5) Login 3. 交换机…...

Spring MVC简单数据绑定

【图书介绍】《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》_springspringmvcmybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)&#xff08;第3版&…...

《SQL ORDER BY》

《SQL ORDER BY》 介绍 SQL(Structured Query Language)是一种用于管理关系数据库管理系统的标准编程语言。ORDER BY语句是SQL中的一个重要部分,它用于对查询结果进行排序。在本篇文章中,我们将详细介绍SQL ORDER BY语句的用法、语法、示例以及一些高级应用。 语法 ORD…...

RabbitMQ基础(简单易懂)

RabbitMQ高级篇请看&#xff1a; RabbitMQ高级篇-CSDN博客 目录 什么是RabbitMQ&#xff1f; MQ 的核心概念 1. RabbitMQ 的核心组件 2. Exchange 的类型 3. 数据流向说明 如何安装RabbitQueue&#xff1f; WorkQueue&#xff08;工作队列&#xff09;&#xff1a; Fa…...

DNS解析域名简记

域名通常是由: 权威域名.顶级域名.根域名组成的。 从左往右&#xff0c;级别依次升高&#xff0c;这和外国人从小范围到大范围的说话习惯相关。&#xff08;我们自己是更习惯先说大范围再说小范围&#xff0c;如XX省XX市XX区XX路&#xff09; DNS解析域名时&#xff0c;会先查…...

【2024年华为OD机试】(B卷,100分)- 求最小步数 (Java JS PythonC/C++)

一、问题描述 题目描述 求从坐标零点到坐标点 n 的最小步数&#xff0c;一次只能沿横坐标轴向左或向右移动 2 或 3。 注意&#xff1a;途径的坐标点可以为负数。 输入描述 坐标点 n 输出描述 输出从坐标零点移动到坐标点 n 的最小步数。 备注 1 < n < 10^9 用例…...

<C++> XlsxWriter写EXCEL

XlsxWriter XlsxWriter是一个用于创建和写入Excel 2007及以上版本&#xff08;.xlsx文件格式&#xff09;的C库。以下是对XlsxWriter的详细介绍&#xff1a; 主要功能 文本、数字和公式写入&#xff1a;可以向多个工作表中写入文本、数字和公式。格式设置&#xff1a;支持丰…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...