线性回归和神经网络的联系

线性回归的表示方法

这节我们解释线性回归与神经网络的联系,以及线性回归的矢量计算表达式。

神经网络图

在深度学习中,我们可以使用神经网络图直观地表现模型结构。为了更清晰地展示线性回归作为神经网络的结构,下图使用神经网络图表示本节中介绍的线性回归模型。神经网络图隐去了模型参数权重和偏差。

在如图所示的神经网络中,输入分别为 x 1 x_1 x1 x 2 x_2 x2,因此输入层的输入个数为2。输入个数也叫特征数或特征向量维度。图中网络的输出为 o o o,输出层的输出个数为1。需要注意的是,我们直接将图中神经网络的输出 o o o作为线性回归的输出,即 y ^ = o \hat{y}=o y^=o。由于输入层并不涉及计算,按照惯例,如图所示的神经网络的层数为1。

所以,线性回归是一个单层神经网络。输出层中负责计算 o o o的单元又叫神经元。在线性回归中, o o o的计算依赖于 x 1 x_1 x1 x 2 x_2 x2。也就是说,输出层中的神经元和输入层中各个输入完全连接。因此,这里的输出层又叫全连接层 (fuly-connected layer) 或稠密层 (dense layer)。

矢量计算表达式

在模型训练或预测时,我们常常会同时处理多个数据样本并用到矢量计算。在介绍线性回归的矢量计算表达式之前,让我们先考虑对两个向量相加的两种方法。

下面先定义两个1000维的向量。

import torch
from time import time
a = torch.ones(1000)
b = torch.ones(1000)

向量相加的另一种方法是,将这两个向量直接做矢量加法。

start = time()
c = torch.zeros(1000)
for i in range(1000):
c[i] = a[i] + b[i]
print(time() - start)

输出:

0.01296544075012207

向量相加的另一种方法是,将这两个向量直接做矢量加法。

start = time()
d = a + b
print(time() - start)

输出:

0.0

结果很明显,后者比前者更省时。因此,我们应该尽可能采用矢量计算,以提升计算效率。

