下面是机器学习的《监督式学习》课程中“逻辑回归”单元的内容,感兴趣的同学可以点击最下方的 阅读原文 购买。
梯度下降法是用来计算函数最小值的。它的思路很简单,想象在山顶放了一个球,一松手它就会顺着山坡最陡峭的地方滚落到谷底:
凸函数图像看上去就像上面的山谷,如果运用梯度下降法的话,就可以通过一步步的滚动最终来到谷底,也就是找到了函数的最小值。
1 动机
先解释下为什么要有梯度下降法?其实最简单的二维凸函数是抛物线 ,很容易通过解方程 求出最小值在 处:
只是有一些凸函数,比如下面这个二元函数(该函数实际上是逻辑回归的经验误差函数,在监督式学习中确实需要求它的最小值):要求它的最小值点就需要解如下方程组:
这个方程组实在太复杂了,直接求解难度太高,好在 的图像就像一座山谷:
所以可以用梯度下降法来找到 的谷底,也就是最小值。
2 最简单的例子
梯度下降法在本文不打算进行严格地证明和讲解,主要通过一些例子来讲解,先从最简单的凸函数 开始讲起。
2.1 梯度向量
假设起点在 处,也就是将球放在 :
它的梯度为 1 维向量: 这是在 轴上的向量,它指向函数值增长最快的方向,而 就指向减少最快的方向:
将 也看作 1 维向量 ,通过和 相加,可以将之向 移动一段距离得到新的向量 : 其中 称为步长,通过它可以控制移的动距离,本节设 ,那么: 此时小球(也就是起点)下降到了 这个位置:
2.2 迭代
的梯度为: 继续沿着梯度的反方向走: 小球就滚到了更低的位置:
重复上述过程到第 10 次,小球基本上就到了最低点,即有 :
2.3 梯度下降法
把每一次的梯度向量 的模长 列出来,可以看到是在不断减小的,因此这种方法称为梯度下降法:
这也比较好理解,当最终趋向于 0 时有: 所以梯度下降法求出来的就是最小值(或者在附近)。
3 步长
上面谈到了可以通过步长 来控制每次移动的距离,下面来看看不同步长对最终结果的影响。
3.1 过小
如果设 就过于小了,迭代 20 次后离谷底还很远,实际上 100 次后都无法到达谷底:
3.2 合适
上面例子中用的 是较为合适的步长,10 次就差不多找到了最小值:
3.3 较大
如果令 ,这个时候会来回震荡(下图看上去只有两个点,实际上在这两个点之间来来回回):
3.4 过大
继续加大步长,比如令 ,反而会越过谷底,不断上升:
3.5 总结
总结下,不同的步长 ,随着迭代次数的增加,会导致被优化函数 的值有不同的变化:
寻找合适的步长是个手艺活,在工程中可以将上图画出来,根据图像来手动调整:
4 三维的例子
原理都介绍完了,下面再通过一个三维的例子来加强对梯度下降法的理解。假设函数为:
其图像及等高线如下(等高线中心的蓝点表示最小值):
下面用梯度下降法来寻找最小值。
4.1 前进一步
设初始点为 ,此时梯度为: 令步长 ,那么下一个点为: 可以看到向最小值方向前进了一步:
4.2 迭代
同样的方法找到下一个点: 此时又向最小值靠近了:
如此迭代20次后,差不多找到了最小值:
我们通过通俗易懂、图形化的方式,对机器学习中的《监督式学习》进行了精讲,目前还在连载中,可以享受早鸟价格,可以点击下面的链接购买:
👉 也可以直接点击下面这个图片购买机器学习的前置课程,《线性代数》、《单变量微积分》、《多变量微积分》、《概率论与数理统计》:
最易懂的数学知识库:
马同学图解数学
看得懂的数学
微信公众号ID :matongxue314
原网址: 访问
创建于: 2021-01-14 11:02:02
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论