Model and Cost Function

发布于 2024-06-20 00:40:56 字数 11454 浏览 24 评论 0

本课要点

  • linear regression
  • 监督学习的整个过程是什么样子的。

这有一个预测房屋价格的例子,其中房屋价格的数据集是这样的:

有一套 1250feet2 的房子,想要知道这套房子能卖多少钱。根据已有的数据需要构建一个模型,如果是直线型,根据这个数据集构建的模型大致是这样的:

从直线模型中可以得到大致 220000 美元。

这个例子被归类为监督学习,因为对于每个数据,都给出了“正确答案”,即:对于确定的房屋面积,房屋的价格是多少。更确切的说,是监督学习中的线性回归问题,回归是指:根据已有的数据,预测任意给定输入的输出值。对于这个立即就是房屋价格。

训练集

在监督学习中已有的数据集被称为训练集。对于预测房屋价格的例子,训练集就是已知的房屋面积和价格。

课程中使用到的符号

m : 训练集的数量,对于上面的例子。如果已知的房屋价格有 47 个,则 m=47. x : 输入值、也称作特征量 y : 输出变量,也称作目标量 (x, y) : 表示一个训练样本。为了指出某个训练样本,可以使用(x(i), y(i)) 表示第 i 个训练样本。

测试题

以上就是学习算减的工作流程,它大致是这样的:给学习算法(Learning Algorithm)喂一个数据集(Training Set),它将输出一个函数 h,(h 表示 hypothesis(假设),之所以这样叫是因为早期的机器学习资料中这样叫,现在成了机器学习的标准用语)。函数 h 是关于输入和输出的函数。对于上面的例子,输入为房屋的面积 x,输出为房屋的价格 y。h 是 x 到 y 的一个函数映射。

机器学习算法的重点是,如何得到这个函数 h,对于一个未知的线性函数,通常这样表示:

hθ(x) = θ0 + θ1x

该函数就是线性回归模型(Linear Regression),并且是线性回归中的单变量线性回归,这个变量就是 x。其中 θi被称为模型参数。

在单变量线性回归中如何计算 θ0 和 θ1

计算点变量线性回归的思路是,要想让这些点尽量和结果的线靠近,一个好的方法是计算点到直线的距离最小。这将求θ01转换成了一个最小化问题。

要使距离最小 就要求|hθ(x) - y| 最小,对于绝对值不好求,可以使用其平方 (hθ(x) - y)2

对于所有的已知数据集,我们希望算出所有的距离平均最小。因此就是求:

其中 m 就是数据集的数量。hθ(x(i)) = θ0 + θ1x(i) 要求θ0,θ1就变成了一个关于θ0,θ1的函数。对上面的函数进行改写:

To break it apart, it is 12 x¯ where x¯ is the mean of the squares of hθ(xi)−yi , or the difference between the predicted value and the actual value.

上面的式子也叫平方误差方程。

平方误差方程的样子 以下是为了对平方误差方程有一个直观的感受做的一个特化。

首先简单一点,将θ0 假设为 0,这时候 hθ(x) = θ1x。是一条经过原点的直线。此时平方误差函数变成一条关于θ1 的函数:

hθ(x) 是一条关于 x 的函数,而 J(θ1)是关于θ1 的函数。假设有这样一个数据集,(1,1),(2,2),(3,3)。θ1 取不同值时,hθ(x) 将取得不同的拟合效果,此时 J(θ1)也将对应的取得不同的值。θ1,取-0.5,0,0.5,1,1.5,2,2.5 时,J(θ1)将得到如下的点。将它们用一条曲线连接起来,可以得到一条开口向上的抛物线。

看了单个变量的平方误差函数之后,来看一下θ0 和θ1,两个变量时平方误差函数的样子。 在变量时一个的时候,取得的是一个抛物线,而对于两个变量,它将变成一个三维的抛物面。类似

随着θ0 和θ1 的改变,J(θ1,θ0) 将得到曲面上不同点的值。三维曲面还有另一种表示方法,那就是轮廓图(contour plot 或 contour figure 意思一样)。想象着用一个平行于θ0 和θ1 面的平面去截这个曲面,得到的是一个个圆环,圆环上所有 J(θ1,θ0) 点的值都是相同的。

Parameter Learning

在学习了平方误差函数之后,为了取得函数的最小值,将用到梯度下降算法(gradient descent),用于取得平方误差函数的最小值。梯度下降是很常用的算法,它不仅用在线性回归上,实际上它被用在机器学习的诸多领域中。在后面课程中,为了解决其他线性问题,也将用梯度下降法最小化其他函数。这里将使用梯度下降算法来最小化平方误差函数。 问题概述:对于函数 J(θ0, θ1),也许是线性回归函数,也许是其他类型函数。要使其最小化,需要使用一个算法。梯度下降算法可以应用于多种多样的问题求解,例如对于函数 J(θ0,θ1,θ2 ...θn)希望最小化该函数,而梯度下降算法就可以应用于这种更多维度的情况。为了简介,以下使用示例只使用了两个参数。

