数学学习——最优化问题引入、凸集、凸函数、凸优化、梯度、Jacobi矩阵、Hessian矩阵

news2024/11/14 15:01:15

文章目录

  • 最优化问题引入
  • 凸集
  • 凸函数
  • 凸优化
  • 梯度
  • Jacobi矩阵
  • Hessian矩阵

最优化问题引入

例如:有一根绳子,长度一定的情况下,需要如何围成一个面积最大的图像?这就是一个最优化的问题。就是我们高中数学中最常见的最值问题。

最优化问题的一般形式是:
m i n ​ f ( x ) x ∈ C min​f(x) \\ x \in C minf(x)xC
其中, f f f是目标函数, A A A是约束条件, x x x是参数值。要求解最优化问题,就是要找到一个可行解 x ∗ x^∗ x,使得对于所有的 x ∈ A x\in A xA,都有 f ( x ∗ ) ≤ f ( x ) f(x^∗)≤f(x) f(x)f(x)

最优化问题的三个基本要素是:

  • 目标函数:用来衡量结果的好坏
  • 参数值:未知的因子,需要通过数据来确定
  • 约束条件:需要满足的限制条件

凸集

定义:集合 C C C中任意两点的线 C C C中,则称集合 C C C为凸集,也即满足 ∀ x , y ∈ C , 0 ≤ 0 ≤ 1 \forall x,y\in C,0≤0≤1 x,yC,001 8 x + ( 1 − ) y ∈ C 8x+(1-)y\in C 8x+(1)yC的集合称为凸集。

凸集合就是一个集合中的任意两点之间的线段都属于这个集合,而非凸集合就是不满足这个条件的集合。

凸集合:
在这里插入图片描述
非凸集合:
在这里插入图片描述

凸函数

定义:凸函数是一种定义在凸集上的实值函数,满足任意两点连成的线段上的函数值不大于两点的函数值的加权平均。也就是说,如果 f f f是凸函数,那么对于任意 x x x y y y在定义域内,以及任意 θ θ θ ( 0 , 1 ) (0,1) (0,1)之间,有
f ( θ x + ( 1 − θ ) y ) ≤ θ f ( x ) + ( 1 − θ ) f ( y ) f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y) f(θx+(1θ)y)θf(x)+(1θ)f(y)
这个不等式称为凸函数的凸性条件。如果不等式中的等号只在 x = y x=y x=y时成立,那么 f f f严格凸的。如果不等式反向成立,那么 f f f凹函数。如果 f f f既是凸函数又是凹函数,那么 f f f仿射函数

二维空间的凸函数:

import numpy as np
import matplotlib.pyplot as plt

# 定义凸函数 f(x) = x^2
def f(x):
    return x**2

# 生成x轴的数据
x = np.linspace(-5, 5, 100)

# 计算y轴的数据
y = f(x)

# 画出函数图像
plt.plot(x, y)

# 设置坐标轴标签和标题
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Convex Function')

# 显示图像
plt.show()

在这里插入图片描述

三维空间的凸函数:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# 定义凸函数 f(x,y) = x^2 + y^2
def f(x, y):
    return x**2 + y**2

# 生成x和y轴的数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)

# 将x和y轴数据转换为网格矩阵
X, Y = np.meshgrid(x, y)

# 计算z轴的数据
Z = f(X, Y)

# 创建3D图像对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 画出函数图像
ax.plot_surface(X, Y, Z)

# 设置坐标轴标签和标题
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x,y)')
ax.set_title('Convex Function')

# 显示图像
plt.show()

在这里插入图片描述
二维空间的非凹非凸函数:

import numpy as np
import matplotlib.pyplot as plt

# 定义非凹非凸函数 f(x) = sin(x) + cos(2x)
def f(x):
    return np.sin(x) + np.cos(2*x)

# 生成x轴的数据
x = np.linspace(-5, 5, 100)

# 计算y轴的数据
y = f(x)

# 画出函数图像
plt.plot(x, y)

# 设置坐标轴标签和标题
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Non-convex Function')

# 显示图像
plt.show()

在这里插入图片描述

