跟着李沐老师学习深度学习(二)

线性回归 + 基础优化算法

课程视频: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值