线性回归
经典统计学习方法中的线性回归和softmax回归可以视为线性神经网络。
概念
在机器学习中,当想要预测一个数值时,就会涉及回归问题。
回归(regression)是能为一个或多个自变量
X
X
X与因变量
y
y
y之间关系建模的一类方法。 在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。
线性回归,即
X
X
X与
y
y
y之间的关系是线性的,即
y
y
y可表示为
X
X
X中元素的加权和。如下所示:
y
=
W
⋅
X
+
b
y = W·X+b
y=W⋅X+b
y
y
y 表示 因变量,
W
W
W表示权重,
X
X
X表示一个或多个自变量
x
x
x,
b
b
b表示偏置。
线性模型
在交易二手房时,房价的价格一般主要受房屋面积和房龄的影响。
遵循线性模型,目标(房屋价格)可以表示为 特征(面积和房龄)的加权和,如下所示:
p
r
i
c
e
=
w
a
r
e
a
⋅
a
r
e
a
+
w
a
g
e
⋅
a
g
e
+
b
price = w_{area}·area+w_{age}·age+b
price=warea⋅area+wage⋅age+b
w
a
r
e
a
w_{area}
warea 和
w
a
g
e
w_{age}
wage称为权重,量化了特征
a
r
e
a
area
area和
a
g
e
age
age对房屋价格的影响。
b
b
b 称为偏置(bias)、偏移量(offset)或截距(intercept)。 偏置是指当所有特征都取值为0时,预测值应该为多少。
作为一个机器学习任务,本模型属于监督学习模型的一种,它的思想就是从以往的真实售房数据(经验)中学习特征到目标之间的仿射关系 f f f即找到合适的 w w w和 b b b。
如何找到合适的 w w w和 b b b
在开始寻找最好的模型参数(model parameters) w w w和 b b b之前, 我们需要损失函数和基于损失的参数更新算法。 - (1)一种模型质量的度量方式;
- (2)一种能够更新模型以提高模型预测质量的方法;
1.损失函数
损失函数是指能够度量模型质量的一类函数/算法。
一个损失函数要求能够量化目标的实际值和模型对其的预测值之间的差距。
通常我们将损失定位非负数,数值越小,损失越小,完美预测时损失为0。
-
平方误差:回归(预测)问题中常使用的一种损失函数。
模型在样本i 上的损失如下所示:
l o s s i ( w , b ) = 1 2 ( y i ′ − y i ) 2 loss^{(w,b)}_i = \frac{1}{2} (y'_i - y_i)^2 lossi(w,b)=21(yi′−yi)2
y i ′ y'_i yi′表示模型在样本i上的预测值, y i y_i yi表示样本i对应的实际值。 -
模型在n个样本 上的总损失如下所示:
L o s s ( w , b ) = 1 n ∑ l o s s i ( w , b ) = 1 n ∑ 1 2 ( y i ′ − y i ) 2 = 1 n ∑ 1 2 ( W T x i + b − y i ) 2 Loss(w,b) = \frac{1}{n} \sum loss_i (w,b)= \frac{1}{n} \sum \frac{1}{2}(y'_i - y_i)^2 = \frac{1}{n} \sum \frac{1}{2}(W^Tx_i+b - y_i)^2 Loss(w,b)=n1∑lossi(w,b)=n1∑21(yi′−yi)2=n1∑21(WTxi+b−yi)2
在训练模型时,我们希望寻找一组参数( 𝐰,𝑏 ), 这组参数能最小化在所有训练样本上的总损失Loss。
2.随机梯度下降
随机梯度下降是指一种能够更新模型以提高模型预测质量的方法。这种方法几乎可以优化所有深度学习模型。
算法思想:
它通过不断地在损失函数递减的方向上更新参数来降低误差。
计算损失函数(数据集中所有样本的损失均值)Loss 关于模型参数 ( w,b ) 的导数(在这里也可以称为梯度)。
但实际中的执行可能会非常慢:因为在每一次更新参数之前,我们必须遍历整个数据集。 因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本, 这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。
在每次迭代中,我们首先随机抽样一个小批量
α
\alpha
α ,, 它是由固定数量的训练样本组成的。 然后,我们计算小批量的平均损失
L
o
s
s
α
Loss_{\alpha}
Lossα关于模型参数 **( w,b )**的导数(也可以称为梯度)。 最后,我们将梯度乘以一个预先确定的正数 𝜂,称为学习率,并从当前参数的值中减掉。
一次更新操作如下:
(
w
′
,
b
′
)
=
(
w
,
b
)
−
η
⋅
∂
(
w
,
b
)
L
o
s
s
α
(
w
,
b
)
(w',b') = (w,b)-\eta · \partial _{(w,b)}Loss_{\alpha}(w,b)
(w′,b′)=(w,b)−η⋅∂(w,b)Lossα(w,b)
在训练了预先确定的若干迭代次数后(或者直到满足某些其他停止条件后), 我们记录下模型参数的估计值,表示为 𝐰’ ,𝑏’。 但是,即使我们的函数确实是线性的且无噪声,这些估计值也不会使损失函数真正地达到最小值。 因为算法会使得损失向最小值缓慢收敛,但却不能在有限的步数内非常精确地达到最小值。
不过线性回归恰好是一个在整个域中只有一个最小值的学习问题。 但是对像深度神经网络这样复杂的模型来说,损失平面上通常包含多个最小值。 深度学习实践者很少会去花费大力气寻找这样一组参数,使得在训练集上的损失达到最小。
事实上,更难做到的是找到一组参数,这组参数能够在我们从未见过的数据上实现较低的损失, 这一挑战被称为泛化(generalization)。