最小二乘法与梯度下降

  • 1、机器学习中的建模思想----以线性回归为例
  • 2、最小二乘法
    • 2.1、最小二乘法的矩阵表示
    • 2.2、最小二乘法的实现
  • 3、梯度下降
    • 3.1、梯度下降的矩阵表示
    • 3.2、梯度下降的实现

1、机器学习中的建模思想----以线性回归为例

我们在学习机器学习过程中,往往更关注那些复杂的模型和算法,忽略了机器学习底层的朴素的思想。机器学习基本的思想可以归类为以下:

  • step1、提出你的模型
    如本节中,我们试图利用一条直线(y=ax+b)去拟合二维平面空间中的点,这里我们所使用的这条直线,就是我们提出的基本模型。而在后续的深度学习的学习过程中,我们还将看到更为强大、同时也更加通用的神经网络模型。当然,不同的模型能够适用不同的场景,在提出模型时,我们往往会预设一些影响模型结构或者实际判别性能的参数,如简单线性回归中的a和b;
  • step2、确定损失函数和目标函数
    接下来,围绕建模的目标,我们需要合理设置损失函数,并在此基础之上设置目标函数,当然,在很多情况下,这二者是相同的。例如,在上述简单线性回归中,我们的建模目标就是希望y=ax+b这条直线能够尽可能的拟合(1,2)、(3,4)这两个点,或者说尽可能“穿过”这两个点,因此我们设置了SSE作为损失函数,也就是预测值和真实值的差值平方和。当然,在计算过程中不难发现,SSE是一个包含了a和b这两个变量的方程,因此SSE本身也是一个函数(a和b的二元函数),并且在线性回归中,SSE既是损失函数(用于衡量真实值和预测值差值的函数),同时也是我们的目标函数(接下来需要优化、或者说要求最小值的函数)。这里尤其需要注意的是,损失函数不是模型,而是模型参数所组成的一个函数。
  • step3、根据目标函数特性,选择优化方法,求解目标函数
    目标函数既承载了我们优化的目标(让预测值和真实值尽可能接近),同时也是包含了模型参数的函数,因此完成建模需要确定参数、优化结果需要预测值尽可能接近真实值这两方面需求就统一到了求解目标函数最小值的过程中了,也就是说,当我们围绕目标函数求解最小值时,也就完成了模型参数的求解。当然,这个过程本质上就是一个数学的最优化过程,求解目标函数最小值本质上也就是一个最优化问题,而要解决这个问题,我们就需要灵活适用一些最优化方法。当然,在具体的最优化方法的选择上,函数本身的性质是重要影响因素,也就是说,不同类型、不同性质的函数会影响优化方法的选择。在简单线性回归中,由于目标函数是凸函数,我们根据凸函数性质,判断偏导函数取值为0的点就是最小值点,进而完成a、b的计算(也就是最小二乘法),其实就是通过函数本身的性质进行最优化方法的选取

我们以最简单的线性回归为例讲解如上述的步骤,
有这样的数据

x y
5 6
7 8

我们希望通过一条直线去拟合它。y = ax+b

x y yhat
5 6 5a+b
7 8 7a+b

这条直线应该满足y_hat与y之间的误差最小。这就引出了我们的损失函数。SSE

使得损失函数最小的a,b值就是我们模型的解。上述的SSE是个典型的凸函数,而求解凸函数的最小值常用的优化方法就是最小二乘法:

import matplotlib.pyplot as plt
import numpy as npx1=[5,7]
y1 =[6,8]
x = np.arange(0,10,1)
y = x+1
plt.scatter(x1,y1)
plt.plot(x,y,'r')

2、最小二乘法

2.1、最小二乘法的矩阵表示



2.2、最小二乘法的实现

我们用上面的例子来编程实现以下:

import torch
A = torch.tensor([[5,1],[7,1]],dtype =torch.float32)
B =torch.tensor([6,8],dtype =torch.float32 ).reshape(2,1)
print(A)
pritn(B)

