无约束最优化问题的求解算法

无约束最优化问题的求解算法

使用梯度下降法目的和原因
目的

        梯度下降法(Gradient Descent)是一个算法,但不是像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法求解出最优解的,所谓的通用就是很多机器学习算法都是用它,甚至深度学习也是用它来求解最优解。所有优化算法的目的都是期望以最快的速度把模型参数θ求解出来,梯度下降法就是一种经典常用的优化算法。

原因

        前面利用θ的解析解公式求解出来的解我们就直接说是最优解的一个原因是MSE这个损失函数是凸函数,但是如果模型对应的损失函数是非凸函数的话,设置梯度为 0会得到很多个极值,甚至是极大值都有可能。

        之前利用θ的解析解公式求解的另一个原因是特征维度并不多,但是细致分析一下公式里面 XT X 对称阵是 N 维乘以 N 维的,复杂度是是 O(N)的三次方,换句话说,就是如果你的特征数量翻倍,你的计算时间大致上要 2 的三次方,8 倍的慢。比如,4 个特征 1 秒,8 个特征就是 8 秒,16 个特征就是 64 秒,当维度更多的时候运算复杂度指数增长耗费大量时间硬件资源

        所以其实之前一步求出最优解并不是机器学习甚至深度学习常用的手段,如下图,之前我们是设置梯度为 0,反过来求解最低点的时候θ是多少,而梯度下降法是一点点去逼近最优解,通过设置一个学习率定义每次移动幅度可以把学习率理解步长,梯度下降法随机初始化一个值(选择损失函数上的一个点)作为‘开始地方’,然后一直尝试逼近损失函数极小值(沿着损失函数负梯度的方向去走)

梯度下降法的思想

        比如你问一个刚认识的人年龄是多少,对方让你猜,还说你每猜完一次会告诉你是猜高了还是猜低了,这样你就可以奔着对的方向一直猜下去,最后总有一下你能猜对。梯度下降法就是这样的,你得去试很多次,而且是不是我们在试的过程中还得想办法知道是不是在猜对的路上,说白了就是得到正确的反馈再调整然后继续猜才有意义

       在进行这样的猜测时,一开始第一下都是随机瞎猜一个,那对于计算机来说就是随机取值,也就是说你有q =W1...Wn,这里θ强调一下不是一个值,而是一个向量就是一组 W,一开始的时候我们通过随机,把每个值都给它随机出来。有了θ我们可以去根据算法就是公式去计算出来y',eg y'=Xθ,接下来计算y'与真实值和真实 y 之间的损失,比均方误差MSE然后调整θ再去计算MSE直到求出MSE最小视为收敛

        这个调整正如咱们前面说的肯定不是瞎调整,当然这个调整的方式很多,你可以整体θ

        每个值调大一点,也可以整体θ每个值调小一点,也可以一部分调大一部分调小。第一次q 0我们可以得到第一次的 MSE 就是 Loss0,调整后第二次q1对应可以得到第二次的 MSE就是 Loss1,如果 loss 变小是不是调对了,就应该继续调,如果 loss 反而变大是不是调反了,就应该反过来调。直到 MSE 我们找到最小值时计算出来的q'就是我们的最优解。这个就好比道士下山,我们把 loss 看出是曲线就是山谷,如果走过来就再往回调,所以是一个迭代的过程。

梯度下降法公式

        这里梯度下降法的公式就是一个式子指导计算机迭代过程中如何去调整θ,不需要推导

和证明,就是总结出来的

Wj t+1 =Wj t-h ×gradientj

        这里的 Wj 就是θ中的某一个 j=0…n,这里的η就是图里的 learning step,很多时候也叫学习率 learning rate,很多时候也用α表示,这个学习率我们可以看作是下山迈的步子的大小,步子迈的大下山就快。

        学习率一般都是正数,那么在山左侧梯度是负的,那么这个负号就会把 W 往大了调,如果在山右侧梯度就是正的,那么负号就会把 W 往小了调。每次 Wj 调整的幅度就是η*gradient,就是横轴上移动的距离。

        如果特征或维度越多,那么这个公式用的次数就越多,也就是每次迭代要应用的这个式子 n+1 次,所以其实上面的图不是特别准,因为θ对应的是很多维度,应该每一个维度都可以画一个这样的图,或者是一个多维空间的图。

        负梯度的含义就是沿着函数下降方式调整

如果特征或维度越多,那么这个公式用的次数就越多,也就是每次迭代要应用的这个式子 n+1 次,所以其实上面的图不是特别准,因为θ对应的是很多维度,应该每一个维度都可以画一个这样的图,或者是一个多维空间的图。

每个θ对应一个特征维度

由此也反映出并不是某个θ得到最优解就是我们所要求的结果,而是特征空间里的每一个θ都求到一个最优解(随着问题复杂程度的增加,特征空间的维度越来越多,这往往很困难)或者是都在可接受范围内的合适解才是我们要的结果。

