ML算法——最优化|凸优化随笔【机器学习】【端午节创作】

news2024/11/18 17:47:54

文章目录

  • 数学预备知识
    • 1、最优化问题
    • 2、凸优化
      • 2.1、梯度下降
      • 2.2、牛顿法
      • 2.3、阻尼牛顿法
      • 2.4、拟牛顿法
      • 2.5、总结

数学预备知识

1、最优化问题

最优化问题指的是在给定条件下,找到一个目标函数的最优解,即找到能够使目标函数取得最大值或最小值的变量取值。常用的优化方法包括线性规划、整数规划、动态规划、遗传算法、模拟退火等。最终,通过对最优解的检验和实施,可以实现资源的最优分配或其他最优解决方案。

最优化的基本数学模型:

m i n f ( x ) min f(x) minf(x)

s . t . h i ( x ) = 0 , g j ( x ) ≤ 0 s.t. \quad h_i(x)= 0 ,\quad g_j(x)≤ 0 s.t.hi(x)=0,gj(x)0

  • 设计变量:x 是一个实数域范围内的n维向量,被称为决策变量或问题的解;
  • 目标函数: f(x) 为目标函数;
  • 约束条件: h i ( x ) = 0 , g j ( x ) ≤ 0 \quad h_i(x)= 0 ,\quad g_j(x)≤ 0 hi(x)=0,gj(x)0
  • 数学公式中的s.t.是subject to的缩写,表示约束条件。

超平面和半空间

二维空间的超平面就是一条线(可以是曲线),三维空间下的超平面是一个面(可以是曲面)。

简单来说,超平面是具有一个变量的空间中的直线、平面等概念的推广。半空间是数学中的一个概念,通常指一个空间中,其中一个方向的值被限定为非负数。例如,在三维空间中,一个半空间可以表示为z≥0,其中z表示垂直于x-y平面的方向。数学表达式如下:

超平面: H = { x ∈ R n ∣ a 1 x 1 + a 2 x 2 + . . . + a n x n = b } H = \{x ∈R^n | a_1x_1+a_2x_2+...+a_nx_n=b\} H={xRna1x1+a2x2+...+anxn=b}

半空间: H + = { x ∈ R n ∣ a 1 x 1 + a 2 x 2 + . . . + a n x n ≥ b } H^+ = \{x ∈R^n | a_1x_1+a_2x_2+...+a_nx_n≥b\} H+={xRna1x1+a2x2+...+anxnb}

凸集分离定理

凸集,凸函数,详见 数学预备知识 2.1梯度下降

凸集分离定理是凸集理论中最基本的定理之一,它表明两个不相交的凸集总可以用超平面分离。这个定理在凸优化理论中有重要的应用,因为它提供了将多变量问题转化为多个单变量问题的方法。

如何实现的多变量问题转换为多个单变量问题?

凸集分离定理可以将多变量问题转换为多个单变量问题。具体来说,如果需要将两个不相交的凸集C和D分离,可以通过以下步骤实现:

  1. 找到一个超平面,使得它与C和D的交点分别为x和y,且x和y分别位于超平面的两侧。
  2. 将超平面方程中的多个变量化为单个变量,例如将x1, x2, x3化为x1,将y1, y2, y3化为y1。
  3. 将超平面方程表示为一个关于x1的单变量函数f(x1),使得f(x1) = 0。
  4. 对于每个变量xi,分别求解f(xi) = 0,得到一组单变量方程。
  5. 对于每个单变量方程,求解其根xi,如果xi同时满足C和D的定义域,则将xi代入超平面方程中得到超平面方程中的常数项a。
  6. 将超平面方程中的常数项a表示为多个变量的函数g(x1, x2, …, xn),其中每个变量对应一个单变量方程。
  7. 将超平面方程中的常数项a表示为多个变量的函数g(x1, x2, …, xn)后,可以将其代入原多变量问题中,得到一个新的多变量问题,这个问题的解即为原问题的解。

通过以上步骤,就可以将多变量问题转换为多个单变量问题。这种方法在凸优化理论中有重要的应用,因为它可以将多变量问题转化为多个单变量问题,从而简化问题的求解。

(暂不理解这个步骤2的替换如何实现的)

2、凸优化

2.1、梯度下降

传送门:ML算法—梯度下降随笔

2.2、牛顿法

求解无约束最优化问题,优点是收敛速度快。

牛顿法是一种迭代算法,用于求解方程式的根。其基本思想是利用函数的导数信息,不断迭代以逼近方程的根。

1)比梯度下降快的原因?

微分解释,牛顿法是二阶收敛,梯度下降是一阶收敛,牛顿法在选择方向时,不仅可以考虑坡度是否够大,还可以考虑走了一步后坡度是否会更大,因此能更快地走到最底部。

