【吴恩达】吴恩达机器学习笔记002

Linear Regression with One Variable单变量线性回归

Model Respresentation模型描述

监督学习算法是如何工作的?

image.png

上述流程是监督学习算法的工作方式,我们需要将训练集的一些数值比如房屋大小喂给学习算法,然后输出一个函数,而这个函数用 h h h表示。 h h h表示hypothesis假设,是一个函数,输入是训练集一些数值比如房子大小,输出一个预估的房子价格, h h h实际上时从输入到输出的映射。那我们应该如何表达 h h h

一种可能的表达方式为: h θ ( x ) = θ 0 + θ 1 ∗ x h_{\theta}(x)=\theta_{0}+\theta_{1}*x hθ(x)=θ0+θ1x,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题

线性回归(Linear regression) 的假设函数h,其实就是构建了从x到y的映射:
h θ ( x ) = θ 0 + θ 1 ∗ x h_{\theta}(x)=\theta_{0}+\theta_{1}*x hθ(x)=θ0+θ1x

Cost Function代价函数

在线性回归中我们举个预测房价的例子,现在我们有这么个训练集和假设函数:

image.png

其中 m m m代表着训练样本的数量, θ i \theta_{i} θi代表模型参数。那么我们应该如何为我们的模型选择合适的两个参数 θ 0 \theta_{0} θ0 θ 1 \theta_{1} θ1呢?

image.png

上图是选择不同模型参数的例子。我们需要做的就是选择合适的 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1来让假设函数 h h h表示的直线尽量地与下图这些数据点进行很好的拟合——使得 h θ ( x ) h_{\theta}(x) hθ(x)尽可能接近训练集样本 ( x , y ) (x,y) (x,y)。这个事实上在Machine Learning中标准的定义就是在线性回归中要解决的最小化问题

即使Cost Function代价函数 J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ) − y ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x)-y)^2 J(θ0,θ1)=2m1i=1m(hθ(x)y)2最小,这个代价函数也被称为Squared Error Function平方误差函数或者有时叫Squared Error Cost Function平方误差代价函数

我们之所以要求出 误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择,还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段。

image.png

几个直观的例子

让我们来简化一下上述的代价函数:

image.png

然后我们来取一下不同 θ \theta θ的假设函数和代价函数的图像:

image.png

image.png

image.png

我们还可以利用等高线图或者等高图像来直观感受。

image.png

image.png

image.png

我们不希望编个程序把这些点画出来,然后人工的方法来读出这些点的数值,这很明显不是一个好办法。我们会遇到更复杂、更高维度、更多参数的情况,而这些情况是很难画出图的,因此更无法将其可视化,因此我们真正需要的是编写程序来找出这些最小化代价函数的 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1的值。有没有一种算法能够自动找出能使代价函数 J J J最小化的 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1的值呢?

Gradient Descent梯度下降

Gradient Descent梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 J ( θ 0 , θ 1 ) J(\theta_0, \theta_1) J(θ0,θ1) 的最小值。梯度下降是很常用的算法,它不仅被用在线性回归上,还被广泛应用于机器学习的众多领域。

梯度下降背后的思想是:开始时我们随机选择一个参数的组合 ( θ 0 , θ 1 , … , θ n ) (\theta_0,\theta_1,\dots,\theta_n) (θ0,θ1,,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到 到一个局部最小值,因为我们并没有尝试完所有的参数组合,所以不能确 定我们得到的局部最小值是否便是全局最小值,选择不同的初始参数组合,可能会找到不同的局部最小值。

image.png

想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转 360 度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。

起始点的不同会带来完全不同的局部最优解。

数学定义

image.png

其中的 α \alpha αlearning rate学习率。它用来控制梯度下降时我们迈出多大的步子, α \alpha α越大,我们梯度下降就越迅速。

还有一个细节,梯度下降中,当 j = 0 j=0 j=0 j = 1 j=1 j=1时,我们需要更新 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1 ,因为此时的微分项 α ∂ ∂ θ j J ( θ 0 , θ 1 ) \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) αθjJ(θ0,θ1)将会改变。实现梯度下降算法的微妙之处是, 在这个表达式中,如果要更新这个等式,我们需要同时更新 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1,我的意思是在这个等式中,我们要像上述方式同步更新,而非下述方式:

image.png

直观理解

image.png

