凸优化学习(2)——梯度类方法求解(gradient descent)

🍅 写在前面
👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。
🔎个人主页:主页链接(欢迎各位大佬光临指导)
⭐️近期专栏:机器学习与深度学习
                       LeetCode算法实例
                       张量分解

凸优化系列知识,详见下方链接:

凸优化学习(1)——什么是凸优化、凸集、凸函数
凸优化学习(2)——梯度类方法求解(gradient descent)
本系列文章主要参考:卡耐基梅隆 凸优化系列课程

目录

  • 综述
  • gradient descent
    • backtracking line search
    • exact line search
  • subgradient descent
    • 次梯度
  • proximal gradient descent

综述

1、梯度类方法是无约束方法中最常用的方法之一, 其依据是梯度的负方向就是函数值下降最快的方向。但是,常用的梯度下降(gradient descent)方法中,必须要求目标函数连续且可导,对于连续不可导的问题,梯度下降方法无能为力。
2、这里还将介绍另外两种针对目标函数连续不可导可用的优化方法,分别是subgradient descentproximal gradient descent

gradient descent

一般梯度下降的基本迭代公式为:

x k = x k − 1 − t k ∇ f ( x ( k − 1 ) ) {x^k} = {x^{k - 1}} - {t_k}\nabla f({x^{(k - 1)}}) xk=xk1tkf(x(k1))
式子中的k表示的是第k次迭代, t k {t_k} tk表示的是学习率(步长), ∇ f ( x ) \nabla f({x}) f(x)表示的是点在x处的梯度。
这里针对学习率是否改变以及如何改变又有不同的方法。最简单的当然是固定学习率为一个恒定值,但是学习率如果过大或者过小,可能会导致结果难以收敛或者收敛速度很慢。因此,产生了可变学习率的方法。可变学习率的思想是:每次迭代中根据一定规则更新现有的学习率。下面介绍两种可变学习率的方法。

backtracking line search

backtracking line search 方法需要先固定两个参数 α β \alpha \beta αβ,并要求 0 < α < 1 / 2 0<\alpha<1/2 0<α<1/2 0 < β < 1 0<\beta<1 0<β<1。每次迭代时,计算下列式子判断是否需要更新学习率:

f ( x − t ∇ f ( x ) ) > f ( x ) − α t ∥ ∇ f ( x ) ∥ 2 2 f(x - t\nabla f(x)) > f(x) - \alpha t{\left\| {\nabla f(x)} \right\|_2}^2 f(xtf(x))>f(x)αtf(x)22
如果式子成立,则改变学习率为 t = β t t = \beta t t=βt。这种方法的思想是当步长过大的时候 (即跨过了最优点),减小步长,否则保持步长不变

exact line search

exact line search方法则是先计算出梯度 ∇ f ( x ( k − 1 ) ) \nabla f({x^{(k - 1)}}) f(x(k1)),然后带入下列函数中,此时函数中只有 t k {t_k} tk学习率未知,因此有对 t k {t_k} tk求导并另导数等于零,求得的 t k {t_k} tk则为当前的最优学习率,因为这个学习率能够令当前迭代下降的距离最大。该方法也被称为最速梯度下降法。

f ( x ( k − 1 ) − t k ∇ f ( x ( k − 1 ) ) ) f({x^{(k - 1)}} - {t_k}\nabla f({x^{(k - 1)}})) f(x(k1)tkf(x(k1)))

subgradient descent

subgradient descent用于解决某些函数存在连续不可导,梯度不存在的问题。

次梯度

一个凸函数f在x的次梯度g定义为:

f ( y ) ≥ f ( x ) + g T ( y − x ) f(y) \ge f(x) + {g^T}(y - x) f(y)f(x)+gT(yx)
次梯度的一些特性:
1、总是存在于定义域dom(f)的内部;
2、如果f在x上是完全可微的,那么其存在唯一的次梯度 g = ∇ f ( x ) g = ∇ f ( x ) g=f(x)
3、该次梯度的定义也可以推广到非凸函数中,但非凸函数的次梯度g gg可能不存在。
举例:
f ( x ) = ∣ x ∣ f(x) = \left| x \right| f(x)=x,在x=0处不可导,图像如下。
在这里插入图片描述
其次梯度为:
在这里插入图片描述

proximal gradient descent