w = torch.mm(torch.mm(torch.inverse(torch.mm(A.t(),A)),A.t()),B)
w


与手动算的结果一致。还可以反向验证以下,求导autograd模块

a = torch.tensor(1.,requires_grad = True)# 创建一个可导的张量
b = torch.tensor(1.,requires_grad = True)
sse = torch.pow((5*a+b -6), 2) + torch.pow((7*a+b-8), 2)
torch.autograd.grad(sse,[a, b])


sse函数在(1,1)处的偏导数为0.

3、梯度下降

最小二乘法虽然高效并且结果精确,但也有不完美的地方,核心就在于最小二乘法的使用条件较为苛刻,要求特征张量的交叉乘积结果必须是满秩矩阵,才能进行求解。而在实际情况中,很多数据的特征张量并不能满足条件,此时就无法使用最小二乘法进行求解。

鉴于许多目标函数本身也并不存在最小值或者唯一最小值,在优化的过程中略有偏差也是可以接受的。当然,伴随着深度学习的逐渐深入,我们会发现,最小值并不唯一存在才是目标函数的常态。基于此情况,很多根据等式形变得到的精确的求解析解的优化方法(如最小二乘)就无法适用,此时我们需要寻找一种更加通用的,能够高效、快速逼近目标函数优化目标的最优化方法。在机器学习领域,最通用的求解目标函数的最优化方法就是著名的梯度下降算法。

值得一提的是,我们通常指的梯度下降算法,并不是某一个算法,而是某一类依照梯度下降基本理论基础展开的算法簇,包括梯度下降算法、随机梯度下降算法、小批量梯度下降算法等等。接下来,我们就从最简单的梯度下降入手,讲解梯度下降的核心思想和一般使用方法。
先来了解一下反向传播的知识,这是完成梯度下降的基础。

x = torch.tensor(1.,requires_grad = True)
y = x**2
z = y + 1
z

z.backward()
x.grad


z = x**2 +1 在x = 1时的导数值为2

梯度下降的基本思想其实并不复杂,其核心就是希望能够通过数学意义上的迭代运算,从一个随机点出发,一步步逼近最优解

3.1、梯度下降的矩阵表示

接着最小二乘法的矩阵表示,:

3.2、梯度下降的实现

# 手动实现简单的梯度下降,沿用上述的A,B
#1、设置初试参数
w = torch.zeros(2, 1, requires_grad = True)#默认初始梯度为(0,0)
A = torch.tensor([[5,1],[7,1]],dtype =torch.float32,requires_grad = True)#这是特征矩阵
B =torch.tensor([6,8],dtype =torch.float32 ,requires_grad = True).reshape(2,1)#这是真实的y值
#设置步长
eps = torch.tensor(0.01, requires_grad = True)
# 梯度计算公式
grad = torch.mm(A.t(), (torch.mm(A, w) - B))/2
grad

#更新梯度
w = w - eps * grad
w

for k in range(3):grad = torch.mm(A.t(), (torch.mm(A, w) - B))/2w = w - eps * gradprint(w)

#迭代10000次看看
for k in range(10000):grad = torch.mm(A.t(), (torch.mm(A, w) - B))/2w = w - eps * grad
w


逼近最优解,迭代30000次左右看看,

