
2.5.1 线性回归的基本概念
线性回归是机器学习中最简单也是最重要的模型之一,其模型建立同样遵循图2-10所示的流程:获取数据、数据预处理、训练模型、应用模型。回归模型可以理解为存在一个点集,用一条曲线去拟合它分布的过程。如果拟合曲线是一条直线,则称为线性回归;如果是一条二次曲线,则称为二次回归。线性回归是最简单的一种回归模型。
线性回归中有几个基本的概念需要掌握:假设函数(Hypothesis Function)、损失函数(Loss Function)和优化算法(Optimization Algorithm)。
假设函数是指用数学的方法描述自变量和因变量之间的关系,它们之间可以是一个线性函数或非线性函数。
损失函数是指用数学的方法衡量假设函数预测结果与真实值之间的误差。这个差距越小预测越准确,而算法的任务就是使这个差距越来越小。对于某个具体样本(x(i),y(i)),算法通过不断调整参数值ω和b,最终使得预测值和真实值尽可能相似,即(i)≈y(i)。整个训练的过程可以表述为通过调整参数值ω和b最小化损失函数。因此,损失函数也是衡量算法优良性的方法。这里涉及两个值:预测值和真实值。预测值是算法给出的值(用来表示概率)。而真实值是训练集中预先包含的,是事先准备好的。形式上,可以表示为:
其中,x(i)表示属于第i个样本的特征向量,y(i)表示属于第i个样本的分类标签,也就是真实值。损失函数的选择需要根据具体问题具体分析,在不同问题场景下采用不同的函数。通常情况下,会将损失函数定义为平方损失函数(Quadratic Loss Function)。在本次线性回归中,使用的是均方差(Mean Squared Error)来衡量,当然还有许多其他方法,如神经网络模型中可以使用交叉熵作为损失函数,在后面的章节会一一提到。
在模型训练中优化算法也是至关重要的,它决定了一个模型的精度和运算速度。本章的线性回归实例主要使用了梯度下降法进行优化。梯度下降是深度学习中非常重要的概念,值得庆幸的是它也十分容易理解。损失函数J(w,b)可以理解为变量w和b的函数。观察图2-11,垂直轴表示损失函数的值,两个水平轴分别表示变量w和b。实际上,w可能是更高维的向量,但是为了方便说明,在这里假设w和b都是一个实数。算法的最终目标是找到损失函数J(w,b)的最小值。而这个寻找过程就是不断地微调变量w和b的值,一步一步地试出这个最小值。试的方法就是沿着梯度方向逐步移动。本例中让图中的圆点表示J(w,b)的某个值,那么梯度下降就是让圆点沿着曲面下降,直到J(w,b)取到最小值或逼近最小值。
应用梯度下降算法,首先需要初始化参数w和b。一般情况下,深度学习模型中的w和b应该初始化为一个很小的数,逼近0但是非0。因为J(w,b)是凸函数,所以无论在曲面上初始化为哪一点,最终都会收敛到同一点或者相近的点。
图2-11 梯度下降示意图
一旦初始化w和b之后,就可以开始迭代过程了。所谓的迭代过程就是从初始点沿着曲面朝着下降最快的方向一步一步地移动,经过多次迭代,最终收敛到全局最优解或者接近全局最优解。
为了简化说明,将参数b暂时去掉,只考虑参数w,这时损失函数变为J(w)。整个梯度下降过程可以表示为重复以下步骤:
即重复对参数w进行更新操作,其中,表示学习率。学习率也是深度学习中的一个重要概念。学习率可以理解为每次迭代时圆点移动的步长,它决定了梯度下降的速率和稳定性。需要注意的是,在编码的过程中,为了方便书写和实现代码时更标准地命名变量,通常使用dw来表示,其意义不变。这样式(2-2)就可以表示为:
通过不断对参数w进行迭代更新,最终得到全局最优解或接近全局最优解,使得损失函数J(w,b)取得最小值。本章学习过线性回归中的梯度下降后,第3章中将讨论在Logistic回归中如何使用梯度下降算法。