梯度下降算法的核心思想: 对于函数 J(θ0, θ1), 要求得:

$$\begin{gather} \min_{\theta0, \theta1}J(\theta0, \theta1) \end{gather}$$

Outline:

  • Start with some $\theta_0, \theta_1$
  • Keep changing $\theta_0, \theta_1$ to reduce $J(\theta_0, \theta_1)$ until we hopefully end up at a minumum。

首先要做的,就是对 $\theta_0, \theta_1$ 进行一些初步的猜测,它们到底是什么其实并不重要,但通常将 $\theta_0 $ 设为 0,将 $\theta_1$ 也设为 0。然后就是不停的改变 $\theta_0$$和$$\theta_1$,试图通过这种改变使得 $\J(\theta_0, \theta_1) 变小$,直到找到 J 的最小值,或许是局部最小值。下面的图片演示了梯度下降的工作过程。

水平轴为 $$\theta_0$$ 和 $$\theta_1$$,函数 J 在垂直坐标轴上,图形表面高度则为 J 的值,想要求得函数 J 的最小值(局部最小值),需要 $$\theta_0$$ 和 $$\theta_1$$ 从某个值出发,所以想象一下对 $$\theta_0$$ 和 $$\theta_1$$ 赋予某个初值,也就是对应函数 J 曲面上的某一点出发

所以$$\theta_0$$和$$\theta_1$$初始值的寻去是多少无所谓,在这个图像中,可以将凸起的部分想象成山峰,此时你正在上的这一点上,在梯度下降算法中,我们要做的就是环顾四周,并问自己,我想在改点上用小步尽快下山,我需要将小碎步迈向什么方向?当然是最陡峭的方向,大约在这个方向

迈出一步后,现在你在山上新的起点上,需要做的就是再次环顾四周,然后思考,我应该朝哪个方向走才能尽快下上,如此重复。一步一步走,知道到达局部最低点的位置。

这种下降有一个有趣的特点,对于不同的起始值,可能得到不同的局部最小值。例如从另一个位置出发,开始使用梯度下降算法。将会得到不同的局部最优值。

起始点不同,可能会得到一个不同的局部最优解。

Gradient descent algorithm

repeat until convergence {

$$\begin{gather} \theta_j := \theta_j - \alpha\frac{\partial}{\partial\theta_j} J(\theta_0, \theta_1) \qquad (for\quad j = 0\quad and\quad j = 1) \end{gather}$$ }

重复上面的步骤,跟新$$\theta_j$$直到收敛,

注意点:

  • := 表示赋值,与 a = b 不同。
  • α 是一个数字,被称为学习速率(learning rate)。在梯度下降算法中,它控制了我们下山时,迈出多大的步子,如果α很大,相应地在梯度下降过程中,我们试图使用大步下山,如果α很小,那么我们会迈着很小的碎步下山。
  • 在梯度下降过程中,需要同时更新$$\theta_0, \theta_1$$。这意味着在计算中需要这样计算:

$$\begin{gather} temp0 := \theta_0 - \alpha\frac{\partial}{\partial\theta_0} J(\theta_0, \theta_1) \
temp1 := \theta_1 - \alpha\frac{\partial}{\partial\theta_1} J(\theta_0, \theta_1)\
\theta_0 := temp0 \
\theta_1 := temp1
\end{gather}$$

而不是

$$\begin{gather} temp0 := \theta_0 - \alpha\frac{\partial}{\partial\theta_0} J(\theta_0, \theta_1) \
\theta_0 := temp0 \
temp1 := \theta_1 - \alpha\frac{\partial}{\partial\theta_1} J(\theta_0, \theta_1)\
\theta_1 := temp1
\end{gather}$$

这种错误是$$\theta_0, \theta_1$$没有同步更新,先更新了$$\theta_0$$,然后将更新后的$$\theta_0$$用于更新$$\theta_1$$。这种计算并不具有梯度下降的性质。

梯度下降算法更新过程的意义

目标:对α和偏导数部分有一个更直观的认知,这两部分有什么用,以及为什么把这两部分放到一起时,整个过程是有意义的。

为了更好的理解整个过程,以及在演示过程中,方便计算。需要对梯度下降算法做一个简化,令$$\theta_0 = 0$$,这时$$\begin{gather}\min_{\theta_0, \theta_1}J(\theta_0, \theta_1) \end{gather}$$就会简化成$$\begin{gather}\min_{\theta_1}J(\theta_1) \end{gather}$$。$$\theta_1$$是一个实数,这样的话,可以画一条曲线表示函数 J,假如它是这样:

梯度算法第一步就是随便选一个点对$$\theta_1$$初始化,然后从这个点出发,进行梯度下降。