proximal 通过对原问题的拆分并利用 proximal mapping,能够解决 subgradient descent 无法解决的问题。一般来说,该方法将目标函数转化为一下形式:
f ( x ) = g ( x ) + h ( x ) f(x) = g(x) + h(x) f(x)=g(x)+h(x)
其中,g(x)是凸且可微的,h(x)是凸函数。则proximal gradient descent方法的迭代过程如下:
x ( k ) = x ( k − 1 ) − t k G t k ( x ( k − 1 ) ) G t ( x ) = x − p r o x t h ( x − t ∇ g ( x ) ) t p r o x t h ( x ) {x^{(k)}} = {x^{(k - 1)}} - {t_k}{G_{tk}}({x^{(k - 1)}}){G_t}(x) = \frac{{x - pro{x_{th}}(x - t\nabla g(x))}}{t}pro{x_{th}}(x) x(k)=x(k1)tkGtk(x(k1))Gt(x)=txproxth(xtg(x))proxth(x)
其中:
p r o x t h ( x ) = arg ⁡ min ⁡ z ∈ R n 1 2 t ∥ x − z ∥ 2 2 + h ( z ) pro{x_{th}}(x) = \arg {\min _{z \in {R^n}}}\frac{1}{{2t}}{\left\| {x - z} \right\|_2}^2 + h(z) proxth(x)=argzRnmin2t1xz22+h(z)

以上是本节梯度方法求解凸优化问题,下一节总结对偶方法解决梯度问题。

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

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

相关文章

Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()

isRef() isRef()&#xff1a;检查某个值是否为 ref。 isRef函数接收一个参数&#xff0c;即要判断的值。如果该参数是由ref创建的响应式对象&#xff0c;则返回true&#xff1b;否则&#xff0c;返回false。 import { ref, isRef } from vue const normalValue 这是一个普通…

虚拟背景扣像SDK解决方案,电影级抠像技术

美摄科技&#xff0c;作为影像技术领域的领航者&#xff0c;凭借其革命性的虚拟背景抠像SDK解决方案&#xff0c;正以前所未有的方式&#xff0c;重新定义电影级背景抠像技术&#xff0c;让直播与视频制作迈入全新境界。 电影级抠像技术&#xff0c;重塑视觉盛宴 美摄科技的虚…

ArcGIS属性表汉字转拼音

直接复制粘贴现成代码&#xff1a; # -*- coding: utf-8 -*-import arcpyfrom arcpy import envimport osimport pypinyin import sys# 不带声调皿stylepypinyin.NORMAL)def pinyin(word): s for i in pypinyin.pinyin(word, stylepypinyin.NORMAL): s .join(…

PHP一键寄送尽在掌中快递寄件小程序

一键寄送尽在掌中 —— 快递寄件小程序全体验 &#x1f31f; 开篇&#xff1a;告别繁琐&#xff0c;拥抱便捷新纪元 还在为寄快递而烦恼吗&#xff1f;排队等待、填写繁琐的单据、等待快递员上门...这些统统成为过去式&#xff01;“一键寄送尽在掌中快递寄件小程序”。它就像…

【深度学习】【OnnxRuntime】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【OnnxRuntime】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【OnnxRuntime】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转onnxWindows平…

图像检测【YOLOv5】——深度学习

Anaconda的安装配置&#xff1a;&#xff08;Anaconda是一个开源的Python发行版本&#xff0c;包括Conda、Python以及很多安装好的工具包&#xff0c;比如&#xff1a;numpy&#xff0c;pandas等&#xff0c;其中conda是一个开源包和环境管理器&#xff0c;可以用于在同一个电脑…

How to install OpenAI Universe without getting error code 1 on Windows?

题意&#xff1a;怎样在Windows上安装OpenAI Universe并避免出现错误代码1 问题背景&#xff1a; When I try to install OpenAi Universe on my Windows machine via python pip I get following stacktrace: 当我尝试通过 python pip 在我的 Windows 机器上安装 OpenAI Uni…

S-Procedure的基本形式及使用

理论 Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- \textbf{Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- } Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- tions w.r.t. x ∈ C M 1 \mathbf{x}\in\mathbb{C}^M\times1 x…

Grafana 可视化配置

