0
点赞
收藏
分享

微信扫一扫

从零实现深度学习框架——线性回归简介

引言

关注公众号
我们自动求导工具第一阶段的实现已经完成了,本文最简单的模型——线性回归模型进行简单的介绍。

线性回归

给定输入 x x x,可能有多个维度(特征),和输出 y y y。线性回归(linear regression)假设输入 x x x和输出 y y y之间的关系是线性的。即 y y y可以表示为 x x x中元素的加权和,这里通常允许包含观测值的一些噪声,我们假设任何噪声都比较正常,比如噪声遵循高斯分布。

我们举一个例子:我们希望根据房屋的面积(㎡)和房龄(年)来估计房屋的售价(万/㎡)。以某卖房软件上深圳南山区近地铁口售价的真实数据为例。我们收集了房屋的售价、面积和房龄。在机器学习中,该数据集称为训练集(training data set)。每行数据(一次房屋交易相对应的数据)称为样本(sample),也称为数据点(data point)。我们把试图预测的目标(比如房屋价格)称为标签(label)或目标(target)。预测所依据的自变量(面积或房龄)称为特征(feature)。

我们使用 n n n来表示数据集中的样本数,对索引为 i i i的样本,其输入表示为 x ( i ) = [ x 1 ( i ) , x 2 ( i ) ] T x^{(i)} = [x^{(i)}_1,x^{(i)}_2]^T x(i)=[x1(i),x2(i)]T,其对应的标签是 y ( i ) y^{(i)} y(i)

我们收集到的数据集如下:

X = [
    [64.4, 31], # [面积, 房龄]
    [68, 21],
    [74.1, 19],
    [74.8, 24],
    [76.9, 17],
    [78.1, 16],
    [78.6, 17]
]
y = [6.1, 6.25, 7.8, 6.66, 7.82, 7.14, 8.02]

线性回归假设目标(房屋价格)可以表示为特征(面积和房龄)的加权和,如下:
price = w area ⋅ area + w age ⋅ age + b (1) \text{price} = w_{\text{area}} \cdot \text{area} + w_{\text{age}} \cdot \text{age} + b \tag{1} price=wareaarea+wageage+b(1)
其中 w area w_{\text{area}} warea w age w_{\text{age}} wage称为权重(weight),权重代表每个特征对预测值的影响(权重越大表面影响越大)。 b b b称为偏置(bias)或截距(intercept)。严格来说,上式是输入特征的一个仿射变换(affine transformation)。仿射变换是通过加权和对特征进行线性变换(linear transformation),并通过偏置项来进行平移(translation)。

有了数据集以后,我们的目标是寻找线性回归模型的权重 w w w和偏置 b b b,以对新的样本进行预测。

在机器学习领域,我们使用的一般是高维数据集,建模时采用线性代数表示法会比较方便。假设我们的输入包含 d d d个特征时,我们将预测结果 y ^ \hat y y^表示为:
y ^ = w 1 x 1 + ⋯ + w d x d + b (2) \hat y = w_1 x_1 + \cdots + w_d x_d + b\tag{2} y^=w1x1++wdxd+b(2)
比如在我们房价预测的例子中总共有2个特征,分别是房屋面积和房龄。所以可以写成:
y ^ = w 1 x 1 + w 2 x 2 + b \hat y = w_1x_1 + w_2x_2 + b y^=w1x1+w2x2+b
假设 x 1 x_1 x1表示面积; x 2 x_2 x2表示房龄。

如果将所有的特征都放到向量 x ∈ R d x \in \Bbb R^d xRd中,并将所有权重放到向量 w ∈ R d w \in \Bbb R^d wRd中,我们可以用点积形式来简介地表达模型:
y ^ = w T x + b (3) \hat y = w^T x + b \tag{3} y^=wTx+b(3)
向量 x x x表示包含所有特征的单个样本数据。那么用符号 X ∈ R n × d X \in \Bbb R^{n \times d} XRn×d可以表示我们整个数据集中的 n n n个样本,其中, X X X的每一行是一个样本,每一列是一种特征。

