Datawhale X 李宏毅苹果书AI夏令营task2笔记

65 阅读1分钟

导读:

1725201006518.png

1. 什么是线性模型?

线性模型是最基础的回归模型之一,它假设输出 y 是输入特征 \mathbf{x} 的线性组合。其数学表达式为:

y=b+wxy = b + \mathbf{w}^\top \mathbf{x}

其中:

  • x=[x1,x2,,xn]\mathbf{x} = [x_1, x_2, \dots, x_n]^\top 表示 n 维输入特征向量。
  • w=[w1,w2,,wn]\mathbf{w} = [w_1, w_2, \dots, w_n]^\top 表示对应的权重向量。
  • b 是偏置项(截距),用于调整模型的输出。

线性模型的目标是通过学习最优的权重 w 和偏置 b 来最小化预测输出 \hat{y}_i 和实际输出 y_i 之间的差异。常用的损失函数是 均方误差 (Mean Squared Error, MSE),其表达式为:

L(w,b)=1mi=1m(yiy^i)2L(\mathbf{w}, b) = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2

其中,m 是样本数量, y_i 和 \hat{y}_i 分别是第 i个样本的真实值和预测值。

2. 线性模型的劣势(书中本节未详细提及,在此交代一下)

  1. 无法拟合复杂关系:假设输入x \mathbf{x}和输出 y 之间是线性关系,但实际中很多问题是非线性的。线性模型只能拟合直线或超平面,无法捕捉非线性模式。例如,无法拟合如下的非线性关系( 其中 ϵ\epsilon 是噪声项):
 y=sin(x)+ϵ   y = \sin(x) + \epsilon
  1. 高偏差问题:由于线性模型的表达能力有限,它可能无法很好地拟合训练数据,导致较大的误差,即高偏差。模型复杂度不足会导致训练误差和测试误差都较大。

  2. 难以处理多特征复杂关系:当数据维度较高且特征之间存在复杂的交互作用时,线性模型可能无法有效捕捉这些关系。例如,当 y 是两个特征 x_1 和 x_2的乘积时,线性模型无法拟合这样的关系:

y=x1x2+ϵ y = x_1 \cdot x_2 + \epsilon

3.优化模型能力的思路

1. 分段线性模型

为了克服线性模型的限制,可以使用 分段线性模型。该模型将输入特征划分为多个区间,并在每个区间内使用不同的线性模型进行拟合。其数学表达式为:

y={b1+w1x x区间 1b2+w2x x区间 2bk+wkx x区间 ky = \begin{cases} b_1 + \mathbf{w}_1^\top \mathbf{x} & \text{ } \mathbf{x} \in \text{区间 1} \\ b_2 + \mathbf{w}_2^\top \mathbf{x} & \text{ } \mathbf{x} \in \text{区间 2} \\ \vdots & \\ b_k + \mathbf{w}_k^\top \mathbf{x} & \text{ } \mathbf{x} \in \text{区间 } k \end{cases}

这里,每个区间都有自己独立的参数 wk\mathbf{w}_kbkb_k,这样可以在不同区间内更好地拟合数据。

示例:假设我们在预测房价,房屋面积较小时,房价与面积成正比;当面积达到某一阈值时,房价的增幅会减小。分段线性模型可以分别在不同的面积范围内使用不同的线性函数进行预测,从而更好地拟合数据。

2. 更换激活函数

为了进一步提升模型的表现,可以引入非线性激活函数。激活函数是将输入映射到输出的一种非线性变换,可以使模型具有更强的拟合能力。常见的激活函数包括:

  1. Sigmoid 函数:将输入 x 映射到 (0, 1) 区间,适用于二分类问题。其公式为:
σ(x)=11+ex\sigma(x) = \frac{1}{1 + e^{-x}}

这种函数的特点是对于大输入值(正或负),输出会趋于稳定,但可能导致梯度消失问题。

  1. ReLU 函数:即修正线性单元(Rectified Linear Unit),其表达式为:
ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)

ReLU 在 x > 0 时是线性的,而在 x \leq 0 时输出为零。这种非线性使得模型可以拟合复杂的关系,同时具有计算简单、不易饱和等优点。

  1. Softmax 函数:常用于多分类问题,将输入向量转换为概率分布。其公式为:
Softmax(zi)=ezijezj\text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}}

其中 z_i 是输入向量的第 i 个元素,输出为每个类别的概率值。

通过使用这些激活函数,线性模型可以变得更加灵活,能够处理复杂的非线性关系。

3. 采用神经网络结构

为了进一步提高模型的表达能力,可以采用 神经网络结构。神经网络由多个层组成,每一层的输出作为下一层的输入,逐步提取数据中的特征。每一层的输出通过激活函数引入非线性,从而构建出更加复杂的模型。

单层神经元模型

假设我们有一个单层的神经网络,其输出为:

a=σ(wx+b)a = \sigma(\mathbf{w}^\top \mathbf{x} + b)

其中:

  • x\mathbf{x}是输入特征向量。
  • w\mathbf{w} 是权重向量。
  • b是偏置。
  • σ\sigma 是激活函数,如 ReLU 或 Sigmoid。

多层神经网络

在多层神经网络中,每层的输出是下一层的输入。例如,假设我们有两层的神经网络,其输出可以表示为:

h1=σ(W1x+b1)\mathbf{h}_1 = \sigma(\mathbf{W}_1^\top \mathbf{x} + \mathbf{b}_1)
h2=σ(W2h1+b2)\mathbf{h}_2 = \sigma(\mathbf{W}_2^\top \mathbf{h}_1 + \mathbf{b}_2)
y=W3h2+b3y = \mathbf{W}_3^\top \mathbf{h}_2 + b_3

这里, W1\mathbf{W}_1, W2\mathbf{W}_2, W3\mathbf{W}_3 是不同层的权重矩阵, b1\mathbf{b}_1, b2\mathbf{b}_2, b3\mathbf{b}_3 是对应的偏置。

神经网络的训练

  • 前向传播:计算输入数据经过神经网络的输出,即从输入层经过隐藏层再到输出层的计算过程。
  • 损失函数:通常使用均方误差 (MSE) 或交叉熵损失函数来衡量模型的预测结果与真实标签之间的差异。

对于回归问题,常用的损失函数为均方误差:

L(θ)=1mi=1m(y^iyi)2L(\theta) = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i)^2

对于分类问题,常用的损失函数为交叉熵损失:

L(θ)=1mi=1mc=1Cyi,clog(y^i,c)L(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \sum_{c=1}^{C} y_{i,c} \log(\hat{y}_{i,c})

其中,yi,c y_{i,c}是第 i 个样本的真实类别标签,y^i,c \hat{y}_{i,c}是模型预测的该样本属于类别 c 的概率。

  • 反向传播和优化:通过梯度下降法(或其他优化方法),计算损失函数对模型参数的梯度,并更新参数以最小化损失。参数更新公式为:
θ(t+1)=θ(t)ηθL(θ)\theta^{(t+1)} = \theta^{(t)} - \eta \nabla_{\theta} L(\theta)

其中, η\eta 是学习率,θL(θ) \nabla_{\theta} L(\theta) 是损失函数关于参数 θ\theta 的梯度。

通过增加神经网络的层数和神经元的数量,模型可以变得更加复杂和具有更强的拟合能力。然而,过多的参数也可能导致过拟合,需要通过正则化、早停等技术来控制模型的复杂度。

总结:

我们回看这三种优化思路,他们的共同点即为:引入更多的参数去提升模型的适应能力

1725201047098.png