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

news2025/1/13 20:57:01

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

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. 总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决

01 问题复现 在DolphinScheduler中有如下一个Shell任务: current_timestamp() { date "%Y-%m-%d %H:%M:%S" }TIMESTAMP$(current_timestamp) echo $TIMESTAMP sleep 60 在DolphinScheduler将工作流执行策略设置为并行: 定时周期调度设置…

Python学习(三)基础入门(数据类型、变量、条件判断、模式匹配、循环)

目录 一、第一个 Python 程序1.1 命令行模式、Python 交互模式1.2 Python的执行方式1.3 SyntaxError 语法错误1.4 输入和输出 二、Python 基础2.1 Python 语法2.2 数据类型1)Number 数字2)String 字符串3)List 列表4)Tuple 元组5&…

LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型,包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型,支持…

[RabbitMQ] RabbitMQ运维问题

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

MongoDB如何使用

1.简单介绍 MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最 像关系型数据库(MySQL)的非关系型数据库。 MongoDB是一个基于分布式文件存储的数据库由C语…

【2024年华为OD机试】(C卷,100分)- 分割均衡字符串 (Java JS PythonC/C++)

一、问题描述 题目描述 均衡串定义:字符串中只包含两种字符,且这两种字符的个数相同。 给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。 约定:字符串中只包含大写的 X 和 Y 两种字符。 输入描述 输入一个均衡串…

React Fiber框架中的Commit提交阶段——commitMutationEffect函数

Render阶段 Render阶段可大致归为beginWork(递)和completeWork(归)两个阶段 1.beginWork流程(递) 建立节点的父子以及兄弟节点关联关系 child return sibling属性给fiber节点打上flag标记(当前节点的flag) …

【STM32-学习笔记-6-】DMA

文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…

IoT平台在设备远程运维中的应用

IoT平台是物联网技术的核心组成部分,实现了设备、数据、应用之间的无缝连接与交互。通过提供统一的设备管理、数据处理、安全监控等功能,IoT平台为企业构建了智能化、可扩展的物联网生态系统。在设备远程运维领域,IoT平台发挥着至关重要的作用…

浅谈云计算05 | 云存储等级及其接口工作原理

一、云存储设备 在当今数字化飞速发展的时代,数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频,到企业运营里的关键业务文档、客户资料,数据量呈爆炸式增长。面对海量的数据,如何安全、高效且便捷地存…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP(Transmission Control Protocol,传输控制协议)是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同,在于TCP是有连接、可靠、面向字节流的。具体来说,TCP设置了一大…

【Linux系列】`find / -name cacert.pem` 文件搜索

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Sign Language Video Retr…

Observability:将 OpenTelemetry 添加到你的 Flask 应用程序

作者:来自 Elastic jessgarson 待办事项列表可以帮助管理与假期计划相关的所有购物和任务。使用 Flask,你可以轻松创建待办事项列表应用程序,并使用 Elastic 作为遥测后端,通过 OpenTelemetry 对其进行监控。 Flask 是一个轻量级…

网站目录权限加固

说明 在一个入侵链路中,往往是利用某个安全漏洞,向服务器写入或上传一个webshell(后门),再通过webshell提权或进行后续渗透入侵行为。 这个过程中,获取webshell是最关键最重要的一个步骤,如能在…

qt QPainter setViewport setWindow viewport window

使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况,以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染(分别对应下方demo1,demo2,demo3)。 setViewpo…

一些计算机零碎知识随写(25年1月)-1

我原以为世界上有技术的那批人不会那么闲,我错了,被脚本真实了。 今天正隔着画画呢,手机突然弹出几条安全告警通知。 急忙打开服务器,发现问题不简单,直接关服务器重装系统..... 首先,不要认为小网站&…

分布式锁Redisson详解,Redisson如何解决不可重入,不可重试,超时释放,主从一致问题的分析解决(包括源码简单分析)

目录 1. Redisson解决不可重入锁导致的死锁问题 2. 不可重试问题 Pub/Sub 的优势 锁释放的发布逻辑 3. 超时释放的问题 1. 锁的超时释放机制背景 2. 源码分析 2.1 锁的获取 2.2 看门狗机制 2.3 看门狗续期实现 2.4 手动设置锁的过期时间 总结 4. 主从一致性 问题…

【微服务】面试 4、限流

微服务限流技术总结 一、微服务业务面试题引入 在微服务业务面试中,限流是重要考点,常与分布式事务、分布式服务接口幂等解决方案、分布式任务调度等一同被考查。面试官一般会询问项目中是否实施限流及具体做法,回答需涵盖限流原因、采用的方…

爬虫基础之爬取歌曲宝歌曲批量下载

声明:本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…