斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程)

本文主要是介绍斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

假设函数定义
假设函数,猜一个 x->y 的类型,比如 y = ax + b,随后监督学习的任务就是找到误差最低的 a 和 b 参数

在这里插入图片描述
有时候我们可以定义 x0 = 1,来让假设函数的整个表达式一致统一

在这里插入图片描述
如上图是机器学习中的一些术语

在这里插入图片描述
额外的符号,使用 (xi, yi) 表示第 i 个样本

n 表示特征数量 (在房屋价格预测问题中,属性/特征有两个:房子面积和卧室数量,因此这里 n = 2)

在这里插入图片描述
监督学习的过程就是选择合适的参数,来让假设函数的输出和样本输出相近(针对训练集)

在这里插入图片描述
房屋预测案例中的目标函数,最小化误差平方和

在这里插入图片描述
我们通常会在目标函数旁边放个 1/2,这是为了后边简化求导计算

在这里插入图片描述

我们通常使用梯度下降法来选取更加合适的 theta参数 来优化目标函数,如上图是梯度下降法中的 “baby step”

这里的 阿尔法 就是学习速率

在这里插入图片描述
如图,是对目标函数的求导 (由于对几个项的和求导,等于它们的导数和,所以这里我们先不 care 那个 sum(sigma) 符号)

在这里插入图片描述

如图,是对求导公式的后续转换

在这里插入图片描述
如图,这是对目标函数求导的最终公式的其中一项 (这里只对 theta_j 求导)

在这里插入图片描述

这也是最后统合得到的求导公式,对每一个样本 i 进行针对 theta_j 的求导

接下来要做的就是,重复 updating theta_j,直到目标函数收敛

在这里插入图片描述
由于我们的目标函数对于每个 theta_j 都是二次函数,所以这是一个凸函数,它是一个大碗,它只有一个全局最优

在这里插入图片描述
也可以用等高线图来表示

运用高中的一些数学知识,你会发现,最陡的防线和等高线(椭圆)的切线是90度

调试学习率的一些经验:
如果你发现目标函数在增加而不是减少,那通常说明学习率太大了(超调)
可以尝试 O1, O2, O4, O8 尝试不同的值

在这里插入图片描述

另一种可视化学习过程的方式是,看到曲线(假设函数)一点点变化

刚刚提到的机器学习方法中,梯度下降需要用到训练集中所有的样本,来计算梯度(所以也叫批量梯度下降法)。在训练集很大的情况下,这会变得昂贵,因此我们需要做些改变

在这里插入图片描述
另一种快得多的方式是随机梯度下降法,它遍历每一个样本 i,随后针对这单个样本对所有的 theta_j 做梯度下降

(原先的方法中,我们每做一个 tiny step 都需要扫描一次所有的样本;而 SGD 中,我们每走一个 step 只需要扫描一个样本,因此快得多)

一个更直观的解释 SGD 的方式是,一开始我的 theta 参数是随机的,然后我看到了第一个样本 x1,随后我针对这个 x1 修改的我 theta,接着我看到了 x2,我再针对 x2 修改我的 theta。在等高线图中,你可能会看到,参数并没有沿着 90 度的方向下降,而是以一种更曲折的方式下降

SGD 通常不会收敛,它会振荡

还有一种下降方法是“小批量梯度下降法”,一次遍历100个样本

还有一种实践中的方法(一点点减少学习速率)

线性回归没有局部最优(在它的目标函数是误差平方和时),只有全局最优。所以,实际上你可以使用一个矩阵去表示它的参数,求cost function(目标函数)对于 参数矩阵的求导,随后让导数 = 0,求这个位置上的导数矩阵,即可直接得到全局最优解。这也叫做正态方程,这个方法仅适用于线性回归

在这里插入图片描述
根据吴恩达的推导,正态方程,也就是最终最优的 theta 可以通过这么一个公式求出来

如果发现 X 不可逆,那么通常意味着有多余的 features,你有某些 features 是线性相关的,你可以使用伪逆,或者找出哪些特征是线性相关的

关于怎么选择学习率:这非常依赖经验,通常我们尝试许多个不同的值,然后选择一个

这篇关于斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394793

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam