线性回归中梯度下降的个人理解

最近在学习机器学习一些基础课程,想写一些文章记录一下自己对某些概念的理解,但是如果公式太多编辑太耗费时间,所以决定白话方式记录自己的个人理解,有错勿怪!

机器学习主要有监督学习和无监督学习两大类,当然还有强化学习等等,监督学习主要就是分类和回归,线性回归属于回归,线性回归又有单变量线性回归和多变量线性回归,单变量线性回归顾名思义即找个 y=k*x+b 拟合一堆只有一个输入和一个输出的训练数据,然后得到的拟合映射就是线性回归模型,利用这个模型就可以对新的输入做预测了,多变量线性回归就是输入的维度≥2,其余与前面一样,那么一般化考虑而言,下面针对多变量线性回归分析。

现在加入有 m 条训练数据,决定用线性回归模型来拟合,那么怎样才能找到一个perfect的线性回归模型呢?这里面引入了损失函数的概念,损失函数就是用来度量模型对训练数据的拟合程度的,损失函数多种多样,本文只讨论其中的一种——均方误差损失函数,这个损失函数的解释如下:现在有这么一个线性回归模型,也就是一个n元一次函数,n为输入的维度,对于每个训练输入数据,模型都能得到一个预测输出,那么这个预测输出和真实输出肯定有一个差值,作为训练数据真实输出当然是知道的,如果预测输出很接近真实输出,那么这个差值就趋近于0,也是模型预测的很好,这个差值也可以理解为模型在这个输入上面预测的误差度量值,那么对于一个输入可以用一个差值度量,对于全部的训练数据如何度量整体误差呢?

如果对每个输入的误差都直接相加,那么误差有正有负,可能会抵消,结果为0,看不出来整体误差,所以对于每个输入的误差平方后再相加,然后再除上2m,m就是训练数据个数,除上m可以理解,就是求整体误差的平均值,再除上2是为了再接下来的算法里面方面求解损失函数的最小值的一个小技巧。这个MSE(均方误差)函数形式大致为∑(y-h(x))^2/(2*m)。有了这个度量模型在全体训练数据上面误差的函数后,就要想办法利用这个函数来优化模型。

线性回归模型里面有参数,对于一个输入有两个参数k、b,对于n个输入有n+1个参数,这n+1个参数也都出现在了损失函数中,毕竟模型h(x)参与了损失函数的构建,那么现在问题就来了,损失函数值越小越好,即整体误差越小,那么在减小损失函数值的时候,参数值也会变化,当然这个反过来了,应该是参数的变化导致了损失函数值的变化,那么现在需要一种方法,使得参数变化能够使得损失函数不断减小,直到一个最小值,那么这个最小值就是整体训练数据所能达到的最小误差,也是模型的最好拟合效果,同时,这个时候损失函数中的参数值也会确定,这些参数值直接应用到模型上面去便得到了最优的线性回归模型,同时也意味着这个线性回归模型使得损失函数达到了最小值。

上一段中说的求解损失函数最小值的方法叫做梯度下降,先来看下对于多元函数梯度是个什么玩意,梯度首先是一个向量,向量中的每一个元素是函数对其每个变量的偏导数,那么梯度有什么用呢?可以看看这篇文章http://blog.csdn.net/walilk/article/details/50978864,结论就是函数沿着梯度方向变化有最大的变化率,既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标。可以想象一下单变量单参数时候的情形,损失函数是一个凸的一元二次函数,如何沿着负梯度方向减小函数值,现在是多元损失函数,每个变量都是模型的参数,对于每个变量沿着其对应的负梯度方向前进,最终会导致损失函数的减小,但是再负梯度前面还需要乘上一个学习率α,学习率能够把持一下梯度下降的速率。

学习率过小则迭代速度很慢,需要很多次迭代才会收敛,学习率过大可能会再极值点附近震荡或者发散。

可以参考看下这个链接:https://books.google.co.jp/books?id=ewM5_t5gtNsC&pg=PA178&lpg=PA178&dq=%E8%B4%9F%E6%A2%AF%E5%BA%A6%E6%96%B9%E5%90%91&source=bl&ots=ipreZm7hIE&sig=D_GmGpi-kaSn2ZfMR0-At_LiZ8o&hl=zh-CN&sa=X&redir_esc=y#v=onepage&q=%E8%B4%9F%E6%A2%AF%E5%BA%A6%E6%96%B9%E5%90%91&f=false

那么对于每个变量都会有一个同样类型的变化公式,这里要注意的是:对于损失函数的梯度下降法,所有的变量需要同时更新,那么最开始的时候这些变量值是多少?可以随机初始化,也可以将这些参数变量值都初始化为0,如果损失函数为凸函数,那么只有一个全局最优解,就不会陷入局部最优解,否则随机初始化后可能会陷入不同的局部最优解。

上面基本就是线性回归中梯度下降的基本内容了,如果对于每次变量更新都用到了全部的训练数据,称为批量梯度下降,如果每次只是随机选取一部分数据用于变量更新,则称为随机梯度下降。深入的讨论可以看下这个链接:https://www.jiqizhixin.com/articles/7c1ed66d-6742-43cc-9f47-89cd8cb5d9c0

添加一下梯度下降的优缺点
批量GD
优点:全局最优解;易于并行实现;
缺点:当样本数目很多时,训练过程会很慢。
SGD
优点:
1.训练速度快;
2.容易并行
3.每次迭代过程中开销较小
4.随机梯度下降的开销更小
缺点:
1.准确度下降,并不是全局最优;不易于并行实现。
2.学习率不容易确定
3.所有变量的学习速率都一样,对于稀疏性没有考虑
4.对于非凸函数容易陷入局部最优或者鞍点
5.靠近极小值时速度减慢。
6.直线搜索可能会产生一些问题。
7.可能会“之字型”地下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值