Grafana 是什么 Grafana 是一个开源的可视化和监控工具&#xff0c;广泛用于查看和分析来自各种数据源的时间序列数据。它提供了一个灵活的仪表盘&#xff08;dashboard&#xff09;界面&#xff0c;用户可以通过它将数据源中的指标进行图表化展示和监控&#xff0c;帮助分析趋…

国网B接口 USC安防平台 海康摄像机配置

国网B接口海康摄像机配置介绍 如下以海康DS-NACN6432I-GLN摄像机为例&#xff0c;配置国网B接口设备接入流程&#xff0c;海康摄像机的固件版本为 V5.6.11 build 210109 210107。该设备为球机&#xff0c;支持国网B接口云台控制功能。图标编号可以对应二者的配置。 注意 同一…

Unity3D类似于桌面精灵的功能实现

前言&#xff1a; 由于最近在做游戏魔改&#xff0c;很多功能在游戏里面没法实现&#xff08;没错&#xff0c;说的就是排行榜&#xff09;&#xff0c;所以准备用Unity3D开发一个类似于桌面精灵的功能部件&#xff0c;实现效果如下&#xff1a; PS&#xff1a;有需要定制的老…

Java | Leetcode Java题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; class Solution {public boolean canCross(int[] stones) {int n stones.length;boolean[][] dp new boolean[n][n];dp[0][0] true;for (int i 1; i < n; i) {if (stones[i] - stones[i - 1] > i) {return false;}}for (int i 1…

使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用

vLLM 是一个简单易用的 LLM 推理服务库。加州大学伯克利分校于 2024 年 7 月将 vLLM 作为孵化项目正式捐赠给 LF AI & Data Foundation 基金会。欢迎 vLLM 加入 LF AI & Data 大家庭&#xff01;&#x1f389; 在主流的 AI 应用架构中&#xff0c;大语言模型&#xff0…

电离层闪烁

电离层闪烁&#xff0c;有的时候有有的时候无&#xff0c;但是经常出现&#xff0c;导致导航信号的振幅和相位发生变化&#xff0c;影响导航精度。使得载噪比降低。定位精度降低。 电离层闪烁的大小从几米到几百米&#xff0c;所以在使用RTK时&#xff0c;就算是相隔很近的基站…

OKHttp实现原理分享

前言介绍 大约在2年半之前&#xff0c;就想写一篇关于OKHttp原理的文章&#xff0c;一来深入了解一下其原理&#xff0c;二来希望能在了解原理之后进行更好的使用。但是因为种种原因&#xff0c;一直无限往后推迟&#xff0c;最近因为我们情景智能半个月一次的分享轮到我了&…

【鸿蒙】HarmonyOS NEXT星河入门到实战1-开发环境准备

目录 一、达成目标 二、鸿蒙开发环境准备 2.1 开发者工作下载 2.2 解压安装 2.3 运行配置安装node.js和SDK 2.4 开始创建第一个项目 2.5 预览 2.5.1 预览遇到的问题&#xff08;报错&#xff09; 2.5.2 修改内容查看预览 三、备用下载地址&#xff08;如果下载是4.X版…

Prism库:详解其核心组件和使用方法

Prism库简介 Prism库是一个开源项目&#xff0c;由 Microsoft 社区开发和维护。它是一组用于创建 WPF、UWP 和 Xamarin 应用程序的工具和库&#xff0c;提供了一种基于模块化和依赖注入的架构模式&#xff0c;同时它提供了一系列的工具&#xff0c;帮助开发人员构建可扩展、可…

MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差

系列文章目录 文章目录 系列文章目录前言MATLABSTM32调用DSPSTM32中实现FFT关于初相位 FPGA 前言 最近在学习如何在STM32中调用FFT MATLAB 首先对FFT进行一下说明&#xff0c;我们输入N个点的数据到FFT中&#xff0c;FFT会返回N个点的数据&#xff0c;这些数据都是复数&#…

ctfshow-PHP反序列化

web254 源码 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com //mytime 2023-12-4 0:22 */ error_reporting(0)…

MATLAB | R2024b更新了哪些好玩的东西?

Hey, 又到了一年两度的MATLAB更新时刻&#xff0c;MATLAB R2024b正式版发布啦&#xff01;&#xff0c;直接来看看有哪些我认为比较有意思的更新吧! 1 小提琴图 天塌了&#xff0c;我这两天才写了个半小提琴图咋画&#xff0c;MATLAB 官方就出了小提琴图绘制方法。 小提琴图…