要做的事情就是不断的更新$$\theta_1$$等于$$\theta_1$$减去$$\alpha$$倍的$$\frac{d}{d\theta_1}J(\theta_1)$$ (这里将原来的偏导数符号$$\partial$$改正了导数符号 d,这是因为在单变量里,这两个表示是等价的)。求导的几何意义就是曲线的斜率,对于曲线上的某一点,取这一点的切线,该切线的斜率就是这点的导数值。 改点中,曲线斜率是一个正数,而$$\alpha$$也是一个正数,这时候$$\alpha\frac{d}{d\theta_1}J(\theta_1)$$ 就是一个正数,$$\theta_1$$更新为$$\(\theta_1 - 一个正数)$$,所以$$\theta_1$$是减小的。下一个点在初始点的左侧,这样,梯度下降将逐渐接近,最终达到最低点。所以梯度下降到目前为止似乎是在做正确的事情。

如果初始点选取在曲线最低点的左边,那斜率将是一个负数,此时$$\theta_1 - \alpha\frac{d}{d\theta_1}J(\theta_1)$$ 是增大的。梯度下降将向右逐渐逼近最低点。 以上就是导数项的意义,下面看学习速率α。

如果α太小,乘积将会很小,每次会以一个很小的值更新$$\theta_1$$。相当于迈出的步伐将会很小,它会需要很多步才能达到最低点,这会移动得非常慢。如果α太大,梯度下降算法可能会越过最低点,无法收敛,甚至会导致发散。

来看一下为什么α即使保持不变,梯度下降算法也能够逐渐接近最低点,而不会越过。在接近最低点的过程中,斜率将不断变小,逐渐降低为 0,此时它和α的技逐渐变小。也就是说在靠近最低点的过程中,步子会越来越小,指导最低点时,变为原地踏步。而不会越过最低点。梯度下降算法可以用于最小化任何代价函数,而不仅是线性误差函数的最小化。

梯度下降算法的应用

接下来将把梯度下降算法和线性函数相结合,得出一个用于线性误差函数的算法,或者拟合数据的拟合数据的直线函数。 这是直线学到的梯度下降算法和线性回归模型,以及平方误差函数。

Gradient descent algorathm

repeat until convergence {

$$\begin{gather} \theta_j := \theta_j - \alpha\frac{\partial}{\partial\theta_j} J(\theta_0, \theta_1) \qquad (for\quad j = 0\quad and\quad j = 1) \end{gather}$$ }

Linear regression model

$$\begin{gather*}
h_\theta(x) = \theta_0 + \theta_1x
\end{gather*}$$

$$\begin{gather*}
J(\theta_0, \theta_1)=\frac1{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2
\end{gather*}$$

接下来要做的就是使用梯度下降算法来最小化平方误差函数。梯度下降公式的关键项是导数项,所以首先要弄明白导数项的意义,以及导数项中插入的函数$$\J(\theta_0, \theta_1)$$。将函数 J 的公式带入导数项,推导出:

$$\begin{gather} \frac{\partial}{\partial\theta_j} J(\theta_0, \theta_1) = \frac{\partial}{\partial\theta_j} \frac1{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 \ = \frac{\partial}{\partial\theta_j} \frac1{2m}\sum_{i=1}^m(\theta_0 + \theta_1x^{(i)} - y^{(i)})^2
\end{gather}$$

由此,我们需要弄清楚 j 等于 0 和 j 等于 1 的两种情况的偏导数是什么。当 j 等于 0 时,化简公式:

$$\begin{gather} j = 0 : \quad \frac{\partial}{\partial\theta_0} J(\theta_0, \theta_1) = \frac1{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})
\end{gather}$$

j 等于 1 时化简公式:

$$\begin{gather} j = 1 : \quad \frac{\partial}{\partial\theta_0} J(\theta_0, \theta_1) = \frac1{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x^{(i)}
\end{gather}$$

如果熟悉微分方程的偏导数,很容易进行上述推导。如果不熟悉也没关系,使用上面的推导结果,可以直接应用于计算。 熟悉了以上公式(函数 j 的斜率)之后,我们可以将其代入到梯度下降算法。 repeat until convergence {

$$\begin{gather} \theta_0 := \theta_0 - \alpha\frac1{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)}) \end{gather}$$

$$\begin{gather} \theta_1 := \theta_1 - \alpha\frac1{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x^{(i)}

\end{gather}$$ } 这就是线性回归的梯度下降,不断的重复过程过,它将收敛,θ0 和θ1 也会不断更新最终达到局部最小值。下面来看看梯度下降是如何工作的。 之前学到的梯度下降问题之一就是它可能容易受局部最优化的影响。根据你初始化它的位置,可以结束在不同的局部最优值。

然而线性回归的平方误差函数通常是拱形的。就像这样

这个技术术语叫做凸函数(convex function)。对于这种函数使用梯度下降算法,它总是能够获得全局最优解。 上面的讨论的算法有时也叫批梯度算法(batch gradient descent)。机器学习算法的研究者说他们并不擅长给算法命名,这个名字也是这样的。batch gradient descent 指的是,在梯度下降的每个步骤中,都在使用所有的训练样例。有时候梯度下降的其他版本不是批次版本。它们不需要看整个训练集,而是一次看看训练集的小部分。我们将在本课程的后面讨论这些版本。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

羁绊已千年

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

謌踐踏愛綪

文章 0 评论 0

开始看清了

文章 0 评论 0

高速公鹿

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

热情消退

文章 0 评论 0

白色月光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文