吴恩达学习笔记—— 二、单变量线性回归

二、单变量线性回归

2.1 模型表示

m代表训练集中实例的数量

x代表特征/输入变量

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

(x,y)代表训练集中的实例

(x(i),y(i))(x^{(i)}, y^{(i)})代表第i个观察实例

h 代表学习算法的解决方案或函数也称为假设(hypothesis

2.2 代价函数

假设函数:hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \theta_1x

参数:θ0,θ1\theta_0 , \theta_1

代价函数(cost function): J(θ0,θ1)=12mi=1mhθ(x(i))y(i))2J(\theta_0 , \theta_1) = \frac{1}{2m} \sum\limits_{i = 1}^{m}h_\theta(x^{(i)}) - y^{(i)})^2

目标函数:minimizeJ(θ0,θ1)minimize J(\theta_0 , \theta_1)

less function

loss function通常用于衡量单个样本其预测值和实际值的“差距”

既然loss function是用于衡量预测值和实际值之间的"差距",那么我们其实有很多的衡量手段,比如通过方差,如下: ϱ(y^(i),y(i))=ϱ(y^(i)y(i))2\varrho(\hat{y}^{(i)}, y^{(i)}) = \varrho(\hat{y}^{(i)} - y^{(i)})^2

但是,在logistic regression算法中使用方差的方式无法得到凸函数(convex),也就无法得到全局最小值,所以,我们在logistic regression中使用不同的loss function,如下:

ϱ(y^(i),y(i))=[y(i)logy^(i)+(1y(i))log(1logy^(i))]\varrho(\hat{y}^{(i)}, y^{(i)}) = -[y^{(i)}log\hat{y}^{(i)} + (1-y^{(i)})log(1-log\hat{y}^{(i)})]

需要注意的是,不论是哪个函数,都是针对单个样本的,所以都带有上标 (i)

cost function

cost function通常是针对样本集中的所有样本,而且是一个平均值。

cost function 是针对整个样本集的,因此它的计算公式需要将所有的loss function的结果进行加总然后求平均值,如下:

J(w,b)=1mi=1m[y(i)logy^(i)+(1y(i))log(1logy^(i))]J(w, b) = \frac{1}{m}\sum\limits_{i = 1}^{m}[y^{(i)}log\hat{y}^{(i)} + (1-y^{(i)})log(1-log\hat{y}^{(i)})]

优化目标

得到最小的cost function值

2.3 代价函数的直观理解I

只有一个参数时
吴恩达学习笔记—— 二、单变量线性回归
即优化目标为1

2.4 代价函数的直观理解II

是一个两个参数的实例,实际上与 一个参数的类似,但是生成的cost function会多出一维(这很容易理解)(即变成三维曲面)
吴恩达学习笔记—— 二、单变量线性回归
同样的,我们需要做的事情就是找出三维曲线中最小的值作为优化目标,当然,这个优化目标为二维的

2.5 梯度下降

那么我们如何找出上面说的优化目标呢,用到的就是梯度下降算法

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数的最小值

梯度下降背后的思想是:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
吴恩达学习笔记—— 二、单变量线性回归
想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。(不同的起点可能会导致不同的结果)

批量梯度下降(batch gradient descent)算法的定义:

θj:=θjαθjJ(θ0,θ1){\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left(\theta_0, \theta_1 \right)

实现:

temp0:=θ0αθ0J(θ0,θ1)temp0 := \theta_0 - \alpha \frac{\partial }{\partial {\theta_{0}}}J\left(\theta_0, \theta_1 \right)

temp1:=θ1αθ1J(θ0,θ1)temp1 := \theta_1 - \alpha \frac{\partial }{\partial {\theta_{1}}}J\left(\theta_0, \theta_1 \right)

θ0:=temp0\theta_0 := temp0

θ1:=temp1\theta_1 := temp1

其中 α\alpha 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。

实现梯度下降算法的微妙之处是所有参数需要同时更新。

一般来说先将参数都初始化成0

2.6 梯度下降的直观理解

吴恩达学习笔记—— 二、单变量线性回归

如果 α\alpha 太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点,所以如果 α 太小的话,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。

如果 α\alpha 太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果 α 太大,它会导致无法收敛,甚至发散。

如果将初始值放置在最低点,那么参数每次的变化将为0,但此时仍然进行着操作

在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,这时数值变化的也会变慢