那么预测值 y ^ ∈ R n \hat y \in \Bbb R^n y^Rn就可以通过矩阵-向量乘法表示:
y ^ = X w + b (4) \hat y = Xw + b \tag{4} y^=Xw+b(4)
有时候也可以把 b b b加到权重 w w w中去, X X X也进行相应的变化得到增广矩阵。上面的式子展开如下:
[ y ^ 1 y ^ 2 ⋮ y ^ n ] = b + [ x 1 ( 1 ) ⋯ x d ( 1 ) x 1 ( 2 ) ⋯ x d ( 2 ) ⋮ ⋱ ⋮ x 1 ( n ) ⋯ x d ( n ) ] ⋅ [ w 1 w 2 ⋮ w d ] \begin{bmatrix} \hat y_1 \\ \hat y_2 \\ \vdots \\ \hat y_n \end{bmatrix} = b + \begin{bmatrix} x^{(1)}_1 & \cdots & x^{(1)}_d\\ x^{(2)}_1 & \cdots & x^{(2)}_d\\ \vdots & \ddots & \vdots\\ x^{(n)}_1 & \cdots & x^{(n)}_d\\ \end{bmatrix} \cdot \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_d \end{bmatrix} y^1y^2y^n=b+x1(1)x1(2)x1(n)xd(1)xd(2)xd(n)w1w2wd
这里的 b b b会进行广播。我们如果把 b b b加到权重 w w w中去,就变成了:
[ y ^ 1 y ^ 2 ⋮ y ^ n ] = b + [ 1 x 1 ( 1 ) ⋯ x d ( 1 ) 1 x 1 ( 2 ) ⋯ x d ( 2 ) ⋮ ⋮ ⋱ ⋮ 1 x 1 ( n ) ⋯ x d ( n ) ] ⋅ [ b w 1 w 2 ⋮ w d ] ⇒ y ^ = X w \begin{bmatrix} \hat y_1 \\ \hat y_2 \\ \vdots \\ \hat y_n \end{bmatrix} = b + \begin{bmatrix} 1 & x^{(1)}_1 & \cdots & x^{(1)}_d\\ 1 & x^{(2)}_1 & \cdots & x^{(2)}_d\\ \vdots & \vdots & \ddots & \vdots\\ 1 & x^{(n)}_1 & \cdots & x^{(n)}_d\\ \end{bmatrix} \cdot \begin{bmatrix} b \\ w_1 \\ w_2 \\ \vdots \\ w_d \end{bmatrix} \Rightarrow \hat y = X w y^1y^2y^n=b+111x1(1)x1(2)x1(n)xd(1)xd(2)xd(n)bw1w2wdy^=Xw
上式最后用 X X X w w w表示增广后的矩阵和向量。

我们已经有了数据集和模型,那么如何得到模型参数呢?答案就是学习过程。

学习过程

学习过程说的是:基于初始的模型参数,我们可以得到一个预测输出,然后我们计算该输出和真实输出之间的距离。通过最小化损失函数和优化方法就可以来优化模型参数。

损失函数: 衡量实际值与预测值之间的差距。数值越小代表损失越小,完美预测时损失为0。

优化: 改变模型参数以获得更少的损失

