【动手学深度学习 | week2a】08 线性回归

08 线性回归

线性回归的理论

回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。
线性回归可以看作最简单的单层神经网络。

推导过程——以房屋价格预测为例子

房子的线性假设,房屋价格为面积、年龄等因素的加权和,并受到偏置的影响
p r i c e = 𝑤 a r e a ⋅ a r e a + 𝑤 a g e ⋅ a g e + 𝑏 . price=𝑤_{area}⋅area+𝑤_{age}⋅age+𝑏. price=wareaarea+wageage+b.

  • 为什么要使用偏置?偏置是指当所有特征都取值为0时,预测值应该为多少,如果没有偏置,那么模型表达能力会受到限制。因为模型根本上是一个仿射变换,仿射变换的特点是通过加权和对特征进行线性变换(linear transformation), 并通过偏置项来进行平移(translation)。
    预测结果可以表示为:
    𝑦 ^ = 𝑤 1 𝑥 1 + . . . + 𝑤 𝑑 𝑥 𝑑 + 𝑏 . 𝑦̂ =𝑤_1𝑥_1+...+𝑤_𝑑𝑥_𝑑+𝑏. y^=w1x1+...+wdxd+b.
    将所有特征放到向量 𝐱∈ℝ^𝑑 中, 并将所有权重放到向量 𝐰∈ℝ^𝑑 中。使用点积表示为:
    𝑦 ^ = 𝐰 ⊤ 𝐱 + 𝑏 𝑦̂ =𝐰^⊤𝐱+𝑏 y^=wx+b
    一个𝐱表示一个样本的特征,使用矩阵 𝐗∈ℝ𝑛×𝑑 可以很方便地引用我们整个数据集的 𝑛 个样本,每一行是一个样本,每一列是一种特征,使用矩阵-向量乘法(变成了多个样本):
    𝐲 ^ = 𝐗 𝐰 + 𝑏 𝐲̂ =𝐗𝐰+𝑏 y^=Xw+b
    线性回归的目标是找到一组权重向量 𝐰 和偏置 𝑏 : 当给定从 𝐗 的同分布中取样的新样本特征时, 这组权重向量和偏置能够使得新样本预测标签的误差尽可能小
  • 损失函数:模型拟合程度的度量方法。
    平方误差函数:常数 1 2 \frac{1}{2} 21不会带来本质的差别,主要是为了求导后系数变成1
    l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 l^{(i)}(\mathbf{w}, b)=\frac{1}{2}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2} l(i)(w,b)=21(y^(i)y(i))2
    𝑛 个样本上的损失均值:

L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w ⊤ x ( i ) + b − y ( i ) ) 2 L(\mathbf{w}, b)=\frac{1}{n} \sum_{i=1}^{n} l^{(i)}(\mathbf{w}, b)=\frac{1}{n} \sum_{i=1}^{n} \frac{1}{2}\left(\mathbf{w}^{\top} \mathbf{x}^{(i)}+b-y^{(i)}\right)^{2} L(w,b)=n1i=1nl(i)(w,b)=n1i=1n21(wx(i)+by(i))2
训练中,希望寻找一组参数( 𝐰∗,𝑏∗ ), 这组参数能最小化在所有训练样本上的总损失
𝐰 ∗ , 𝑏 ∗ = a r g m i n 𝐿 ( 𝐰 , 𝑏 ) 𝐰∗,𝑏∗=argmin 𝐿(𝐰,𝑏) w,b=argminL(w,b)

  • 解析解 / 显示解:线性回归的解可以用一个公式简单地表达出来, 这类解叫作解析解(analytical solution)
    我们将偏置 𝑏 合并到参数 𝐰 中,合并方法是在包含所有参数的矩阵中附加一列。我们的预测问题是最小化 ‖ 𝐲 − 𝐗 𝐰 ‖ 2 ‖𝐲−𝐗𝐰‖^2 yXw2 。 这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小点。 将损失关于 𝐰 的导数设为0,得到解析解。
    𝐰 ∗ = ( 𝐗 ⊤ 𝐗 ) − 1 𝐗 ⊤ 𝐲 𝐰∗=(𝐗^⊤𝐗)^{−1}𝐗^⊤𝐲 w=(XX)1Xy