几何解释,牛顿法就是用一个二次曲面去拟合当前所处位置的局部曲面,梯度下降法使用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合效果会比平面更好。

在这里插入图片描述

2)牛顿法算法过程

牛顿法的推导过程基于以下公式: x k + 1 = x k − α ⋅ f ′ ( x k ) x_{k+1} = x_k - α·f'(x_k) xk+1=xkαf(xk)

其中 x k x_k xk是第 k 次迭代时 x 的值,α 是步长, f ′ ( x k ) f′(x_k) f(xk) 是函数 f(x) 在 x k x_k xk 处的导数值。

  1. 初始化一个点 x0。
  2. 求解函数 f(x) 在 x k x_k xk 处的导数, f ′ ( x k ) f′(x_k) f(xk)即切线斜率 m【m 也可以用梯度表示,即 $ m =▽f(x_k)$】
  3. 求解函数 f(x) 在 x k x_k xk 处的二阶导数 , f ′ ( x k ) f′(x_k) f(xk)即切线曲率 n
  4. f ′ ( x k ) f'(x_k) f(xk) f ′ ′ ( x k ) f''(x_k) f′′(xk)代入牛顿迭代公式 中, x k + 1 = x k − α ⋅ m x_{k+1} = x_k - α·m xk+1=xkαm,其中 α 是步长。
  5. 重复执行步骤 2-4,直到满足预设的阈值条件,如 ∣ x k + 1 − x k ∣ < ϵ ∣x_{k+1}−x_k∣<ϵ xk+1xk∣<ϵ,其中 ϵ 是预设的阈值。
  6. 最终得到的解即为方程 f(x)=0 的根。

需要注意的是,牛顿法对于非线性方程的求解效果较好,但对于线性方程的求解则可能不收敛。必须保证 f(x) 二阶导连续,否则牛顿法可能无法收敛。

在推导过程的步骤4.中,谈到的牛顿迭代公式是如何代入得切线曲率?

使用牛顿-拉夫森方法(Newton-Raphson method)来求解 α,即:

α = f ′ ( x k ) f ′ ′ ( x k ) α = \frac{f'(x_k)}{f''(x_k)} α=f′′(xk)f(xk)

α 代入牛顿迭代公式中,得到:

x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) ⋅ f ′ ( x k ) x_{k+1} = x_k - \frac{f'(x_k)}{f''(x_k)}·f'(x_k) xk+1=xkf′′(xk)f(xk)f(xk)

2.3、阻尼牛顿法

1)较牛顿法的改进?

牛顿法迭代公式中没有步长因子,是定步长迭代。对于非二次型目标函数,不能保证函数值稳定的下降,有时会出现 f ( x k + 1 ) > f ( x k ) f(x_{k+1})>f(x_k) f(xk+1)>f(xk),走过头了,为消除定步长迭代的弊端,阻尼牛顿法每次迭代方向仍然是 x k x_k xk,但每次迭代会沿此方向做一维搜索,寻找最优的步长因子 λ k λ_k λk,即:

λ k = m i n f ( x k + λ d k ) λ_k = minf(x_k+\lambda d_k) λk=minf(xk+λdk)

2)阻尼牛顿法算法过程

  1. 给定初值x0,精度阈值 ϵ ,令 k = 0;
  2. 计算 x k 和 H k 计算x_k 和 H_k 计算xkHk
  3. ∣ ∣ g k ∣ ∣ < ϵ ||g_k|| < ϵ ∣∣gk∣∣<ϵ 则停止迭代,否则确定搜索方向: d k = − H k − 1 ⋅ g k d_k = -H_k^{-1}·g_k dk=Hk1gk
  4. 计算新的迭代点 x k + 1 = x k + d k x_{k+1} = x_k + d_k xk+1=xk+dk
  5. 令 k = k +1,重复执行步骤 2-5。

其中, H k 为海森矩阵( H e s s e n ) H_k为海森矩阵(Hessen) Hk为海森矩阵(Hessen,每个点处x=(x1,x2,x3,…,xn),都要计算一次:

在这里插入图片描述

g k 为一阶导数 g_k为一阶导数 gk为一阶导数

2.4、拟牛顿法

1)较牛顿法的改进?

牛顿法每一步都要求解目标函数的Hessen 矩阵的逆矩阵,计算量比较大,提出一种改进,**通过正定矩阵近似代替 H k − 1 H_k^{-1} Hk1,**简化这一计算过程,改进后的方法称为拟牛顿法。