三维空间的非凹非凸函数:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# 定义非凹非凸函数 f(x,y) = sin(x) + cos(2y)
def f(x, y):
    return np.sin(x) + np.cos(2*y)

# 生成x和y轴的数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)

# 将x和y轴数据转换为网格矩阵
X, Y = np.meshgrid(x, y)

# 计算z轴的数据
Z = f(X, Y)

# 创建3D图像对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 画出函数图像
ax.plot_surface(X, Y, Z)

# 设置坐标轴标签和标题
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x,y)')
ax.set_title('Non-convex Function')

# 显示图像
plt.show()

在这里插入图片描述

凸优化

凸优化是数学最优化的一个子领域,研究定义在凸集中的凸函数最小化的问题。

凸优化问题可以形式化地写成:
m i n ​ f ( x ) s . t . g i ​ ( x ) ≤ 0 , i = 1 , 2 , ⋯   , m h j ​ ( x ) = 0 , j = 1 , 2 , ⋯   , n ​ \begin{align*} min&​f(x) \\ s.t. &g_i​(x)≤0,i=1,2,\cdots,m\\ &h_j​(x)=0,j=1,2,\cdots,n​ \end{align*} mins.t.f(x)gi(x)0,i=1,2,,mhj(x)=0,j=1,2,,n

其中x为优化变量; f f f为凸目标函数; g i ​ g_i​ gi h j h_j hj​为约束函数,分别表示不等式约束和等式约束;

这个问题的意思是求解最小化目标函数 f ( x ) f(x) f(x),使得x满足不等式约束 g i ​ ( x ) ≤ 0 g_i​(x)≤0 gi(x)0和等式约束 h j ​ ( x ) = 0 h_j​(x)=0 hj(x)=0

一个凸优化问题具备如下性质:

  1. 凸优化的局部极小点就是全局极小点:
  2. 如果目标函数是严格凸函数,则凸优化问题具有唯一的全局极小点:
  3. 凸优化的全局极大点必定能在可行域的边界上达到;

梯度

它表示一个多元函数在某一点沿着最大增长方向的变化率,可以用偏导数来表示。梯度是一个向量,它的方向是函数在该点最大增长的方向,它的大小是在该方向上的增长率。梯度可以用向量微分算子(nabla)来表示。

例如:
∇ f ( x , y ) = ∂ f ∂ x i + ∂ f ∂ y j \nabla f(x,y) = \frac{\partial f}{\partial x}i+\frac{\partial f}{\partial y}j f(x,y)=xfi+yfj

Jacobi矩阵

定义: 雅可比矩阵是一个函数的一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵反映了一个函数在给定点的最佳线性逼近,类似于单变量函数的导数。如果函数是从 R n ℝ_n Rn R m ℝ_m Rm的映射,那么它的雅可比矩阵是一个 m × n m \times n m×n的矩阵,可以用以下方式定义:
J = [ ∂ f 1 ∂ x 1 ⋯ ∂ f 1 ∂ x n ⋮ ⋱ ⋮ ∂ f m ∂ x 1 ⋯ ∂ f m ∂ x n ] J = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} J= x1f1x1fmxnf1xnfm
其中 f i ​ f_i​ fi是函数的第 i i i个分量, x j ​ x_j​ xj是第 j j j个自变量。雅可比矩阵的符号表示为 J f ​ J_f​ Jf或者 ∂ ( f 1 , ⋯   , f m ) ∂ ( x 1 , ⋯   , x m ) \frac{\partial {(f_1,\cdots, f_m)}}{\partial {(x_1,\cdots, x_m)}} (x1,,xm)(f1,,fm)。雅可比矩阵的第 i i i行是由函数 f i ​ f_i​ fi的梯度向量表示的。

举例:

