手搓人工智能-最优化算法(1)最速梯度下降法,及推导过程
“Men pass away, but their deeds abide.”
人终有一死,但是他们的业绩将永存。
——奥古斯坦-路易·柯西
目录
前言
简单函数求极值
复杂函数梯度法求极值
泰勒展开
梯度,Nabla算子
Cauchy-Schwarz不等式
梯度下降算法
算法流程
梯度下降法优缺点
前言
在学习和训练过程中,需要根据训练样本来确定一组与分类器模型相关的参数。学习过程往往要首先定义某个准则函数,用以描述参数的“合适性”,然后寻找一组“合适性”最大的参数作为学习的结果,也就是将学习问题转化成针对某个准则函数的优化问题
简单函数求极值
对于简单函数,根据数学分析的知识可知:
维矢量
是
的极值点的必要条件是:
- 将所有的偏导数写成矢量形式:
- 函数
的极值点可以通过求解该矢量方程得到
但是,上述方程的解可能是极大值点,也可能是极小值点,也可能不是极值点,具体情况还需二阶导数来判断。
如果希望求 的极大值或极小值点,可以通过比较所有的极大值或极小值得到。
复杂函数梯度法求极值
对于简单的纯凸函数或纯凹函数,由于只存在唯一的极值点,极值点即为最大值或最小值点,因此可以直接求解矢量方程 得到
的优化解。
对于复杂函数来说,直接求解矢量方程得到优化函数的极值点往往非常困难。在这种情况下,可以考虑采用迭代的方法从某个初始值开始,逐渐逼近极值点,即——梯度法
泰勒展开
- 如果给定了点
具有所有的前
阶导数的函数
,我们称多项式:
为函数
在点
处的
阶泰勒展开式
泰勒公式是高等数学中的一个非常重要的内容,它将一些复杂的函数逼近近似地表示为简单的多项式函数,泰勒公式这种化繁为简的功能,使得它成为分析和研究许多数学问题的有力工具
考虑到多元函数 在点
附近的一阶泰勒展开式:
其中:
为矢量增量
为其第
维元素
为展开式的余项
梯度,Nabla算子
接下来引入梯度的概念
设二元函数
在平面区域
上具有一阶连续偏导数,则对于每一个点
都可以定出一个向量:
称作函数
在点
的梯度,记作
其中:
称为(二维的)向量微分算子或Nabla算子
设
是方向
上的单位向量,则:
当
与梯度方向一致时,有:
此时方向导数
有最大值,值为梯度的模:
我们将其推广到无穷维的情况:
设
维函数
在空间区域
内具有一阶连续偏导数,点
,称向量:
为函数 在点
处的导数,记为
稍微集中一下注意力:
注意到一阶展开式中求和项 ,改写为:
不难发现,该求和式实际上为 关于
的梯度矢量与矢量增量
之间的内积。
同时,令 ,有
,于是有:
如果要求取 的极小值
,可以从某个初始点
开始搜索,每次增加一个增量
,虽然不能保证
直接达到极小值点,但如果能够保证每次迭代过程中函数值逐渐减小:
那么经过一定的迭代次数之后,函数值能够逐渐逼近极小值 ,这是一个逐渐下降的过程,因此称为梯度下降法。
更进一步,如果希望下降过程越快越好,用尽可能少的迭代次数逼近极小值,达到对极小值更高精度的逼近,这种方法称为最速下降法
Cauchy-Schwarz不等式
要使函数值下降的最快,就是要寻找一个矢量增量 使得
最小。
我们引入Cauchy-Schwarz不等式:
其向量形式(欧式空间):
这里不做严谨的证明,且该结论对于大部分人来说非常显然
由于上面我们只展开到一阶近似,当 过大时,余项
便不能忽略,近似的精度会很差。因此不能直接寻找矢量增量,而是应该寻找使得函数值下降的最快的方向,也就是在约束
的条件下,寻找使得
最小的矢量增量。找到最速下降的方向后,在确定该方向上合适的矢量长度
根据柯西不等式:
令
有:
可以得到,当 为负的梯度方向时,不等式等号成立,
取得最小值,函数值下降速度最快。
所以,最速下降法按照以下方式进行迭代:
其中 一般被称为“学习率” ,用于控制矢量的长度。如果是要寻找极大值,则
应当沿梯度正方向。
梯度下降算法
因为代码求梯度非常困难
,博主手搓不出来,这里只给算法流程
算法流程
- 初始化:
- 循环,直到
![]()
- 计算当前点的梯度矢量:
- 更新优化解:
- 输出优化解
参数 为收敛精度,值越小,输出解越接近极小值点,同时迭代次数越多。
梯度下降法优缺点
优点:
- 算法简单,只要知道任意一点的梯度矢量就能进行迭代优化
- 在学习率合适的情况下,算法能很好的收敛到极小值点
缺点:
- 对于梯度值较小的区域,收敛速度很慢
- 收敛性依赖于学习率的设置,与初始值选择无关,但目前对于某个具体问题来说,还没有能够直接确定学习率的方法
- 梯度下降只能保证收敛于一个极值点,无法一次计算出所有的极值点,具体收敛到哪个极值点依赖于初始值的设置
- 梯度下降不能保证求得的极小值是全局最小值
参考文献
【1】模式识别 - 刘家锋
【2】数学分析(一)- 崔国辉
相关文章:
手搓人工智能-最优化算法(1)最速梯度下降法,及推导过程
“Men pass away, but their deeds abide.” 人终有一死,但是他们的业绩将永存。 ——奥古斯坦-路易柯西 目录 前言 简单函数求极值 复杂函数梯度法求极值 泰勒展开 梯度,Nabla算子 Cauchy-Schwarz不等式 梯度下降算法 算法流程 梯度下降法…...