优化方法的理论

  • 随机梯度下降——其它模型的求解方法
    模型没有显示解的时候。
  1. 随机挑选一个初始值 w 0 w_0 w0
  2. 进行重复迭代。
    在这里插入图片描述
    更新法则: 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
    负梯度:沿梯度方向将增加损失函数的值,所以需要寻找负梯度方向。图中的黄线的方向。
    学习率 η \eta η 步长的超参数。学习率太大会振荡,学习率太小会造成计算资源过度损耗。
  • 小批量随机梯度下降:最常用的梯度下降方法
    会在每次需要计算更新的时候随机抽取一小批样本, 这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。首先随机抽样一个小批量 B B B,计算小批量的平均损失关于模型参数的导数(也可以称为梯度),将梯度乘以一个预先确定的正数 𝜂 ,并从当前参数的值中减掉。也就是再小批量上更新参数。
    ( w , b ) ← ( w , b ) − η ∣ B ∣ ∑ i ⊂ B ∂ ( w , b ) l ( i ) ( w , b ) (\mathbf{w}, b) \leftarrow(\mathbf{w}, b)-\frac{\eta}{|\mathcal{B}|} \sum_{i \subset B} \partial_{(\mathbf{w}, b)} l^{(i)}(\mathbf{w}, b) (w,b)(w,b)BηiB(w,b)l(i)(w,b)
    batch如果太小,不能很好利用GPU资源,如果太大,会增加内存消耗(所有样本都是相同的)。
    批量大小学习率的值通常是手动预先指定,而不是通过模型训练得到的。 这些可以调整但不在训练过程中更新的参数称为超参数(hyperparameter)。 **调参(hyperparameter tuning)**是选择超参数的过程。 超参数通常是我们根据训练迭代结果来调整的, 而训练迭代结果是在独立的 验证数据集validation dataset上评估得到的。
    事实上,比起找到当前数据域里面的一组最小值。更难做到的是找到一组参数,这组参数能够在我们从未见过的数据上实现较低的损失, 这一挑战被称为 泛化(generalization)

  • 正态分布与平方损失
    正态分布(normal distribution),也称为高斯分布(Gaussian distribution)。简单的说,若随机变量 𝑥 具有均值 𝜇 和方差 𝜎2 (标准差 𝜎 ),其正态分布概率密度函数如下:
    p ( x ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( x − μ ) 2 ) p(x)=\frac{1}{\sqrt{2 \pi \sigma^{2}}} \exp \left(-\frac{1}{2 \sigma^{2}}(x-\mu)^{2}\right) p(x)=2πσ2 1exp(2σ21(xμ)2)
    可以定义一个python函数来进行表示:

def normal(x, mu, sigma):
    p = 1 / math.sqrt(2 * math.pi * sigma**2)
    return p * np.exp(-0.5 / sigma**2 * (x - mu)**2)
# 再次使用numpy进行可视化
x = np.arange(-7, 7, 0.01)

# 均值和标准差对
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
         ylabel='p(x)', figsize=(4.5, 2.5),
         legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

在这里插入图片描述
改变均值会产生沿 𝑥 轴的偏移,增加方差将会分散分布、降低其峰值。
均方误差损失函数(简称均方损失)可以用于线性回归的一个原因是: 我们假设了观测中包含噪声,其中噪声服从正态分布 = > => =>最小化目标函数和执行极大似然估计等价

  • 从线性回归到深度网络
    输入为 𝑥1,…,𝑥𝑑 , 因此输入层中的输入数(或称为特征维度,feature dimensionality)为 𝑑 ,可以看成单层的神经网络。

在这里插入图片描述
对于线性回归,每个输入都与每个输出(在本例中只有一个输出)相连, 我们将这种变换称为全连接层(fully-connected layer)或称为稠密层(dense layer)

线性回归从0开始实现【重要】

  • 生成数据集
  • 读取数据集
  • 初始化模型参数
  • 定义模型、损失函数和优化算法
  • 训练

线性回归的简洁实现(使用pytorch的高级API快速实现)【重要】

  • 生成数据集
  • 读取数据集
  • 定义模型、初始化模型参数、定义损失函数、定义优化算法
  • 训练
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值