1 线性回归
回归(regression)指能为一个或多个自变量与因变量之间的关系进行建模。
1.1 线性模型
线性假设是指目标可以表示为特征的加权和,以房价和面积、房龄为例,可以有下面的式子:
w称为权重(weight)
b称为偏置(bias)、偏移量(offset)或截距(intercept)
给定一个数据集,我们的目标是寻找模型的权重和偏置, 使得根据模型做出的预测大体符合数据里的真实价格。
1.2 损失函数
在我们开始考虑如何用模型拟合(fit)数据之前,我们需要确定一个拟合程度的度量。损失函数(loss function)能够量化目标的实际值与预测值之间的差距。 通常我们会选择非负数作为损失,且数值越小表示损失越小,完美预测时的损失为0。
常用的损失函数:
- 均方误差(Mean Squared Error, MSE):主要用于回归问题。
- 交叉熵损失(Cross-Entropy Loss):常用于分类问题。
- 绝对误差(Mean Absolute Error, MAE):用于回归问题。
- 铰链损失(Hinge Loss):主要用于最大间隔分类器如支持向量机(SVM)。
- 指数损失(Exponential Loss):用于分类问题。
- Huber 损失(Huber Loss):结合了 MSE 和 MAE 的优点,在误差较小时类似于 MSE,误差较大时类似于 MAE。
- Kullback-Leibler 散度(KL Divergence):用于衡量两个概率分布之间的差异
1.3解析解
解析解(Analytical Solution) 是指通过数学公式直接计算得到的最佳拟合参数的方法,而不是通过迭代优化算法来逐步逼近最优解。
1.4 随机梯度下降
在我们无法得到解析解的情况下,我们用到一种名为梯度下降(gradient descent) 的方法, 这种方法几乎可以优化所有深度学习模型, 它通过不断地在损失函数递减的方向上更新参数来降低误差。
简单的用法是计算损失函数关于模型参数的导数,但实际中的执行可能会非常慢,因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本, 这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。
在每次迭代中,我们首先随机抽样一个小批量B (batch size) , 它是由固定数量的训练样本组成的。,然后,我们计算小批量的平均损失关于模型参数的导数(也可以称为梯度)。 最后,我们将梯度乘以一个预先确定的正数n (learning rate),并从当前参数的值中减掉。
算法的步骤如下:
(1)初始化模型参数的值,如随机初始化;
(2)从数据集中随机抽取小批量样本且在负梯度的方向上更新参数,并不断迭代这一步骤。
事实上,更难做到的是找到一组参数,这组参数能够在我们从未见过的数据上实现较低的损失, 这一挑战被称为泛化(generalization)。
4.5 用模型进行预测
略
2 矢量化加速
矢量化(Vectorization)是一种编程技术,通过将操作应用于整个数组或矩阵,而不是单独的元素,从而提高代码的执行效率。
在训练我们的模型时,我们经常希望能够同时处理整个小批量的样本。 为了实现这一点,需要我们对计算进行矢量化, 从而利用线性代数库,而不是在Python中编写开销高昂的for循环。
例如使用Numpy模块对计算两个数组的点积
3 正态分布与平方损失
略
4 从线性回归到深度网络
略