损失函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SubhEmcY-1640855920361)(https://gitee.com/nlp-greyfoss/images/raw/master/data/fit-linreg.svg)]

我们为一维情况下的回归问题绘制图像,如上图所示。一维情况即样本 x x x只有一个特征。比如横坐标代表身高,纵坐标代表体重。

假设某人的真实身高是180cm,你预测的身高是156cm。那么衡量距离,你首先想到的应该是它们之间的差值。为了避免负数,也应该加一个绝对值。所以定义为 ∣ y ^ i − y ( i ) ∣ |\hat y^{{i}} - y^{(i)}| y^iy(i),但是绝对值是不可求导的,我们可以把绝对值改成平方,并加上系数 1 2 \frac{1}{2} 21好进行求导。这就是平方误差损失函数:
l ( i ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 (5) l^{(i)} = \frac{1}{2}(\hat y^{(i)} - y^{(i)})^2 \tag{5} l(i)=21(y^(i)y(i))2(5)
这是度量单个样本的损失,为了度量整个数据集的损失,我们需要计算训练集 n n n个样本上的损失均值:
L ( w , b ) = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w T x ( i ) + b − y ( i ) ) 2 (6) L(w,b) = \frac{1}{n}l^{(i)}(w,b) = \frac{1}{n} \sum_{i=1}^n \frac{1}{2} \left(w^T x^{(i)} + b - y^{(i)} \right)^2 \tag{6} L(w,b)=n1l(i)(w,b)=n1i=1n21(wTx(i)+by(i))2(6)
此时 L ( w , b ) L(w,b) L(w,b)叫作均方误差损失函数。

我们要找的就是能使所有训练样本上的损失均值最小的参数:
w ∗ , b ∗ = arg ⁡   min ⁡ w , b L ( w , b ) (7) w^*, b^* = \arg \, \min_{w,b} L(w,b) \tag{7} w,b=argw,bminL(w,b)(7)

梯度下降

对于线性回归来说,有一种方法叫作解析解。但是它应用有限,无法进行推广。因此这里不做分析。

本节介绍的方法即使我们无法得到解析解的情况下,仍然可以有效地训练模型。

那就是梯度下降(gradient descent)的方法,这种方法几乎可以优化所有的深度学习模型。它通过不断地在损失函数递减的方向上更新参数来降低误差。

梯度下降最简单的用法是计算损失函数关于模型参数的导数(或者说是梯度)。通常是遍历完整个数据集再进行参数更新,但实际上可能非常慢。因此我们遍历的时候只遍历部分批量数据,遍历完该批量数据即进行参数更新。

我们刚刚看到的方法叫作小批量随机梯度下降法,随机指的是每批数据都是随机抽取的。

用下面的数学公式来表示这一更新过程:
( w , b ) ← ( w , b ) − η ∣ B ∣ ∑ i ∈ B ∂ ( w , b ) l ( i ) ( w , b ) (8) (w,b) \leftarrow (w,b) - \frac{\eta}{|B|} \sum_{i \in B} \partial_{(w,b)} l^{(i)}(w,b) \tag{8} (w,b)(w,b)BηiB(w,b)l(i)(w,b)(8)
其中 ∂ \partial 表示偏导数; B B B代表小批量数据; ∣ B ∣ |B| B表示这一小批量数据的数量; η \eta η是学习率。

算法的步骤如下:

  • 初始化模型参数,通常采用随机初始化
  • 从数据集中随机抽取小批量样本,且在梯度的反方向上更新参数,不断迭代这一步骤。

批量大小和学习率的值通常需要预先指定,而不是通过学习得到的,这种参数叫作超参数(hyperparameter)。

在训练了预先确定的若干次迭代次数后(或满足某些停止条件),我们保存此时模型参数的估计值,记为 w ^ , b ^ \hat w,\hat b w^,b^

优化方法

线性回归恰好只有一个最小值,但是对于深度神经网络这种复杂的模型来说,可能有多个局部极小值点。

局部极小值与全局最小值

此时可能需要用到随机梯度下降法的一些变体,比如Adagrad、RMSProp等。这些变体被称为优化方法或优化器。

关于这些变体后面的文章会讨论。

从最大似然来看均方误差

本节来看一下为什么采用均分误差作为损失函数。

我们上面说过,假设噪声(误差)遵循高斯分布(正态分布)。为什么要这么假设呢,一种解释是,根据中心极限定理:许多独立随机变量的和趋向于正态分布。因为影响噪声的因素有很多,而这些因素都是独立且随机分布的,所以这么假设。

若随机变量 x x x具有均值 μ \mu μ和方差 σ 2 \sigma^2 σ2,其正态分布概率密度函数如下:
p ( x ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( x − μ ) 2 ) (9) p(x) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(x-\mu)^2\right) \tag{9} p(x)=2πσ2 1exp(2σ21(xμ)2)(9)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5ELJp12-1640855920363)(https://gitee.com/nlp-greyfoss/images/raw/master/data/output_linear-regression_216540_58_0.svg)]

改变均值会产生沿 x x x轴的偏移,增加方差会降低分布的峰值。

均方误差损失函数(简称均方误差)可以用于线性回归的一个原因是: 我们假设了观测中包含噪声,其中噪声服从正态分布。则预测函数可以写为:
y = w T x + b + ϵ (10) y = w^T x + b + \epsilon \tag{10} y=wTx+b+ϵ(10)
其中 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0,\sigma^2) ϵN(0,σ2),有
p ( ϵ ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( ϵ ) 2 ) p(\epsilon) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(\epsilon)^2\right) p(ϵ)=2πσ2 1exp(2σ21(ϵ)2)
根据 ( 10 ) (10) (10),也可写成 ϵ = y − w T x − b \epsilon = y - w^T x - b ϵ=ywTxb

