线性回归 + 基础优化算法
课程视频:https://space.bilibili.com/1567748478/channel/seriesdetail?sid=358497
课程教材:https://zh.d2l.ai/
线性回归
了解线性回归前的例子
- 在美国买房
看中一个房子,进行参观了解 --> 估计一个价格(出价) —— 预测问题
引出线性回归—简化模型
- 假设 1:影响房价的关键因素是卧室个数,卫生间个数和居住面积,记为 x1,x2,x3
- 假设2:成交价是关键因素的加权和:y=WX+Wx+Wx+b
权重和偏差的实际值在后面决定
线性模型
- 给定n维输入:
- 线性模型有一个n维权重和一个标量偏差
- 输出是输入的加权和:
在这里插入图片描述
- 向量版本:
- 线性模型可以看作是单层神经网络:
- 神经网络来源于神经科学
主要思想:使用人工的神经网络来模拟人的大脑;
衡量预估质量
-
比较真实值和预估值,例如房屋售价和估价;以下式子叫做平方损失。
-
训练数据
- 收集一些数据点来决定参数值(权重和偏差),例如过去6个月卖的房子(称为训练数据)
- 假设有n个样本,记:
-
参数学习
- 训练损失
- 最小化损失来学习参数
- 训练损失
-
显示解
-
将偏差加入权重 (输入加入一列全1;权重加入偏差)
-
损失是凸函数,所以最优解满足:
(唯一具有最优解的模型)
-
总结
- 线性回归是对n维输入的加权,外加偏差
- 使用平方损失来衡量预测值和真实值的差异
- 线性回归有显示解(最简单的模型)
- 线性回归可以看做是单层神经网络
基础优化方法
梯度下降
(当模型中没有显示解时,使用优化方法)
-
挑选一个初始值w0;重复迭代参数t = 1, 2, 3
- 沿梯度方向将增加损失函数值
- 学习率:步长的超参数(需要认为指定)
选择学习率
不能太小、也不能太大;
分类:小批量随机梯度下降(常用)
类型 | 定义 | 优点 | 缺点 |
---|---|---|---|
批量梯度下降 (Batch Gradient Descent) | 每次迭代时,计算整个训练数据集的梯度。 | 收敛性较好,最终能找到全局最小值(对于凸优化问题)。 | 计算成本高,尤其是在数据量很大的时候,因为每次都需要用整个数据集来计算梯度。 |
随机梯度下降 (Stochastic Gradient Descent, SGD) | 每次迭代时,只用一个样本来计算梯度并更新参数。 | 计算速度更快,因为每次只使用一个样本;适合大规模数据集。 | 每次更新的方向波动较大,可能导致收敛速度慢或者最终收敛到局部最小值。 |
小批量梯度下降 (Mini - batch Gradient Descent) | 每次迭代时,用一个小批量的数据(例如32或64个样本)来计算梯度并更新参数。 | 比批量梯度下降速度快,但又能比随机梯度下降更稳定,适用于深度学习中。 | 需要根据批量大小进行调整,但比批量和随机梯度下降的结合要灵活。 |
-
在整个训练集上算梯度太贵
- 一个深度神经网络模型可能需要数分钟至数小时
-
可以随机采样b个样本i1,i2,…,ib 来近似损失
- b是批量大小,另一个重要的超参数。
-
对于批量大小的选择:
- 不能太小:每次计算量太小,不适合并行来最大利用计算资源。
- 不能太大:内存消耗增加浪费计算,例如如果所有样本都是相同的
总结
- 梯度下降通过不断沿着反梯度方向更新参数求解
- 小批量随机梯度下降是深度学习默认的求解算法(稳定、简单)
- 两个重要的超参数是批量大小和学习率
代码实现 – 从零实现线性回归
# 1 线性回归的从零开始实现
# 从零开始实现整个方法:包括数据流水线、模型、损失函数和小批量随机梯度下降优化器
%matplotlib inline
import random
import torch
from d2l import torch as d2l
# 根据带有的噪声的线性模型构造一个人造的数据集。我们使用线性模型参数w = [2, -3.4],b = 4.2 还有噪声项及其标签
def synthetic_data(w, b, num_examples):
"""生成 y = Xw + b + 噪声。"""
# 均值为0,方差为1的随机数,大小:有n个样本,共len(w)列
X = torch.normal(0, 1, (num_examples, len(w)))
# y = Xw + b
y = torch.matmul