学习率
学习率的设置

        根据我们上面讲的梯度下降法公式,我们知道η是学习率,设置大的学习率 Wj 每次调整的幅度就大,设置小的学习率 Wj 每次调整的幅度就小,然而如果步子迈的太大也会有问题其实,俗话说步子大了容易扯着蛋,可能一下子迈到山另一头去了,然后一步又迈回来了,使得来来回回震荡。步子太小呢就一步步往前挪,也会使得整体迭代次数增加。

合理的设置学习率才能进一步促进模型的收敛。

        学习率的设置是门学问,一般我们会把它设置成一个比较小的正整数,0.1、0.01、0.001、0.0001,都是常见的设定数值,一般情况下学习率在整体迭代过程中是一直不变的数,但是也可以设置成随着迭代次数增多学习率逐渐变小,因为越靠近山谷我们就可以步子迈小点,省得走过,还有一些深度学习的优化算法会自己控制调整学习率这个值

全局最优解

        如果损失函数是非凸函数,梯度下降法是有可能落到局部最小值的,所以其实步长不能设置的太小太稳健,那样就很容易落入局部最优解,虽说局部最小值也没大问题,因为模型只要是堪用的就好,但是我们肯定还是尽量要奔着全局最优解去。

梯度下降法流程

梯度下降法几步流程就是猜正确答案的过程:

1. 随机猜,Random 随机θ,随机一组数值 W0…Wn

2. 求梯度,为什么是梯度?因为梯度代表曲线某点上的切线的斜率,沿着切线往下下降就相当于沿着坡度最陡峭的方向下降

3. if g<0, theta 变大,if g>0, theta 变小

4. 判断是否收敛 convergence,如果收敛跳出迭代,如果没有达到收敛,回第 2 步继续

Q?

1. 如何随机?

2. 怎么求梯度?

3. 如何调整θ或 W?

4. 怎么判断收敛?

A?

1. np.random.rand()或者 np.random.randn()

2. 

3. 

4. 判断收敛这里使用 g=0 其实并不合理,因为当损失函数是非凸函数的话 g=0 有可

能是极大值,所以其实我们判断 loss 的下降收益更合理,当随着迭代 loss 减

小的幅度即收益不再变化就可以认为停止在最低点,那么就认为模型收敛

损失函数的导函数

        下面公式推导 J(θ)是损失函数,q j 是某个特征维度 Xj 对应的权值系数,也可以写成 Wj。这里我们还是在接着之前的多元线性回归往下聊,所以损失函数是 MSE,所以下面公式表达的是因为我们的 MSE 中 X、y 是已知的,θ是未知的,而θ不是一个变量而是一堆变量,所以我们只能对含有一推变量的函数 MSE 中的一个变量求导,即偏导,下面就是对θj 求偏导。

        x**2的导数是2x,根据链式法则内外得到第二行接下来因为偏导所以θ无关变量视作常数导数0忽略

分别去对每个维度 W0...Wn 求偏导,即可得到所有维度对应的梯度值。

后续继续聊聊三种常用梯度下降法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VideoBooth: Diffusion-based Video Generation with Image Prompts

VideoBooth: Diffusion-based Video Generation with Image Prompts 概括 文章提出了一个视频生成模型VideoBooth&#xff0c;输入一张图片和一个文本提示词&#xff0c;即可输出保持图片中物体且符合文本提示词要求的视频。 方法 粗-细两阶段设计&#xff1a;1&#xff09;…

AndroidAutoSize实战教程:今日头条屏幕适配方案详解

如何在项目中结合 AndroidAutoSize 来进行今日头条屏幕适配&#xff0c;我会具体讲解如何用 AndroidAutoSize 实现屏幕适配&#xff0c;并结合 Kotlin 代码举例分析。 通过 AndroidAutoSize 库来实现屏幕适配&#xff0c;确保在不同的屏幕尺寸、分辨率、密度下&#xff0c;应用…

为什么使用3DMAX插件会出现系统崩溃?

使用3DMAX插件时出现系统崩溃&#xff0c;可能涉及多个方面的原因。以下是一些主要的原因及相应的解决方案&#xff1a; 一、插件兼容性问题 版本不兼容&#xff1a; 旧版插件可能无法与最新版本的3DMAX完全兼容&#xff0c;导致系统崩溃。解决方案&#xff1a;更新插件至最新…

[pdf,epub]228页《分析模式》漫谈合集01-45提供下载

《分析模式》漫谈合集01-45的pdf、epub文件提供下载。已上传至本号的CSDN资源。 如果CSDN资源下载有问题&#xff0c;可到umlchina.com/url/ap.html。 已排版成适合手机阅读&#xff0c;pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》&#xff1f; ★[缝合故事]…

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo)

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 目录 Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 一、简单介绍 二、PyTorch 三、CNN 1、神经网络 2、卷…

HarmonyOS开发:关于签名信息配置详解

