线性神经网络LNN

线性神经网络LNN

线性回归

回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。

当我们想预测一个数值时,就会涉及到回归问题。 | 但不是所有的预测都是回归问题。

线性回归的基本元素

训练集的每行数据(比如一次房屋交易相对应的数据)称为样本(sample), 也可以称为数据点(data point)或数据样本(data instance)。

我们把试图预测的目标(比如预测房屋价格)称为标签(label)或目标(target)。 预测所依据的自变量(面积和房龄)称为特征(feature)或协变量(covariate)。

线性模型

仿射变换:$$\mathrm{price} = w_{\mathrm{area}} \cdot \mathrm{area} + w_{\mathrm{age}} \cdot \mathrm{age} + b.$$

  • 仿射变换的特点是通过加权和对特征进行线性变换(linear transformation), 并通过偏置项来进行平移(translation)。

当我们的输入包含dd个特征时,我们将预测结果y^\hat{y}(通常使用“尖角”符号表示yy的估计值)表示为:

y^=w1x1+...+wdxd+b.\hat{y} = w_1 x_1 + ... + w_d x_d + b.

进一步简化为:

y^=wx+b.\hat{y} = \mathbf{w}^\top \mathbf{x} + b.

其中,X\mathbf{X}的每一行是一个样本,每一列是一种特征。

在开始寻找最好的模型参数(model parameters)w\mathbf{w}bb之前,我们还需要两个东西:(1)一种模型质量的度量方式;(2)一种能够更新模型以提高模型预测质量的方法。

损失函数(loss function)

回归问题中最常用的损失函数是平方误差函数。

当样本ii的预测值为y^(i)\hat{y}^{(i)},其相应的真实标签为y(i)y^{(i)}时,平方误差可以定义为以下公式:

l(i)(w,b)=12(y^(i)y(i))2.l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2.

用线性模型拟合数据图示:

用线性模型拟合数据

由于平方误差函数中的二次方项,估计值y^(i)\hat{y}^{(i)}和观测值y(i)y^{(i)}之间较大的差异将导致更大的损失。

为了度量模型在整个数据集上的质量,我们需计算在训练集nn个样本上的损失均值(也等价于求和)。

L(w,b)=1ni=1nl(i)(w,b)=1ni=1n12(wx(i)+by(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.

在训练模型时,我们希望寻找一组参数(w,b\mathbf{w}^*, b^*),这组参数能最小化在所有训练样本上的总损失。如下式:

w,b=argminw,b L(w,b).\mathbf{w}^*, b^* = \operatorname*{argmin}_{\mathbf{w}, b}\ L(\mathbf{w}, b).

线性回归的解可以用一个公式简单地表达出来, 这类解叫作解析解(analytical solution)

随机梯度下降

随机梯度下降:在损失函数递减的方向上更新参数来降低误差。

梯度下降的用法

梯度下降最简单的用法是计算损失函数(数据集中所有样本的损失均值) 关于模型参数的导数(在这里也可以称为梯度)。 但实际中的执行可能会非常慢:因为在每一次更新参数之前,我们必须遍历整个数据集。 因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本, 这种变体叫做*小批量随机梯度下降*(minibatch stochastic gradient descent)。

用下面的数学公式来表示这一更新过程(\partial表示偏导数):

(w,b)(w,b)ηBiB(w,b)l(i)(w,b).(\mathbf{w},b) \leftarrow (\mathbf{w},b) - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{(\mathbf{w},b)} l^{(i)}(\mathbf{w},b).

总结一下,算法的步骤如下:(1)初始化模型参数的值,如随机初始化;(2)从数据集中随机抽取小批量样本且在负梯度的方向上更新参数,并不断迭代这一步骤。

对于平方损失和仿射变换,我们可以明确地写成如下形式:

wwηBiBwl(i)(w,b)=wηBiBx(i)(wx(i)+by(i)),bbηBiBbl(i)(w,b)=bηBiB(wx(i)+by(i)).\begin{aligned} \mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{\mathbf{w}} l^{(i)}(\mathbf{w}, b) = \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_b l^{(i)}(\mathbf{w}, b) = b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right). \end{aligned}

以上公式中的w\mathbf{w}x\mathbf{x}都是向量。

在这里,更优雅的向量表示法比系数表示法(如w1,w2,,wdw_1, w_2, \ldots, w_d)更具可读性。

  • B|\mathcal{B}|表示每个小批量中的样本数,这也称为批量大小(batch size)。

  • η\eta表示学习率(learning rate)。

  • 批量大小和学习率的值通常是手动预先指定,而不是通过模型训练得到的。

这些可以调整但不在训练过程中更新的参数称为超参数(hyperparameter)。

调参(hyperparameter tuning)是选择超参数的过程。

超参数通常是我们根据训练迭代结果来调整的,而训练迭代结果是在独立的验证数据集(validation dataset)上评估得到的。

在训练了预先确定的若干迭代次数后(或者直到满足某些其他停止条件后),我们记录下模型参数的估计值,表示为w^,b^\hat{\mathbf{w}}, \hat{b}

泛化:找到一组参数,这组参数能够在我们从未见过的数据上实现较低的损失, 这一挑战被称为泛化(generalization)。

数据矢量化

在训练我们的模型时,我们经常希望能够同时处理整个小批量的样本。 为了实现这一点,需要我们对计算进行矢量化, 从而利用线性代数库,而不是在Python中编写开销高昂的for循环。

正态分布与平方损失

正态分布(normal distribution),也称为高斯分布(Gaussian distribution)。

简单的说,若随机变量xx具有均值μ\mu和方差σ2\sigma^2(标准差σ\sigma),其正态分布概率密度函数如下:

p(x)=12πσ2exp(12σ2(xμ)2).p(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (x - \mu)^2\right).

均方误差损失函数(简称均方损失)可以用于线性回归的一个原因是:我们假设了观测中包含噪声,其中噪声服从正态分布。噪声正态分布如下式:

y=wx+b+ϵ,y = \mathbf{w}^\top \mathbf{x} + b + \epsilon,

其中,ϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2)