设有函数 F : R 3 → R 4 F:ℝ^3 \to ℝ^4 F:R3R4,其分量为:
w = x + y + z x = x y = y z = z w=x+y+zx=xy=yz=z w=x+y+zx=xy=yz=z
雅可比矩阵是:
J ( F ) = ∣ ∂ w ∂ x ∂ w ∂ y ∂ w ∂ z ∂ x ∂ x ∂ x ∂ y ∂ x ∂ z ∂ y ∂ x ∂ y ∂ y ∂ y ∂ z ∂ z ∂ x ∂ z ∂ y ∂ z ∂ z ∣ J(F) = \begin{vmatrix} \frac{\partial w}{\partial x} & \frac{\partial w}{\partial y} & \frac{\partial w}{\partial z} \\ \frac{\partial x}{\partial x} & \frac{\partial x}{\partial y} & \frac{\partial x}{\partial z} \\ \frac{\partial y}{\partial x} & \frac{\partial y}{\partial y} & \frac{\partial y}{\partial z} \\ \frac{\partial z}{\partial x} & \frac{\partial z}{\partial y} & \frac{\partial z}{\partial z} \end{vmatrix} J(F)= xwxxxyxzywyxyyyzzwzxzyzz
将给定的函数代入上式子,得到:
J ( F ) = ∣ 1 1 1 y x 0 0 z y 0 0 1 ∣ J(F) = \begin{vmatrix} 1 & 1 & 1 \\ y & x & 0 \\ 0 & z & y\\ 0 & 0 & 1 \end{vmatrix} J(F)= 1y001xz010y1

Hessian矩阵

H e s s i a n Hessian Hessian矩阵是一个多元函数的二阶偏导数构成的方阵,用于描述函数的局部曲率。如果函数 f : R n → R f:R^n→R f:RnR在点 x x x处具有连续的二阶偏导数,那么它的 H e s s i a n Hessian Hessian矩阵 H f ​ ( x ) H_f​(x) Hf(x)定义为:
H f ( x ) = [ ∂ 2 f ∂ x 1 2 ( x ) ⋯ ∂ 2 f ∂ x 1 ∂ x n ( x ) ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ( x ) ⋯ ∂ 2 f ∂ x n 2 ( x ) ] H_f(x) = \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2}(x) & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n}(x) \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1}(x) & \cdots & \frac{\partial^2 f}{\partial x_n^2}(x) \end{bmatrix} Hf(x)= x122f(x)xnx12f(x)x1xn2f(x)xn22f(x)

H e s s i a n Hessian Hessian矩阵和 J a c o b i Jacobi Jacobi矩阵之间的关系是, H e s s i a n Hessian Hessian矩阵等于函数的梯度的 J a c o b i Jacobi Jacobi矩阵。也就是说,如果 f : R n → R f:Rn→R f:RnR,那么
H f ​ ( x ) = J ∇ f ​ ( x ) H_f​(x)=J_{\nabla f}​(x) Hf(x)=Jf(x)
其中 ∇ f \nabla f f表示函数f的梯度, J ∇ f ​ J_{\nabla f​} Jf表示梯度 ∇ f \nabla f f J a c o b i Jacobi Jacobi矩阵。这个关系可以从 H e s s i a n Hessian Hessian矩阵和 J a c o b i Jacobi Jacobi矩阵的定义直接得到。

举例:

有个二元函数是 f ( x , y ) = x 2 + y 2 f(x,y)=x2+y2 f(x,y)=x2+y2。它的梯度是 ∇ f ( x , y ) = ( 2 x , 2 y ) ∇f(x,y)=(2x,2y) f(x,y)=(2x,2y),它的 H e s s i a n Hessian Hessian矩阵是
J ( F ) = ∣ ∂ 2 f ∂ x 2 ( x , y ) ∂ 2 f ∂ x ∂ y ( x , y ) ∂ 2 f ∂ y ∂ x ( x , y ) ∂ 2 f ∂ y 2 ( x , y ) ∣ = ∣ 2 0 0 2 ∣ J(F) = \begin{vmatrix} \frac{\partial^2 f}{\partial x^2}(x, y) & \frac{\partial^2 f}{\partial x \partial y} (x, y)\\ \frac{\partial^2 f}{\partial y \partial x}(x, y) & \frac{\partial^2 f}{\partial y^2} (x, y) \end{vmatrix} = \begin{vmatrix} 2 & 0 \\ 0 & 2 \end{vmatrix} J(F)= x22f(x,y)yx2f(x,y)xy2f(x,y)y22f(x,y) = 2002