2)拟牛顿法算法过程

  1. 将 f(x)在 x k + 1 x_{k+1} xk+1处展开,得到:

    f ( x ) = f ( x k + 1 ) + f ′ ( x k + 1 ) ( x − x k + 1 ) + 1 2 f ′ ′ ( x k + 1 ) ( x − x k + 1 ) 2 f(x) = f(x_k+1)+f'(x_{k+1})(x-x_{k+1})+\frac{1}{2}f''(x_{k+1})(x-x_{k+1})^2 f(x)=f(xk+1)+f(xk+1)(xxk+1)+21f′′(xk+1)(xxk+1)2

  2. 两边同时取梯度,得:

    f ′ ( x ) = f ′ ( x k + 1 ) + f ′ ′ ( x k + 1 ) ( x k − x k + 1 ) f'(x) = f'(x_{k+1})+ f''(x_{k+1})(x_k-x_{k+1}) f(x)=f(xk+1)+f′′(xk+1)(xkxk+1)

  3. x = x k x = x_k x=xk,得:

    f ′ ( x k ) = f ′ ( x k + 1 ) + f ′ ′ ( x k + 1 ) ( x k − x k + 1 ) f'(x_k) = f'(x_{k+1})+ f''(x_{k+1})(x_k-x_{k+1}) f(xk)=f(xk+1)+f′′(xk+1)(xkxk+1)

    整理,得:

    f ′ ( x k + 1 ) − f ′ ( x k ) = f ′ ′ ( x k + 1 ) ( x k + 1 − x k ) f'(x_{k+1}) -f'(x_k)= f''(x_{k+1}) (x_{k+1}-x_k) f(xk+1)f(xk)=f′′(xk+1)(xk+1xk)

    即:

    g k + 1 − g k = H k + 1 ( x k + 1 − x k ) g_{k+1} -g_k = H_{k+1}(x_{k+1} - x_k) gk+1gk=Hk+1(xk+1xk)

    可得:

    $ H_{k+1}^{-1}(g_{k+1} -g_k )=x_{k+1} - x_k$ 该式称为拟牛顿条件,对Hessen矩阵具有约束作用。

2.5、总结

重点是梯度下降法,利用一阶导数,而二阶导数涉及到海森矩阵,具有较大的计算量,因此,往往采用梯度下降算法。

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

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

相关文章

​LeetCode解法汇总1254. 统计封闭岛屿的数目

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 二维矩阵 grid 由 0 &#xff08;土地&#xff09;和 1 &#xff08;水&#xf…

HuggingFace-RL-Unit2-Part2——初探Q-Learning

初探Q-Learning 文章目录 初探Q-Learning什么是Q-Learning&#xff1f;Q-Learning 算法第一步: 初始化Q-表第二步: 使用epsilon贪心策略选择一个动作第三步: 执行动作At, 得到奖励Rt1和下一个状态St1第四步: 更新Q(St, At) 异策略 vs 同策略Q-Learning算法实例第一步: 初始化Q-…

drone、gogs、docker与项目集成实现自动化部署

目录 前言项目目录结构目录结构测试文件 文件内容Dockerfilerun.shdrone.yml 测试打包部署中查看容器访问项目成功 常见问题Gogs 推送 URL 被解析到默认禁用的本地网络地址1、drone登录没有权限2、cannot ping the remote server3、推送代码以后不能自动clone4、maven编译报错F…

SynchronousQueue源码

介绍 SynchronousQueue作为阻塞队列的时候&#xff0c;对于每一个take的线程会阻塞直到有一个put的线程放入元素为止&#xff0c;反之亦然。在SynchronousQueue内部没有任何存放元素的能力。所以类似peek操作或者迭代器操作也是无效的&#xff0c;元素只能通过put类操作或者ta…

JDBC 和数据库连接池

JDBC 和数据库连接池 1. JDBC 概述 1.1 基本介绍 JDBC为访问不同的数据库提供了统一的接口&#xff0c;为使用者屏蔽了细节问题Java程序员使用JDBC&#xff0c;可以连接任何提供了JDBC驱动程序的数据库系统&#xff0c;从而完成对数据库的各种操作。JDBC的基本原理图[重要!]…

【编译、链接、装载十三】内存中的栈——图解栈的运行过程

【编译、链接、装载十三】内存中的栈——图解栈的运行过程 一、程序的内存布局二、栈1、什么是栈2、寄存器 三、函数执行四、结合汇编——分析函数调用1、demo2、反汇编3、反汇——图解反汇编、栈帧、寄存器 一、程序的内存布局 看看加上动态链接之后进程的地址空间是如何分布…

详解Spring配置文件

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE、Spring Spring配置文件 1、简介2、XML3、\<Bean\>3.1、Bean标签范围配置3.2、生命周期3.3、⭐实例…

word文档批量生成工具(附免费软件)(按Excel表格内容自动替换内容生成文档)

批量生成word文档是让人无比厌恶但有时又不得不做的事情。比如学校要给拟录取的学生发通知书&#xff0c;就可能需要批量生成一批只有“姓名”、“学院”和“专业”不同&#xff0c;其他内容都相同的word文档以供打印&#xff08;事实上直接生成pdf是更好的选择&#xff0c;这个…

