斯坦福CS229机器学习笔记-Lecture2-线性回归+梯度下降+正规方程组

本文主要是介绍斯坦福CS229机器学习笔记-Lecture2-线性回归+梯度下降+正规方程组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写成博客分享出来

          博文中部分图片和公式都来源于CS229官方notes。

          CS229的视频和讲义均为互联网公开资源


Lecture 2

这一节主要讲的是三个部分的内容:

·Linear Regression(线性回归)

·Gradient Descent(梯度下降)

·Normal Equations(正规方程组)

 

1、 线性回归

首先给了一个例子,如何根据房屋的大小等数据,来预测房屋的价格

引入一些符号以便于叙述:

m表示训练样本的数目

x表示输入变量/特征

y表示输出变量/目标变量

xy- 表示一个训练样本

i个训练样本 x(i),y(i)  注意i不是指数,而是上标而已

 

在 监督学习中,一般是如下过程:

给定一个训练集,通过学习算法,得到一个函数:h (hypothesis)

这样我们的新的输入x就能通过h函数得到一个预测:y


如果我们用一个线性模型来刻画y和x的关系,(当然y和x的关系肯定可以用其他模型来刻画,只不过吴老师这里在讲线性模型而已。其实, 生活中很多关系的确是可以用线性模型进行简单的刻画)一般就写成如下形式:

这里的x的右下标,代表这个样本的第几个特征右上标才表示第几个样本。比如第i个房子可能有面积、和卧室数目这两个特征,那么x(i)就是一个二维的向量x(i) =(x1(i) ,x2(i)

也就是说,右下标刻画了输入向量x的维度。

 

Θ是参数-parameter,有时候我们其实也叫它权重-weight每一个theta刻画了它对应的这个特征对于结果的影响力

我举个例子,这里如果θ1= 100,而θ2 = 10,那么很明显,说明x1(房屋面积)对于房屋最终价格的影响就大于x2(卧室数目)的影响,因为x1如果增加1,那么总价格就增加100,如果x2增加1,总的价格才增加10。所以theta的维度应与输入x的维度相对应。

我们最终的目的其实就是希望得到(学习到)合适的θ参数,来刻画 y 和 x的关系

如果增设x0等于1,(表示截距),那么就可以得到泛化形式:

n – 表示样本的维度,即每一个输入样本有多少特征需要考虑

 

那么如何去学习呢?我们监督学习还提供了监督信息,就是 这里的y,每一个样本其实一对(x,y),如果我们把已有的x输入到h函数,那么就希望得到已有的x所对应的正确的y,这才说明h函数时可靠的。所以得到如下另一个函数:

Cost Function/Loss Function (代价函数/损失函数)


将 拥有训练集x作为输入的 h函数的输出 减去 已知正确的 y,使得他们的差的平方 最小(最理想的情况当然是0),那么说明h至少能对我训练集的x做出好的预测。至于最前面为什么乘以一个 1/2 , 完全是为了对其求导时方便而已,对于整个函数值是大是小没有影响。

实际上,上面这个函数叫做 ordinary least square普通最小二乘法,字面意思,就是让函数的平方最小呗。


2、 梯度下降

第一步中我们已经得到了损失函数,那么如何来选择θ来使得损失函数值最小呢?

于是就来到了梯度下降的环节了。通过从山顶下坡的例子来理解:

从山顶上选一点,一步一步往下走,一步一步似爪牙,似魔鬼的步伐~摩擦摩擦


就走到了最低点,而且还是最快地走到了最低点

 

当然也有可能走到局部最低点,但你也不知道其他地方还有更低的点,这是可能的

为什么说这样子走得最快呢?微积分中我们已经学过:函数在一点沿梯度方向的变化率最大,最大值为该梯度的模

所以我们根本不需要环顾四周去试探方向,因为梯度方向就是最陡的方向,我们沿着负梯度方向前进,自然就下降的最快。这样得到theta的更新公式:


其中α – 称为 learning rate,学习率,就是我沿着负梯度方向,每次迈多大一步,这个参数是手动设置的。

将损失函数代入并化简:

所以对于单个的训练样本,就得到如下的更新规则:

实际上,这个更新规则也叫做:LMS - least mean square – 最小均方算法

batchgradient descent,批量梯度下降

而对于我们训练集的所有样本来说,我们需要考虑到每个样本, “ You're going to perform a sum over your M training examples. “ 

注意:下式中把括号内取反,所以α的符号变正,并不是写错


Stochasticgradient descent随机梯度下降

(Sometimes we call it incremental gradient descent 增量梯度下降)

 

但是当我们的训练集十分大的时候,比如有百万个数据,此时每一步更新如若是要考虑所有的样本,就会显得很麻烦,计算量变大,所以提出随机梯度下降,算法如下:

 

每一次只考虑第i个example,而不是需要遍历全部的M个样本。和批量梯度下降对比,你会发现α后面并没有求和符号来对i求和,反而是再外层多了一个对于i的循环,即每次更新时只考虑一个样本。

所以对于大规模数据SGD算法下降速度会快很多,但是问题在于它可能不会精确收敛到全局最小值。但是在实际应用中,这个值十分接近全局最小值,所以对于实际应用是可接受的。

 

3、  正规方程组

梯度下降算法,实际是一种迭代算法,通过不断更新theta使其逼近最合适的值。但是还存在其他的方法,不迭代,求出合适的theta值。

 

首先介绍一些线性代数的知识:

若定义 f 是使得矩阵 映射为 实数的 一个函数,那么f关于矩阵A的梯度表示为:



可见f关于矩阵A的梯度也是一个和A同样size的矩阵,举例来说:



同时补充一下线性代数中的知识:关于矩阵的trace 迹,有:


如若 是方阵:



这些其实都不用记,就是吴老师写出来以便后面证明一个式子时要用到,了解即可

 

那么我们现在开始推导,如何求出theta的取值。

先要把损失函数化成矩阵和向量的形式:




所以对损失函数求导:


我备注一下详细求解过程



至此,Lecture 2 三部分的内容就记录完毕~

这篇关于斯坦福CS229机器学习笔记-Lecture2-线性回归+梯度下降+正规方程组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析