它的梯度的 J a c o b i Jacobi Jacobi矩阵是
J ( F ) = ∣ ∂ ∂ x ( 2 x ) ∂ ∂ y ( 2 x ) ∂ ∂ x ( 2 y ) ∂ ∂ y ( 2 y ) ∣ = ∣ 2 0 0 2 ∣ J(F) = \begin{vmatrix} \frac{\partial }{\partial x}(2x) & \frac{\partial }{\partial y}(2x) \\ \frac{\partial }{\partial x}(2y) & \frac{\partial }{\partial y}(2y) \end{vmatrix} = \begin{vmatrix} 2 & 0 \\ 0 & 2 \end{vmatrix} J(F)= x(2x)x(2y)y(2x)y(2y) = 2002
可以看出,它们是相等的。

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

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

相关文章

【C++进阶:哈希--unordered系列的容器及封装】

本课涉及到的所有代码都见以下链接,欢迎参考指正! practice: 课程代码练习 - Gitee.comhttps://gitee.com/ace-zhe/practice/tree/master/Hash unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在…

React井字棋游戏官方示例

在本篇技术博客中,我们将介绍一个React官方示例:井字棋游戏。我们将逐步讲解代码实现,包括游戏的组件结构、状态管理、胜者判定以及历史记录功能。让我们一起开始吧! 项目概览 在这个井字棋游戏中,我们有以下组件&am…

交叉编译工具链的安装、配置、使用

一、交叉编译的概念 交叉编译是在一个平台上生成另一个平台上的可执行代码。 编译:一个平台上生成在该平台上的可执行文件。 例如:我们的Windows上面编写的C51代码,并编译成可执行的代码,如xx.hex.在C51上面运行。 我们在Ubunt…

jellyfin搭建服务器后,快解析端口映射让外网访问

Jellyfin是一款相对知名的影音服务器,是一套多媒体应用程序软件套装,可以有效的组织管理和共享数字媒体文件,不少伙伴喜欢用jellyin在本地自己主机上搭建自己的服务器。当本地搭建服务器后,面对动态IP和无公网IP环境困境下&#x…

【javaSE】面向对象程序三大特性之封装

目录 封装的概念 访问限定符 说明 访问private所修饰的变量的方法 封装扩展之包 包的概念 导入包中的类 注意事项 自定义包 基本规则 操作步骤 步骤一 ​编辑步骤二 ​编辑 步骤三 步骤四 步骤五 包的访问权限控制举例 常见的包 static成员 再谈学生类 s…

Vue中导入并读取Excel数据

在工作中遇到需要前端上传excel文件获取到相应数据处理之后传给后端并且展示上传文件的数据. 一、引入依赖 npm install -S file-saver xlsxnpm install -D script-loadernpm install xlsx二、在main.js中引入 import XLSX from xlsx三、创建vue文件 <div><el-uplo…

Aduino中eps环境搭建

这里只记录Arduino2.0以后版本&#xff1a;如果有外网环境&#xff0c;那么可以轻松搜到ESP32开发板环境并安装&#xff0c;如果没有&#xff0c;那就见下面操作&#xff1a; 进入首选项&#xff0c;将esp8266的国内镜像地址填入&#xff0c;然后保存&#xff0c;在开发板中查…

[STL]stack和queue使用介绍

[STL]stack和queue使用介绍 文章目录 [STL]stack和queue使用介绍stack使用介绍stack介绍构造函数empty函数push函数top函数size函数pop函数 queue使用介绍queue介绍构造函数empty函数push函数front函数back函数size函数pop函数 deque介绍 stack使用介绍 stack介绍 stack是一种…

C++中的static修饰类的成员变量和成员函数

回顾一下C语言中static的描述&#xff0c;我们知道&#xff1a; 当static修饰局部变量时&#xff0c;使局部变量的生命周期延长.static修饰全局变量时&#xff0c;将外部链接属性变成了内部链接属性&#xff0c;使全局变量的作用域只能在该源文件中执行.static修饰函数时&#…

时序预测 | Python实现NARX-DNN空气质量预测