chatgpt赋能python:Python如何计算p值?

Python如何计算p值&#xff1f; 在统计学中&#xff0c;p值是估计观察到的结果是由随机因素导致的概率。在Python中&#xff0c;我们可以使用一些统计库来计算p值。 常见的统计库 Python中有很多统计库可以用来计算p值。其中&#xff0c;SciPy是最常用的统计库之一。它包含了…

【American English】去超市买东西常用对话,物品名字

不懂不丢人&#xff0c;不懂装懂才丢人。最近有点犯这毛病&#xff0c;多写一些东西消除一下。 无论什么知识都是多了才能成体系&#xff0c;更多自己在美国的小总结可见专栏&#xff1a;English。 文章目录 找寻物品优惠或折扣试吃结账退货离开 找寻物品 Excuse me, where can…

Linux——文件的概念、操作和理解

引言 文件 文件内容 文件属性 要操作文件&#xff0c;就要先打开文件。根据冯诺依曼体系&#xff0c;只能操作内存中的数据。因此要先把文件内容加载到存储器&#xff0c;即内存中。 文件接口 语言层面的文件接口 FILE* fopen(const char *path, const char *mode); int …

网页3行字,成立4周就快成独角兽!大模型创业狂飙中

先来看看这家公司的官网截图&#xff1a; 对的&#xff0c;你没有看错&#xff0c;加上公司名字也就只有4行字。 人工智能正在迅速发展&#xff1a;一家成立仅四周的初创公司获得了1.13亿美元的种子轮融资&#xff0c;将与OpenAI竞争&#xff0c;在构建、训练和应用大型语言模…

Ubuntu 如何启动、停止或重启服务

在本文中&#xff0c;我们向您介绍在 Ubuntu 中启动、停止和重启服务的方法。 列出 Ubuntu 中的所有服务 在开始之前&#xff0c;先获取计算机上所有服务的列表&#xff0c;因为我们需要知道服务名称来管理服务。 service --status-all 它将显示 Ubuntu 上的完整服务列表。…

八卦图总结

第一阶段知识汇总 版本号&#xff1a;V1.1 作 者 姓 名&#xff1a; 学 科 专 业&#xff1a; 软件测试 文 档 类 型&#xff1a;第一阶段 汇 总 测 试 基 础 …

strapi系列--如何建表并在原有官方自动生成的api基础上扩展接口,定制化自己的业务逻辑

为什么要进行后端定制呢&#xff1f; 在实际开发过程中&#xff0c;项目中有些需求需要我们定制化自己的业务逻辑&#xff0c;那么我们该如何处理这个需求呢&#xff1f;本文以图文并茂的形式&#xff0c;基于原有官方自动生成的api&#xff0c;定制一个我们自己的业务逻辑接口…

“破解求职之谜:应届生如何应对职场场景挑战?

今天&#xff0c;我想与你分享一个关于应届生面试的故事。这是一个真实且令人深思的故事&#xff0c;也是我个人在求职过程中的一次经历&#xff0c;这也是对尚未面试者的警醒对已面试者的勉励。 在暑期还未开始之前&#xff0c;我充满着憧憬和期待地投递了许多简历&#xff0c…

chatgpt赋能python:Python第几行是什么?了解Python中的行号

Python第几行是什么&#xff1f;了解Python中的行号 如果你是一名Python工程师&#xff0c;你肯定曾经遇到过错误提示中提到的Python第几行。那么Python中的行号是什么&#xff1f;本文将为您解答关于Python中行号的一些基本问题。 什么是Python中的行号&#xff1f; 在Pyth…

测试用例设计方法

等价类划分法 设计测试用例步骤 需求分析划分等价类&#xff1a;有效和无效设计用例 无效有5种情况 规则&#xff08;需求本身&#xff09;长度类型是否为空&#xff08;必填项&#xff09;是否重复 案例1&#xff1a;QQ号6-10位自然数 划分等价类 有效等价类有效数据无…

深入理解深度学习——BERT派生模型:BART(Bidirectional and Auto-Regressive Transformers)

分类目录&#xff1a;《深入理解深度学习》总目录 UniLM和XLNet都尝试在一定程度上融合BERT的双向编码思想&#xff0c;以及GPT的单向编码思想&#xff0c;同时兼具自编码的语义理解能力和自回归的文本生成能力。由脸书公司提出的BART&#xff08;Bidirectional and Auto-Regre…

[Hadoop] 期末答辩问题准备

0.相关概念 1.什么是NameNode&#xff1f; NameNode是整个文件系统的管理节点&#xff0c;它维护着整个文件系统的文件目录树&#xff0c;文件/目录的元信息和每个文件对应的数据块列表。并接收用户的操作请求。 2.SecondaryNameNode的主要作用&#xff1f; SecondaryNameN…