上述是对导数项 α ∂ ∂ θ j J ( θ 0 , θ 1 ) \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) αθjJ(θ0,θ1)的直观解释。求导的目的,从几何上看,就是取上述图像上的点的切线,这条直线的斜率正好是这个三角形的高度除以水平长度。当其导数为正时,得到的 θ \theta θ更小,从几何上看代价函数取值会更小;相反,当其导数为负时,得到的 θ \theta θ更大,从几何上看代价函数取值也会更小。

那么学习率 α \alpha α取值大小会有什么样的影响?

image.png

如果 α \alpha α太小了,即学习速率太小,结果就是只能一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点。

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

那么,一个更值得思考的问题是,如果我们一开始就把 θ \theta θ取值放在一个局部的最低点,下一步梯度下降将会发生什么?

image.png

假设我们将 θ \theta θ初始化在局部最低点,它已经在一个局部的最优处或局部最低点。 结果是局部最优点的导数将等于零,因为它是那条切线的斜率。这意味着已经在局部最优点,它使得 θ \theta θ不再改变,也就是新的 θ \theta θ等于原来的 θ \theta θ,因此,如果参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率𝑎保持不变时,梯度下降也可以收敛到局部最低点。

举个例子解释一下。

image.png

我们想找到它的最小值,首先初始化我们的梯度下降算法,在那个红点初始化,如果我们更新一步梯度下降,也许它会带我到这个点,因为这个点的导数是相当陡的。现在,在这个绿色的点,如果我们再更新一步,会发现我们的导数,也即斜率,是没那么陡的。随着我们接近最低点,我们的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后我们想再梯度下降一步,在这个绿点,我们自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所以,我们再进行一步梯度下降时,我的导数项是更小的, θ \theta θ更新的幅度就会更小。所以随着梯度下降法的运行,我们移动的幅度会自动变得越来越小,直到最终移动幅度非常小,已经收敛到局部极小值。

回顾一下,在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接 近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小 α \alpha α

这就是梯度下降算法,我们可以用它来最小化任何代价函数 J J J,不只是线性回归中的代价函数。

Gradient Descent For Linear Regression梯度下降的线性回归

这是梯度下降算法和线性回归算法的比较图:

image.png

我们如果想把梯队下降算法应用在线性回归算法当中,即最小化平方差代价函数,关键在于求出代价函数的导数,即:

α ∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)= \frac{\partial}{\partial\theta_j} \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 αθjJ(θ0,θ1)=θj2m1i=1m(hθ(x(i))y(i))2

化简一下,得到:
α ∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)= \frac{\partial}{\partial\theta_j} \frac{1}{2m}\sum_{i=1}^{m}(\theta_0+\theta_1x^{(i)}-y^{(i)})^2 αθjJ(θ0,θ1)=θj2m1i=1m(θ0+θ1x(i)y(i))2

j = 0 j=0 j=0 j = 1 j=1 j=1时的两种特殊情况:
α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 j = 0 α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) 2 ⋅ x ( i ) ) j = 1 \begin{aligned} \alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)= \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 \qquad j=0 \\ \alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)= \frac{1}{m}\sum_{i=1}^{m}((h_{\theta}(x^{(i)})-y^{(i)})^2\cdot x^{(i)}) \qquad j=1 \end{aligned} αθ0J(θ0,θ1)=m1i=1m(hθ(x(i))y(i))2j=0αθ1J(θ0,θ1)=m1i=1m((hθ(x(i))y(i))2x(i))j=1

image.png

然后我们的线性回归算法可以改写成:

image.png

之前我们提到,使用梯度下降时,会遇到一个问题——容易陷入局部最优:

image.png

但是线性回归的代价函数一般还是这样一个Convex Function凸函数:

注意:国内外对凹凸函数的翻译不同,我们不用去细究,国外以convexVconcaveCAVE形状象形,而国内以象形。

image.png

这样的函数没有局部最优解,只有一个全局最优,当计算这种代价函数的梯度下降时,只要是使用线性回归,它总是会收敛到全局最优,而没有其他的局部最优解。

我们刚刚学习的算法有时也被称为Batch Gradient Descent批量梯度下降Batch指的是梯度下降的每一步我们都用的是所有的训练样本。我们在计算微分求导时,我们需要进行求和运算,而在每一个单独的梯度下降中,我们都需要这个微分项。

批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨三点的修狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值