时序预测 | Python实现NARX-DNN空气质量预测 目录 时序预测 | Python实现NARX-DNN空气质量预测效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 时序预测 | Python实现NARX-DNN空气质量预测 研究内容 Python实现NARX-DNN空气质量预测,使用深度神经网络对比利时空气…

西安市未央区地方财政支出绩效管理研究_kaic

摘 要 目前传统的地方财政绩效管理研究普遍上主要集中在有关收入研究方面上&#xff0c;而对其支出的规模以及各类结构的研究较少。我国大部分地方财政政府的财政收入低下&#xff0c;财政支出效率有限&#xff0c;不能很好的为其地方经济提供较为稳定的社会支撑和经济保障。造…

6.1.tensorRT高级(1)-概述

目录 前言1. tensorRT高级概述总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-概述 课程大纲可看下面的思维…

【C++】入门 --- 缺省参数函数重载

文章目录 &#x1f96e;一、缺省参数&#x1f355;1、基本概念&#x1f355;2、缺省参数的分类&#x1f6a9;全缺省参数&#x1f6a9;半缺省参数&#x1f6a9;缺省参数实用案例 &#x1f96e;二、函数重载&#x1f355;1、函数重载概念1️⃣参数类型不同2️⃣参数个数不同3️⃣…

MySQL 数据库 【增删查改(二)】

目录 一、表的设计 1、一对一 2、一对多 3、多对多 二、新增 三、查询 1、聚合查询 &#xff08;1&#xff09;聚合函数&#xff1a; &#xff08;2&#xff09; group by 子句 &#xff08;3&#xff09;having 2、联合查询 (1)内连接 (2)外连接 (3)自链接 (4)…

web前端开发工程师的具体职责范本(合集)

web前端开发工程师的具体职责范本1 职责&#xff1a; 1.负责web前端架构的搭建&#xff0c;核心业务功能开发和核心代码编写。 2.配合产品经理&#xff0c;实现产品UI和交互方面的需求&#xff0c;持续界面优化&#xff0c;提升用户体验。 3.参与相关业务需求变更评审。 4.…

【动态规划part14】| 1143.最长公共子序列、1035.不相交的线、53.最大子序和

目录 &#x1f388;LeetCode1143.最长公共子序列 &#x1f388;LeetCode1035.不相交的线 &#x1f388;LeetCode53.最大子序和 &#x1f388;LeetCode1143.最长公共子序列 链接&#xff1a;1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的…

线程操作——创、取、终、分、连

文章目录 线程相关函数线程创建注意&#xff1a; 线程终止线程ID获取线程比较连接终止线程——回收资源线程分离——终止后自动回收资源线程取消——中途终止 线程相关函数 main函数执行的线程叫主线程&#xff08;main线程)&#xff0c;其余创建出来的叫子线程。 线程创建 这…

mybatisplus的id生成策略失效问题

mybatisplus3.4.2 id的默认生成策略是雪花算法 问题重现&#xff1a;无论我设置 yml为 mybatis-plus:global-config:db-config:id-type: auto还是在id的实体类上加入 TableId(type IdType.ASSIGN_ID) 都不起作用 现在直接说结论&#xff0c;原因是之前没有设置生成策略默认生…

【Qt】Qt 实现图像格式转图标 ico 格式的程序

【Qt】Qt 实现图像格式转图标 ico 格式的程序 文章目录 【Qt】Qt 实现图像格式转图标 ico 格式的程序核心代码编写应用程序1. 设计界面2. 头文件3. 源文件 核心代码 此程序得核心代码既是&#xff0c;使用 QImage 打开图片文件&#xff0c;并保存为 ICO 格式。 QImage img(so…

Stable Diffusion 硬核生存指南:WebUI 中的 VAE

本篇文章聊聊 Stable Diffusion 生态中呼声最高、也是最复杂的开源模型管理图形界面 “stable-diffusion-webui” 中和 VAE 相关的事情。 写在前面 Stable Diffusion 生态中有一个很重要的项目&#xff0c;它对于 SD 生态繁荣做出的贡献可以说居功至伟&#xff0c;自去年八月…