因此,我们现在可以写出通过给定的x\mathbf{x}观测到特定yy似然(likelihood):

P(yx)=12πσ2exp(12σ2(ywxb)2).P(y \mid \mathbf{x}) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (y - \mathbf{w}^\top \mathbf{x} - b)^2\right).

现在,根据极大似然估计法,参数w\mathbf{w}bb的最优值是使整个数据集的似然最大的值:

P(yX)=i=1np(y(i)x(i)).P(\mathbf y \mid \mathbf X) = \prod_{i=1}^{n} p(y^{(i)}|\mathbf{x}^{(i)}).

根据极大似然估计法选择的估计量称为极大似然估计量。虽然使许多指数函数的乘积最大化看起来很困难,但是我们可以在不改变目标的前提下,通过最大化似然对数来简化。

由于历史原因,优化通常是说最小化而不是最大化。我们可以改为最小化负对数似然logP(yX)-\log P(\mathbf y \mid \mathbf X)

由此可以得到的数学公式是:

logP(yX)=i=1n12log(2πσ2)+12σ2(y(i)wx(i)b)2.-\log P(\mathbf y \mid \mathbf X) = \sum_{i=1}^n \frac{1}{2} \log(2 \pi \sigma^2) + \frac{1}{2 \sigma^2} \left(y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)} - b\right)^2.

  • 现在我们只需要假设σ\sigma是某个固定常数就可以忽略第一项,因为第一项不依赖于w\mathbf{w}bb

  • 现在第二项除了常数1σ2\frac{1}{\sigma^2}外,其余部分和前面介绍的均方误差是一样的。

  • 幸运的是,上面式子的解并不依赖于σ\sigma

因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。

从线性回归到深度网络

神经网络图

我们将线性回归模型描述为一个神经网络。 需要注意的是,该图只显示连接模式,即只显示每个输入如何连接到输出,隐去了权重和偏置的值。

../_images/singleneuron.svg

因此输入层中的输入数(或称为特征维度,feature dimensionality)为dd,网络的输出为o1o_1,因此输出层中的输出数是1。

需要注意的是,输入值都是已经给定的,并且只有一个计算神经元。 由于模型重点在发生计算的地方,所以通常我们在计算层数时不考虑输入层。 也就是说,上图中神经网络的层数为1。 我们可以将线性回归模型视为仅由单个人工神经元组成的神经网络,或称为单层神经网络

全连接层

对于线性回归,每个输入都与每个输出相连, 我们将这种变换(上图中的输出层) 称为全连接层(fully-connected layer)或称为稠密层(dense layer)。

总结

  • 机器学习模型中的关键要素是训练数据损失函数优化算法,还有模型本身

  • 矢量化使数学表达上更简洁,同时运行的更快。

  • 最小化目标函数和执行极大似然估计等价。

  • 线性回归模型也是一个简单的神经网络。

Reference

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2024 Guijie Wang
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信