线性回归d2l

本文围绕线性回归展开,介绍了买房简化模型和线性模型,用平方损失衡量预估质量。通过训练数据确定参数,最小化损失来学习。还阐述了梯度下降和小批量随机梯度下降两种基础优化方法,最后提及了相关实现及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性回归

买房简化模型

假设1:影响关键因素:卧室个数x1、卫生间个数x2、居住面积x3

假设2:成交价是关键因素的加权和y=w1x1+w2x2+w3x3+b

权重和偏差的实际值再后面决定

线性模型

给定n维输入x=[x1,…,xn]T

线性模型有一个n维权重和一个标量偏差

w=[w1,…,wn]T,b

输出是输入的加权和

y=w1x1+w2x2+w3x3+…+.wnxn+b

向量版本:y=< wx >+b

线性模型可以看作是单层的神经网络,input layer x,output layer维度1

衡量预估质量

比较真实值与预估值,例如房屋售价和估价

假设y是真实值,y^是估计值,我们可以比较

L(y,y)=1/2(y-y)^2(平方损失,1/2是为了求导消去方便)

训练数据

收集一些数据点来决定参数值(权重和偏差),例如过去6个月卖的房子

这被称为训练数据,通常越多越好

假设我们有n个样本,记X=[x1,…,xn]T,Y=[y1,…,yn]T,其中每个xi都是一个列向量

训练损失(损失函数)
ℓ ( X , y , w , b ) = 1 2 n ∑ i = 1 n ( y i − ⟨ x i , w ⟩ − b ) 2 = 1 2 n ∥ y − X w − b ∥ 2 \ell(\mathbf{X}, \mathbf{y}, \mathbf{w}, b)=\frac{1}{2 n} \sum_{i=1}^{n}\left(y_{i}-\left\langle\mathbf{x}_{i}, \mathbf{w}\right\rangle-b\right)^{2}=\frac{1}{2 n}\|\mathbf{y}-\mathbf{X} \mathbf{w}-b\|^{2} (X,y,w,b)=2n1i=1n(yixi,wb)2=2n1yXwb2
1/n求平均,1/2来自loss,<>内积

最小化损失来学习参数,找到w,b最小loss
w ∗ , b ∗ = arg ⁡ min ⁡ w , b ℓ ( X , y , w , b ) \mathbf{w}^{*}, \mathbf{b}^{*}=\underset{\mathbf{w}, b}{\arg \min } \ell(\mathbf{X}, \mathbf{y}, \mathbf{w}, b) w,b=w,bargmin(X,y,w,b)
将偏差加入权重 (x加入一列全1的特征,b放到w后面)
x ← [ X , 1 ] w ← [ w b ] \quad \mathbf{x} \leftarrow[\mathbf{X}, \mathbf{1}] \quad \mathrm{w} \leftarrow\left[\begin{array}{c}\mathbf{w} \\ b\end{array}\right] x[X,1]w[wb]

ℓ ( X , y , w ) = 1 2 n ∥ y − X w ∥ 2 ∂ ∂ w ℓ ( X , y , w ) = 1 n ( y − X w ) T X \ell(\mathbf{X}, \mathbf{y}, \mathbf{w})=\frac{1}{2 n}\|\mathbf{y}-\mathbf{X} \mathbf{w}\|^{2} \frac{\partial} {\partial \mathbf{w}} \ell(\mathbf{X}, \mathbf{y}, \mathbf{w})=\frac{1}{n}(\mathbf{y}-\mathbf{X w})^{T} \mathbf{X} (X,y,w)=2n1yXw2w(X,y,w)=n1(yXw)TX

损失是凸函数(最优解在梯度=0), 所以最优解满足
∂ ∂ w ℓ ( X , y , w ) = 0 ⇔ 1 n ( y − X w ) T X = 0 ⇔ w ∗ = ( X T X ) − 1 X T y (最优解的形式,推导比较蛋疼) \begin{aligned} & \frac{\partial}{\partial \mathbf{w}} \ell(\mathbf{X}, \mathbf{y}, \mathbf{w})=0 \\ \Leftrightarrow & \frac{1}{n}(\mathbf{y}-\mathbf{X} \mathbf{w})^{T} \mathbf{X}=0 \\ \Leftrightarrow & \mathbf{w}^{*}=\left(\mathbf{X}^{T} \mathbf{X}\right)^{-1} \mathbf{X}^{T} \mathbf{y}(最优解的形式,推导比较蛋疼) \end{aligned} w(X,y,w)=0n1(yXw)TX=0w=(XTX)1XTy(最优解的形式,推导比较蛋疼)

总结

  • 线性回归是对n维输入的加权,外加偏差(偏置)
  • 使用平方损失来衡量预测值和真实值的差异
  • 线性回归有显示解
  • 线性回归可以看作是单层神经网络

基础优化方法

梯度下降

什么用:更新w和b

没有显示解的时候

  • 挑选一个初始值w0

  • 重复迭代参数t=1,2,3

  • w t = w t − 1 (上一个时刻) − η (学习率) ∂ ℓ ∂ w t − 1 (梯度) \mathbf{w}_{t}=\mathbf{w}_{t-1}(上一个时刻)-\eta (学习率)\frac{\partial \ell}{\partial \mathbf{w}_{t-1}}(梯度) wt=wt1(上一个时刻)η(学习率)wt1(梯度)

  • 沿梯度方向将增加损失函数值

  • 学习率:步长的超参数

选择学习率不能太小也不能太大,实际中很少使用随机梯度下降

小批量随机梯度下降

在整个训练集上算梯度太贵(一个深度模型可能要数小时)

我们可以随机采样b个样本i1,i2…ib来近似平均损失,b越大越精确
1 b ∑ i ∈ I b ℓ k ( x i , y i , w ) \frac{1}{b} \sum_{i \in I_{b}} \ell_{k}\left(\mathbf{x}_{i}, y_{i}, \mathbf{w}\right) b1iIbk(xi,yi,w)
b是批量大小,另一个重要的超参数

选择批量不能太小也不能太大,太小不适合并行计算最大利用计算资源,太大内存消耗增加浪费计算,例如批量中存在很多差不多的样本

总结

  • 梯度下降通过不断沿着梯度反方向更新参数求解,不许要知道显示解长什么样,自动求导就行
  • 小批量随机梯度下降是深度学习默认的求解算法
  • 两个重要的超参数是批量大小学习率n

实现:

jupyter SGD文件

#函数有yield就会先得到一个生成器,return返回值保存断点,之后从断点地方开始

#next(function)可以获得生成器的值,function.send(x)函数 会让yeild有值

#旧的python使用range(1000)时会直接生成1000个元素的list,占用内存

with no_grad():

#requires_grad默认为False,如果设置为True,则反向传播时,该tensor就会自动求导

#no_grad所有计算得出的tensor的requires_grad都自动设置为False

#sgd里不写sgd会报错a leaf Variable that requires grad is being used in an in-place operation.

原因是:

sgd里的param-=lr*param.grad/batch_size#只是更新w和b,不回去更新梯度,这么做是 in-place operation,对于叶子节点是不允许的

note:叶子节点不能执行in-place(原地)操作,因为在进行前向传播的时候得到的是叶子结点的地址,再进行反向传播的时候这个地址不变才不会报错,地址改变了就会出错

SGD-PYTORCH文件
思考题:
没做,有空补上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值