记录深度学习(五)----最小二乘法与梯度下降原理及实现相关推荐

  1. 深度学习的优化算法——梯度下降和随机梯度下降

    深度学习的优化算法--梯度下降和随机梯度下降 优化算法在深度学习中存在的问题 优化在深度学习中有很多挑战,下面描述其中两个,局部最小值和鞍点. 1.局部最小值 深度学习模型的目标函数可能存在若干极点- ...

  2. 深度学习必备:随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

  3. 深度学习系列之随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

  4. 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现

    梯度下降和反向传播 目标 知道什么是梯度下降 知道什么是反向传播 1. 梯度是什么? 梯度:是一个向量,导数+变化最快的方向(学习的前进方向) 回顾机器学习 收集数据 x x x ,构建机器学习模型 ...

  5. 深度学习中的随机梯度下降(SGD)简介

    随机梯度下降(Stochastic Gradient Descent, SGD)是梯度下降算法的一个扩展. 机器学习中反复出现的一个问题是好的泛化需要大的训练集,但大的训练集的计算代价也更大.机器学习 ...

  6. 动手学深度学习——基础优化算法梯度下降,小批量随机梯度下降

    一.梯度下降算法 挑选一个初始值w0: 重复迭代参数t=1,2,3: 在接下来不断的更新w0,使它接近最优解: 具体来说,法则如下: wt等于wt的上一时刻减去η乘以损失函数关于wt的上一时刻的梯度. ...

  7. 深度学习优化算法之梯度下降(泰勒展开式推导)

    有一定深度学习背景知识的伙伴们都知道,为了得到一个好的模型,都预先定义一个损失函数(优化的目标函数),然后使用合适的优化算法去试图得到一个最小值.优化的目标就是为了降低训练误差,对于深度学习的模型来说 ...

  8. MATLAB之线性回归,逻辑回归,最小二乘法,梯度下降,贝叶斯,最大似然估计

    文章目录 线性回归(定义域(-∞,+∞),值域(-∞,+∞),即输入输出连续) 线性回归/最小平方误差理论 MATLAB之线性回归/最小平方误差 损失函数/代价函数求导法求线性回归 一次拟合求线性系统 ...

  9. 13_线性回归分析、线性模型、损失函数、最小二乘法之梯度下降、回归性能评估、sklearn回归评估API、线性回归正规方程,梯度下降API、梯度下降 和 正规方程对比

    1.线性回归 1.1 线性模型 试图学得一个通过属性的线性组合来进行预测的函数: 1.2 定义 定义:线性回归通过一个或者多个自变量与因变量之间进行建模的回归分析.其中特点为一个或多个称为回归系数的模 ...

最新文章

  1. java之ibatis数据缓存
  2. 一个浏览器插件,测试xpath的工具
  3. dom4j通过xpath查询xml
  4. 以MATLAB的方式实现微积分问题的计算机求解问题及解决方案集锦(一)
  5. 阿里云云客服平台正式商业化
  6. Android 取消返回键返回事件,返回桌面,再按一次退出程序,双击事件
  7. 学习单片机c语言必备的两个软件,单片机C语言应用100例(第2版)
  8. FTP - YUM 源配置
  9. 洛谷 U84985 Seaway找路
  10. 注册公司的基本流程 version_1.0
  11. CNN-VGG16图片性别年龄识别(说白了就是图片分类)
  12. 整流-1.输入电压角度计算
  13. EXCEL高级玩法之非常酷炫的动态数据分析报表
  14. 注册中心原理和选型:Zookeeper、Eureka、Nacos、Consul和Etcd
  15. linux-----基本操作指令(2)
  16. macbook pro键盘按键帽清理,修复手感变差的问题
  17. 索尼1000xm3成功配对小米5 蓝牙支持ldac传输
  18. 谁痛苦谁改变 落到谷底时,唯一的出口就是向上
  19. 信息化发展与应用的新特点
  20. 大厂程序员推荐的linux内核学习路线

热门文章

  1. 模拟器+(按键精灵+ python)实现自动化
  2. 纯CSS3文字 渐变内发光投影效果
  3. 美妆赛道太卷?看这一品牌如何用数字力量突出重围!
  4. 机器学习小石子--数据处理之matplotlib
  5. 赏金传奇【全自动】辅助脚本
  6. jsp html 页面DOCTYPE
  7. 如何实现尺子样式html,纯CSS实现单元素构建的刻度尺
  8. 目标检测之锚点与锚框
  9. 16回溯法——圆排列问题
  10. Easyui 官网网址