热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

梯度下降_梯度下降

篇首语:本文由编程笔记#小编为大家整理,主要介绍了梯度下降相关的知识,希望对你有一定的参考价值。梯度下降:应用最

篇首语:本文由编程笔记#小编为大家整理,主要介绍了梯度下降相关的知识,希望对你有一定的参考价值。



梯度下降:应用最广泛的求极小值算法。

假设一线性回归模型,它的代价函数为 J(θ01) 。我们的目标是最小化这个代价函数,而要得到最小的代价函数值关键就在于正确选取 θ0和θ1的值,于是我们引出梯度下降算法。

步骤:1. 初始化θ0和θ1的值,通常取0。

   2. 不断改变θ0和θ1的值,试图通过这种改变使得 J(θ01) 变小,直到找到 J(θ01) 的最小值(也可能是局部最小值)。

 


将上述步骤可视化

技术图片技术图片

 

 

左图中,我们初始化θ0和θ1的值得到第一个 J(θ01) 点 ,在左边红色区域。假设红色区域都是一个个小山峰,我们处于第一个点的位置,现在目标是用小碎步尽快下山,环顾四周后我们可以找到下一个点,注意是下降最快的方向(坡度最陡),以此方法一直下降,知道下降到深蓝色区域里的局部最低点。

右图中亦是如此,只是θ0和θ1的初始值不同,导致第一个J(θ01) 点 不同,下降速度最快的方向也不一样,因此到达的最低点也不同。

 


公式

 

技术图片

式子中,:= 符号是赋值运算符,表示把符号后面的值赋予给符号后面的值,α 表示学习率,以下山的例子就是步子的大小,α 越大,下山时步子迈得就越大,下降速度越快。

 

技术图片

在梯度下降中,我们使用公式更新 θ和 θ的值,在更新时,我们应当同时更新 θ和 θ的值。

 

技术图片

如果不同时更新,如上图,前一个更新后的 θ会影响到 temp1 的导数项技术图片,继而影响更新θ

 

 

为了更容易理解梯度下降过程,我们假定 hθ(x) = θ1x, 代价函数为 J(θ1) ,可以得到 J(θ1) 与 θ关系图如下

技术图片

 

梯度下降过程即:

首先选取 θ1 的值,得到对应的 J(θ1) ,标记在上图中红点位置处。现以红点作切线(上图中红色实线),此时切线的斜率即公式中的导数项,切线斜率再与学习率 α (正数)相乘  ,最后用θ1减去它们相乘后的值,计算出的值即第一次更新后的θ(向左移动),此时也可以发现对应的 J(θ1) 位置会往左边移动,直到运动到最小值(局部最小值)。移动速度跟学习率 α 有关,如果 α 过大,每次移动也会跳跃得越大,很容易越过最小值,无法收敛,甚至发散。而事实上,在梯度下降过程中,学习率 α 会自动调整,越靠近最小值, α 会越小,移动越慢。

如果初始化 θ后,得到对应的 J(θ1) 本身就处在最小值位置,再使用梯度下降算法, θ1 将不会更新,因为此时导数项为0,J(θ1) 也不会发生变化。

 


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 距离11月的软考还有不到五个月的时间,考试将于11月5日至6日举行。许多朋友对软考的具体情况还不太了解:它是什么?有何用途?本文将为你详细解答。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
author-avatar
峰吹云飞_974
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有