目录 前言 签名信息的重要性 签名的方式 自动化签名 1、连接真机 2、选择 手动签名 &#xff08;一&#xff09;生成密钥和证书请求文件 &#xff08;二&#xff09;申请调试证书 &#xff08;三&#xff09;注册调试设备 &#xff08;四&#xff09;申请调试Profil…

Java的Stirng、StringBuilder、StringJoiner

黑马程序员Java个人笔记 目录 字符串比较 比较 boolean equals boolean equalsIgnoreCase 键盘录入和定义的字符串的比较 StringBuilder 打印 ​编辑 添加元素 反转 获取长度 toString 练习 对称字符串 拼接字符串 StringJoiner 概述 ​编辑 构造方法 只有…

fastadmin 后台插件制作方法

目录 一&#xff1a;开发流程 二&#xff1a;开发过程 &#xff08;一&#xff09;&#xff1a;后台功能开发 &#xff08;二&#xff09;&#xff1a;功能打包到插件目录 &#xff08;三&#xff09;&#xff1a;打包插件 &#xff08;四&#xff09;&#xff1a;安装插件…

视频自学笔记

一、视频技术基本框架 二、视频信号分类 2.1信号形式 2.1.1模拟视频 模拟视频是指由连续的模拟信号组成的视频图像&#xff0c;以前所接触的电影、电视都是模拟信号&#xff0c;之所以将它们称为模拟信号&#xff0c;是因为它们模拟了表示声音、图像信息的物理量。摄像机是获…

Docker单机网络:解锁本地开发环境的无限潜能

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

Golang 八股(持续补充...)

目录 进程、线程、协程 Go语言——垃圾回收 GC的触发条件 GC调优 GMP调度和CSP模型 Groutine的切换时机 Goroutine调度原理 Goroutine的抢占式调度 Context结构原理 Context原理 Golang内存分配机制 竞态、内存逃逸 golang内存对齐机制 golang中new和make的区别&a…

手机中的核心SOC是什么?

大家好&#xff0c;我是山羊君Goat。 常常听说CPU&#xff0c;中央处理器等等的&#xff0c;它是一个电脑或单片机系统的核心&#xff0c;但是对于SOC可能相比于CPU了解的人没有那么广泛。 所以SOC是什么&#xff1f; SOC全称是System on Chip&#xff0c;就是片上系统&#…

绿虫光伏设计系统:清洁能源的未来

煤炭、石油、天然气是我们现在依赖的重要能源&#xff0c;但这些能源难以再生&#xff0c;而且开采过程中会产生污染。太阳能发电作为清洁能源的一种重要形式&#xff0c;受到了越来越多的关注。绿虫光伏发电系统&#xff0c;不仅考虑到其发电效率&#xff0c;还可以考虑其经济…

R语言 | ComplexHeatmap 画注释若干基因的热图 //todo

一般顺序&#xff1a; 先用 pheatmap 聚类再用 ComplexHeatmap 做可视化&#xff1a;添加顶部、左侧聚类颜色&#xff0c;显示若干代表性基因 genec("Gene18", "Gene19", "Gene7","Gene3", "Gene9", "Gene15") …

springmvc的简介

SpringMVC的介绍与第一个程序的开发步骤 1. 介绍 SpringMVC是一个实现了MVC架构模式的Web框架&#xff0c;底层基于Servlet实现。 SpringMVC已经将MVC架构模式实现了&#xff0c;因此只要我们是基于SpringMVC框架写代码&#xff0c;编写的程序就是符合MVC架构模式的。&#x…

Java Web 4 Maven

本文详细介绍了Maven的用途&#xff0c;包括依赖管理、项目结构统一和构建流程标准化&#xff1b;然后讲解了Maven的安装、IDEA中的集成以及依赖管理的核心概念。 1 什么是Maven&#xff1f; 什么是apache&#xff1f; 2 Maven的作用 &#xff08;1&#xff09;方便依赖管理 有…

基于SpringBoot+Vue的宠物咖啡馆系统-无偿分享 (附源码+LW+调试)

目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 &#xff08;1&#xff09;宠物订…

flex: 1 display:flex 导致的宽度失效问题

flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景&#xff0c;详情项每行三项分别占33%宽度&#xff0c;每项有label字数不固定所以宽度不固定&#xff0c;还有content 占满标签剩余宽度&#xff0c;文字过多显示省略号&#xff0c; 鼠标划入展示…

利用tablesaw库简化表格数据分析

tableaw是处理表格数据的优秀工具。它提供了一组强大而灵活的功能&#xff0c;使操作、分析和可视化数据表变得容易。在这篇博文中&#xff0c;我们将介绍tableaw的主要特性、如何使用这些特性&#xff0c;以及如何使用tableaw处理表格数据的一些示例。 tablesaw简介 tableaw…

【看海的算法日记✨优选篇✨】第二回:流动之窗,探索算法的优雅之道

&#x1f308; 个人主页&#xff1a;谁在夜里看海. &#x1f525; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 一、算法思想 双指针 滑动窗口 二、具体运用 1.⻓度最⼩的⼦数组 算法思路 算法流程 代码 2.最⼤…