多目标优化算法——多目标粒子群优化算法(MOPSO)
Handling Multiple Objectives With Particle Swarm Optimization(多目标粒子群优化算法) 一、摘要: 本文提出了一种将帕累托优势引入粒子群优化算法的方法,使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展…...

Swift——自动引用计数ARC
ARC ARC是swift使用的一种管理应用程序内存的机制,对于C语言我们知道,当我们申请一块空间,通常需要手动释放,不然会造成空间浪费,而有了ARC机制,你无需考虑内存的管理,因为ARC会在类的实例不再…...
【Quarkus】基于CDI和拦截器实现AOP功能(进阶版)
Quarkus 基于CDI和拦截器实现AOP功能(进阶版) 拦截器的属性成员拦截器的重复使用基于属性成员和重复使用的拦截器的发消息案例 本节来了解一下拦截器高级特性(拦截器的重复使用和属性成员),官网说明:https:…...
【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决
前言 在日常开发和运维中,为了提高服务器登录的安全性,我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而,在配置 SSH 公钥登录的过程中,可能会遇到各种坑和 Bug。本文将从零开始,手把手教你如何在 Ubuntu…...

insmod一个ko提供基础函数供后insmod的ko使用的方法
一、背景 在内核模块开发时,多个不同的内核模块,有时候可能需要都共用一些公共的函数,比如申请一些平台性的公共资源。但是,这些公共的函数又不方便去加入到内核镜像里,这时候就需要把这些各个内核模块需要用到的一些…...

七、传统循环神经网络(RNN)
传统循环神经网络 RNN 前言一、RNN 是什么?1.1 RNN 的结构1.2 结构举例 二、RNN 模型的分类2.1 按照 输入跟输出 的结构分类2.2 按照 内部结构 分类 三、传统 RNN 模型3.1 RNN内部结构图3.2 内部计算公式3.3 其中 tanh 激活函数的作用3.4 传统RNN优缺点 四、代码演示…...

LeetCode:19.删除链表倒数第N个节点
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:19.删除链表倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表…...

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】
文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…...

单片机学习笔记 11. 外部中断
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

基于stm32的智能教室管理系统/智能家居系统
基于stm32的智能教室管理系统/智能家居系统 持续更新,欢迎关注!!! ** 基于stm32的智能教室管理系统/智能家居系统 ** 目前,物联网已广泛应用在我们的生活中。智慧校园是将校园中的生活、学习、工作等相关的资源联系在一起,实现管理的智能化…...
基于 Qt 和 GStreamer 的环境中构建播放器
一、功能与需求分析 功能描述 播放本地视频文件(如 MP4、MKV)。 支持基本控制功能(播放、暂停、停止、跳转)。 提供音量调节功能。 在 Windows 环境下使用 Visual Studio 2022 编译。 技术选型 Qt:用于构建用户界面。 GStreamer:负责视频解码和播放。 Visual Studio 202…...
windows docker 入门
这个教程将指导你如何安装Docker、运行第一个容器以及理解一些基本概念。 第一步:安装Docker Desktop for Windows 系统要求: Windows 10 64位版本(专业版、企业版或教育版)。启用Hyper-V和Windows Subsystem for Linux (WSL 2)。…...
baomidou Mabatis plus引入异常
1 主要异常信息 Error creating bean with name dataSource 但是有个重要提示 dynamic-datasource Please check the setting of primary 解决方法: <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring…...
深度学习中的正则化模型是什么意思?
一、定义 在深度学习中,正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现非常好,但在新的、未见过的数据(测试数据)上表现很差的情况。正则化模型就是通过在损失函数中添加额外的项来约束模型的复杂度…...

修改IDEA配置导致Spring Boot项目读取application.properties中文乱码问题
之前很多配置都是放在nacos里面,然后这次同事有个配置写在application.properties中,这个配置含有中文,启动之后发现拿到的中文值会乱码,然后就帮忙看了一下问题。 排查问题 经过不停的百度、排查发现,spring读取app…...
Flink 热存储维表 使用 Guava Cache 减轻访问压力
目录 背景 Guava Cache 简介 实现方案 1. 项目依赖 2. Guava Cache 集成到 Flink (1) 定义 Cache (2) 使用 Cache 优化维表查询 3. 应用运行效果 (1) 维表查询逻辑优化 (2) 减少存储压力 Guava Cache 配置优化 总结 背景 在实时计算场景中,Flink 应用中…...
深入探索SenseVoiceSmall:高效多语言语音识别与处理模型
引言 随着人工智能技术的飞速发展,语音识别技术已经广泛应用于智能助手、客户服务、智能家居等多个领域。然而,现有的语音识别模型往往存在资源消耗大、多语言支持不足等问题。今天,我们要介绍的是来自ModelScope平台的SenseVoiceSmall模型&…...

Flink--API 之Transformation-转换算子的使用解析
目录 一、常用转换算子详解 (一)map 算子 (二)flatMap 算子 (三)filter 算子 (四)keyBy 算子 元组类型 POJO (五)reduce 算子 二、合并与连接操作 …...
每日十题八股-2024年11月27日
1.类型互转会出现什么问题吗? 2.为什么用bigDecimal 不用double ? 3.装箱和拆箱是什么? 4.Java为什么要有Integer? 5.Integer相比int有什么优点? 6.那为什么还要保留int类型? 7.说一下 integer的缓存 8.怎么…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...