让我们再次回到本节的房价预测问题。如果我们对训练数据集里的3个房屋样本(索引分别为1、2和3逐一预测价格,将得到

y ^ ( 1 ) = x 1 ( 1 ) w 1 + x 2 ( 1 ) w 2 + b , y ^ ( 2 ) = x 1 ( 2 ) w 1 + x 2 ( 2 ) w 2 + b , y ^ ( 3 ) = x 1 ( 3 ) w 1 + x 2 ( 3 ) w 2 + b . \begin{array}{l}\hat{y}^{(1)}=x_1^{(1)}w_1+x_2^{(1)}w_2+b,\\ \hat{y}^{(2)}=x_1^{(2)}w_1+x_2^{(2)}w_2+b,\\ \hat{y}^{(3)}=x_1^{(3)}w_1+x_2^{(3)}w_2+b.\end{array} y^(1)=x1(1)w1+x2(1)w2+b,y^(2)=x1(2)w1+x2(2)w2+b,y^(3)=x1(3)w1+x2(3)w2+b.

现在,我们将上面3个等式转化成矢量计算。设

y ~ = [ y ^ ( 1 ) y ^ ( 2 ) y ^ ( 3 ) ] , X = [ x 1 ( 1 ) x 2 ( 1 ) x 1 ( 2 ) x 2 ( 2 ) x 1 ( 3 ) x 2 ( 3 ) ] , w = [ w 1 w 2 ] \tilde{\boldsymbol{y}}=\begin{bmatrix}\hat{y}^{(1)}\\ \hat{y}^{(2)}\\ \hat{y}^{(3)}\end{bmatrix},\quad\boldsymbol{X}=\begin{bmatrix}x_1^{(1)}&x_2^{(1)}\\ x_1^{(2)}&x_2^{(2)}\\ x_1^{(3)}&x_2^{(3)}\end{bmatrix},\quad\boldsymbol{w}=\begin{bmatrix}w_1\\ w_2\end{bmatrix} y~= y^(1)y^(2)y^(3) ,X= x1(1)x1(2)x1(3)x2(1)x2(2)x2(3) ,w=[w1w2]

对3个房屋样本预测价格的矢量计算表达式为 y ^ = X w + b \boldsymbol{\hat{y}}=\boldsymbol{X}\boldsymbol{w}+b y^=Xw+b,其中的加法运算使用了广播机制。例如:

当对两个形状不同的 Tensor 按元素运算时,可能会触发广播 (broadcasting)机制: 先适当复制元素使这两个 Tensor 形状相同后再按元素运算。

a = torch.ones(3)
b = 10
print(a + b)

输出为:

tensor([11., 11., 11.])

广义上讲,当数据样本数为 n n n,特征数为 d d d时,线性回归的矢量计算表达式为:
y ^ = X w + b \hat{\boldsymbol{y}}=X\boldsymbol{w}+b\quad\text{} y^=Xw+b
其中模型输出 y ^ ∈ R n × 1 \boldsymbol{\hat{y}}\in\mathbb{R}^{n\times1} y^Rn×1,批量数据样本特征 X ∈ R n × d \boldsymbol{X}\in\mathbb{R}^{n\times d} XRn×d,权重 w ∈ R d × 1 \boldsymbol{w}\in\mathbb{R}^{d\times1} wRd×1,偏差 b ∈ R b\in\mathbb{R} bR。相应地,批量数据样本标签 y ∈ R n × 1 \boldsymbol{y}\in\mathbb{R}^{n\times1} yRn×1

设模型参数 θ = [ w 1 , w 2 , b ] ⊤ \boldsymbol{\theta}=\left[w_{1},w_{2},b\right]^{\top} θ=[w1,w2,b],我们可以重写损失函数为
ℓ ( θ ) = 1 2 n ( y ^ − y ) ⊤ ( y ^ − y ) \ell(\theta)=\dfrac{1}{2n}(\hat{y}-\boldsymbol{y})^{\top}(\hat{y}-\boldsymbol{y})\quad\text{} (θ)=2n1(y^y)(y^y)
小批量随机梯度下降的迭代步骤将相应地改写为
θ ← θ − η ∣ B ∣ ∑ i ∈ B ∇ θ ℓ ( i ) ( θ ) \theta\leftarrow\theta-\dfrac{\eta}{|\mathcal{B}|}\sum_{i\in\mathcal{B}}\nabla_\theta\ell^{(i)}(\theta) θθBηiBθ(i)(θ)
其中梯度是损失有关3个为标量的模型参数的偏导数组成的向量:
∇ θ ( i ) ( θ ) = [ ∂ θ ( i ) ( u 1 , w , b ) ∂ w 1 ∂ θ ( i ) ( u 1 , w , b ) ∂ w 2 ∂ θ ( i ) ( u 1 , w , b ) ∂ w 1 ] = [ x 1 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) x 2 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ] = [ x 1 ( i ) x 2 ( i ) 1 ] ( y ˙ ( i ) − y ( i ) ) \nabla\theta^{(i)}(\boldsymbol{\theta})=\begin{bmatrix}\frac{\partial\theta^{(i)}(u_1,w,b)}{\partial w_1}\\ \frac{\partial\theta^{(i)}(u_1,w,b)}{\partial w_2}\\ \frac{\partial\theta^{(i)}(u_1,w,b)}{\partial w_1}\end{bmatrix}=\begin{bmatrix}x_1^{(i)}(x_1^{(i)}w_1+x_2^{(i)}w_2+b-y^{(i)})\\ x_2^{(i)}(x_1^{(i)}w_1+x_2^{(i)}w_2+b-y^{(i)})\\ x_1^{(i)}w_1+x_2^{(i)}w_2+b-y^{(i)}\end{bmatrix}=\begin{bmatrix}x_1^{(i)}\\ x_2^{(i)}\\ 1\end{bmatrix}(\dot{y}^{(i)}-y^{(i)}) θ(i)(θ)= w1θ(i)(u1,w,b)w2θ(i)(u1,w,b)w1θ(i)(u1,w,b) = x1(i)(x1(i)w1+x2(i)w2+by(i))x2(i)(x1(i)w1+x2(i)w2+by(i))x1(i)w1+x2(i)w2+by(i) = x1(i)x2(i)1 (y˙(i)y(i))

猜你喜欢

转载自blog.csdn.net/AI_ayuan/article/details/129498106
今日推荐