因此,我们可以写出给定 x x x观测到特定 y y y的似然:
p ( y ∣ x ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( y − w T x − b ) 2 ) (11) p(y|x) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(y - w^T x - b)^2\right) \tag{11} p(yx)=2πσ2 1exp(2σ21(ywTxb)2)(11)
参数 w w w b b b的最优值是使整个数据集的似然最大的值:
p ( y ∣ X ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ) (12) p(y|X) = \prod_{i=1}^n p(y^{(i)}|x^{(i)}) \tag{12} p(yX)=i=1np(y(i)x(i))(12)
由于取对数不改变单调性,同时优化一般是指最小化,我们再加上负号,变成最小化负对数似然 − log ⁡ p ( y ∣ X ) - \log p(y|X) logp(yX),由此可得:

− log ⁡ p ( y ∣ X ) = − ∑ i = 1 n log ⁡ p ( y ( i ) ∣ x ( i ) ) (13) - \log p(y|X) = - \sum_{i=1}^n \log p(y^{(i)}|x^{(i)}) \tag{13} logp(yX)=i=1nlogp(y(i)x(i))(13)

代入 ( 11 ) (11) (11)得:

− log ⁡ p ( y ∣ X ) = − ∑ i = 1 n log ⁡ 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( y ( i ) − w T x ( i ) − b ) 2 ) = − ∑ i = 1 n log ⁡ 1 2 π σ 2 − ∑ i = 1 n log ⁡ exp ⁡ ( − 1 2 σ 2 ( y ( i ) − w T x ( i ) − b ) 2 ) = − ∑ i = 1 n log ⁡ 1 2 π σ 2 + ∑ i = 1 n 1 2 σ 2 ( y ( i ) − w T x ( i ) − b ) 2 = − ∑ i = 1 n log ⁡ 1 2 π σ 2 + 1 σ 2 ∑ i = 1 n 1 2 ( y ( i ) − w T x ( i ) − b ) 2 \begin{aligned} - \log p(y|X) &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} \exp \left( -\frac{1}{2\sigma^2}(y^{(i)} - w^T x^{(i)} - b)^2\right) \\ &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} - \sum_{i=1}^n \log \exp \left( -\frac{1}{2\sigma^2}(y^{(i)} - w^T x^{(i)} - b)^2\right) \\ &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} + \sum_{i=1}^n \frac{1}{2\sigma^2}(y^{(i)} - w^T x^{(i)} - b)^2 \\ &= - \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi \sigma^2}} + \frac{1}{\sigma^2} \sum_{i=1}^n \frac{1}{2}(y^{(i)} - w^T x^{(i)} - b)^2 \end{aligned} logp(yX)=i=1nlog2πσ2 1exp(2σ21(y(i)wTx(i)b)2)=i=1nlog2πσ2 1i=1nlogexp(2σ21(y(i)wTx(i)b)2)=i=1nlog2πσ2 1+i=1n2σ21(y(i)wTx(i)b)2=i=1nlog2πσ2 1+σ21i=1n21(y(i)wTx(i)b)2
上面式子的解并不依赖于 σ \sigma σ,因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。

参考

  1. 动手学习深度学习
举报

相关推荐

0 条评论