Box-constrained L-BFGS 相关知识拓展

探讨了L-BFGS算法在无约束优化问题中的应用,解析了牛顿法、拟牛顿法及其变种BFGS和L-BFGS的原理与优缺点。同时,介绍了框约束优化问题的挑战及L-BFGS作为一种解决方案的角色。
部署运行你感兴趣的模型镜像

box-constrained optimization problem

在这里插入图片描述

hard problem

参考:https://hujichn.github.io/2016/07/14/什么是P、NP、NPC、NP-Hard问题/
https://www.jianshu.com/p/a350e563d9a9

P Problem: 对于任意的输入规模n,问题都可以在n的多项式时间内得到解决;
NP(Non-deterministic Polynomial) Problem: 可以在多项式的时间里验证一个解的问题;
NPC(Non-deterministic Polynomial Complete) Problem: 满足两个条件 (1)是一个NP问题 (2)所有的NP问题都可以约化到它
NP-Hard Problem: 满足NPC问题的第二条,但不一定要满足第一条
在这里插入图片描述

  • 判断一个NP问题是不是NP-Complete的两个方法:
    1、先证明至少是NP问题,然后找到一个NPC问题,经过证明可以约化到你的问题,这意味着你的方法可以解决这个NPC问题,那很显然,这个解决方法也是NPC的。
    2、所有的NP问题都可以reduced到你的问题
  • NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索,而NP是可以在多项式的时间里验证一个解的问题,是有可能有多项式的有效算法。
  • 原文中的框约束优化问题,因为直接通过公式f(x+r)=l去约束优化的话,有些困难,是个NP hard,所以采用了box-constrained L-BFGS来近似。

L-BFGS

在无约束优化问题中,牛顿法及拟牛顿法是常用的方法,L-BFGS属于拟牛顿法。
参考博客:https://blog.youkuaiyun.com/dadouyawp/article/details/44179599#commentBox

  1. 牛顿法:f(x)二阶泰勒展开,并找极值点(有可能为极小值),通过迭代极小值得到最小值
    在这里插入图片描述
    优点:二次收敛性,收敛速度快
    缺点:当初始点远离极小值时,可能不收敛,因为牛顿方向不一定是下降方向
    步长固定,即使是下降方向,得到的点也未必是最小值,而是附近值
  2. 阻尼牛顿法
    在这里插入图片描述
    在牛顿方向上寻求最优步长,并调整
  3. 拟牛顿法
    原因:二阶Hession矩阵未必可逆,所以需要找能满足相同条件的Hk+1来替代,也成为拟牛顿条件。
    在这里插入图片描述
    常用的获取Hk+1(一般都为正定矩阵)的方法:
    在这里插入图片描述
  4. DFP算法
    找寻校正矩阵的构造方法,寻求特殊解
    在这里插入图片描述
  5. BFGS算法
    拟牛顿条件更改为:
    在这里插入图片描述
    该条件的特殊解方法同上,然后再求逆,得到Hk+1
    在这里插入图片描述
  6. L-BFGS算法
    原因:每次迭代都要存储Hk+1,n×n的空间,对大规模优化问题不够友好,所以改为存储近m次的q和p,这样空间就缩小为m×n大小。求下降方向时可采用two-loop recursion方法来计算
    在这里插入图片描述在这里插入图片描述

矩阵相关

  1. 正定矩阵
    在这里插入图片描述
  2. 对称正定矩阵
    在这里插入图片描述
  3. 可逆矩阵
    在这里插入图片描述
  4. 奇异矩阵
    奇异矩阵是线性代数的概念,就是该矩阵的秩不是满秩。但首先要看这个矩阵是不是方阵(即行数和列数相等的矩阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。

autoencoder

自动编码器由编码器和解码器组成,两者均可以为认为模型,先通过编码器降维到code中(类似于PCA的降维作用),然后通过另外一个神经网络去解码得到一个与输入原数据一模一样的生成数据,然后通过去比较这两个数据,最小化他们之间的差异来训练这个网络中编码器和解码器的参数。
优点:当原始数据包含大量信息时,先把信息量压缩,得到最具有代表性的数据,然后再进行学习。目前主要应用有两个方面,第一是数据去噪,第二是进行可视化降维。还可以用来生成数据。
在这里插入图片描述

变分自动编码器(Variational Autoencoder)

参考:https://www.jianshu.com/p/78f91e8aafed

  • 与自动编码器的区别:给隐含向量code增加约束,使其粗略的遵循一个标准正态分布,这样,当我们需要生成图片时,只需要把标准正态分布作为输入送到解码器中即可。
  • 此时训练的loss包含两部分:生成图片与原图片的均方误差;KL divergence来衡量隐含向量分布与标准正态分布之间的相似程度。
    在这里插入图片描述

lipschitz常数,lipschitz条件

对于函数 y=f(x)在定义域为D上,如果存在 L ∈R ,且L>0,对任意 x1,x2 ∈D,有:|f(x1)-f(x2)|≤ L|x1-x2|
则称 L 为 f(x) 在D上的Lipschitz常数
Lipschitz条件,即利普希茨连续条件(Lipschitz continuity)。其定义为:对于函数f(x),若其任意定义域中的x1,x2,都存在L>0,使得|f(x1)-f(x2)|≤L|x1-x2|。
也即存在一个实数L,使得对于函数f(x)上的每对点,连接它们的线的斜率的绝对值不大于这个实数L,从而限制了函数改变的速度,保证函数分布的光滑性。最小的L称为该函数的Lipschitz常数。

Jacobian矩阵,Hessian矩阵

  • 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式
    在这里插入图片描述
  • 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵
    在这里插入图片描述

Parseval’s formula

揭示了信号在时域和频域上的功率相等
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

### BRDF-Constrained Multi-View Stereo Methods and Applications 在多视角立体视觉(Multi-View Stereo, MVS)领域,基于双向反射分布函数(Bidirectional Reflectance Distribution Function, BRDF)约束的方法已经成为提升三维重建质量的重要研究方向。传统的MVS方法通常假设物体表面为朗伯反射(Lambertian Reflectance),这种假设在面对具有复杂反射特性的非朗伯表面时,容易导致重建结果的不准确。而引入BRDF约束可以更好地建模真实场景中的表面反射特性,从而提高重建的精度和鲁棒性。 BRDF描述了表面在给定入射方向和出射方向下的反射特性。通过将BRDF模型纳入MVS框架,可以更准确地估计表面法线和深度信息。具体来说,这种方法利用多视角图像中的光照变化和视角变化,结合BRDF模型对表面反射行为的预测,来优化重建过程。例如,在表面法线估计中,可以使用BRDF约束来减少由于非朗伯反射引起的误差,从而获得更精确的法线方向[^1]。 在实际应用中,BRDF-Constrained MVS方法已经被广泛应用于三维重建、虚拟现实、增强现实等领域。在三维重建方面,这些方法能够处理具有复杂表面材质的物体,如金属、玻璃等,从而生成更加真实的三维模型。在虚拟现实和增强现实中,准确的表面反射建模可以提升视觉效果的真实性,使得虚拟场景与真实环境更加融合。 此外,BRDF-Constrained MVS方法还在医学成像、工业检测等领域展现出潜在的应用价值。例如,在医学成像中,通过精确建模组织表面的反射特性,可以获得更准确的三维解剖结构模型,有助于手术规划和导航。在工业检测中,这些方法可以帮助检测表面缺陷,提高检测的精度和可靠性。 ### 示例代码 以下是一个简单的Python示例,展示如何使用OpenCV库进行多视角立体视觉重建: ```python import cv2 import numpy as np # 读取多视角图像 images = [cv2.imread(f'view_{i}.jpg') for i in range(1, 6)] # 提取SIFT特征 sift = cv2.SIFT_create() keypoints = [] descriptors = [] for image in images: kp, des = sift.detectAndCompute(image, None) keypoints.append(kp) descriptors.append(des) # 匹配特征点 matcher = cv2.BFMatcher() matches = [] for i in range(len(images) - 1): match = matcher.knnMatch(descriptors[i], descriptors[i + 1], k=2) good_matches = [] for m, n in match: if m.distance < 0.75 * n.distance: good_matches.append(m) matches.append(good_matches) # 重建三维点 points_3d = [] for i in range(len(matches)): points1 = np.float32([keypoints[i][m.queryIdx].pt for m in matches[i]]) points2 = np.float32([keypoints[i + 1][m.trainIdx].pt for m in matches[i]]) E, mask = cv2.findEssentialMat(points1, points2, focal=1.0, pp=(0., 0.), method=cv2.RANSAC, prob=0.999, threshold=3.0) _, R, t, mask = cv2.recoverPose(E, points1, points2) points_4d = cv2.triangulatePoints(np.eye(4)[:3], np.hstack((R, t)), points1.T, points2.T) points_3d.append(points_4d / points_4d[3]) # 可视化三维点 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') for points in points_3d: ax.scatter(points[0], points[1], points[2]) plt.show() ``` ### 相关问题 1. BRDF模型在多视角立体视觉中的具体实现方法有哪些? 2. 如何评估BRDF-Constrained MVS方法的重建精度? 3. BRDF-Constrained MVS方法在处理动态场景时的挑战是什么? 4. 有哪些开源库或工具支持BRDF-Constrained MVS方法的实现?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值