2.1深度学习-矢量化加速&正态分布与平方损失

文摘   2024-11-16 18:16   上海  

线性回归与预测

在机器学习中,线性回归是一个非常基础但至关重要的算法。给定一组特征(如房屋面积和房龄),我们可以通过训练得到一个线性回归模型来预测房屋价格。这一过程通常称为预测(Prediction),或者有时也被称为推断(Inference)。虽然“推断”在深度学习领域使用较多,但在统计学中,这个词更常用来描述通过数据集估计模型参数的过程,因此“预测”这个词可能更准确一些,尤其在讲解回归问题时。

预测的原理

假设我们的线性回归模型已经通过训练得到,其模型形式为:

y_hat = w_hat^T * x + b_hat

这里,w_hat 是权重向量,b_hat 是偏置,x 是输入特征(例如房屋面积和房龄)。给定新的特征输入 x1 和 x2,我们可以通过该模型预测目标变量 y,例如房屋的价格。

线性回归的应用:预测房屋价格

比如,假设你想预测一套房屋的价格,已知其面积和房龄。通过训练的模型,我们可以将房屋的面积和房龄作为特征输入 x1 和 x2,并通过模型来计算价格预测:

y_hat = w_1 * x1 + w_2 * x2 + b

如果模型训练良好,并且特征选择和数据质量都合适,那么预测的结果应该能准确反映出房屋价格的实际值。

2.1.2 向量化加速

在实际的模型训练和推断中,尤其是在处理大规模数据集时,向量化计算的优势不可忽视。线性回归模型的训练过程中会涉及大量的矩阵和向量运算。如果我们依赖逐元素的操作(比如使用Python的for循环)来进行计算,会严重影响效率,特别是当数据规模较大时,计算时间将变得不可接受。

为了提高计算效率,我们采用向量化操作,借助高效的线性代数库来批量处理整个数据集,而不是通过低效的for循环逐个处理。这不仅可以大大加快计算速度,还可以减少出错的机会。

向量化的示例

考虑两个向量相加的操作,假设我们有两个全是1的10000维向量 a 和 b,我们希望计算它们的逐元素和。

  1. 使用for循环:

n = 10000
a = np.ones(n)
b = np.ones(n)
c = np.zeros(n)

timer = Timer()
for i in range(n):
c[i] = a[i] + b[i]
f'{timer.stop():.5f} sec'

输出:

'4.44498 sec'
  1. 使用向量化的加法:

timer.start()
d = a + b
f'{timer.stop():.5f} sec'

输出:

'0.00036 sec'

从结果可以看到,使用向量化加法相比逐元素的加法(for循环)显著加快了计算速度,差距甚至达到几个数量级。这正是通过向量化的方式利用底层优化的数学库,避免了高开销的逐个操作,从而获得了大幅度的性能提升。

向量化的优势

  1. 性能提升:通过向量化,计算任务能够利用底层高度优化的库(如BLAS、cuBLAS等),这些库是专为线性代数运算而设计的,能够在CPU和GPU上充分发挥硬件优势。对于大规模数据集,性能提升尤为明显。

  2. 简化代码:向量化可以大幅减少代码复杂度,无需手动编写大量的循环结构。例如,矩阵乘法、逐元素加法等都可以通过简单的运算符来完成,极大提高了代码的简洁性和可读性。

  3. 减少错误:手动编写循环时,容易出现边界错误、索引错误等问题。向量化计算将这些操作委托给经过优化的数学库,减少了人为出错的机会。

总结

在机器学习中,预测是一个非常关键的步骤。通过已训练的线性回归模型,我们可以根据输入的特征来预测目标变量。为了提高效率,尤其是在大数据集的处理上,向量化技术显得尤为重要。通过利用高效的线性代数库,能够大幅加速计算,简化代码,减少错误,这对于深度学习和机器学习模型的训练与推断都是至关重要的。

未来,随着数据规模的不断增大和计算能力的提升,向量化技术将继续发挥重要作用,尤其是在硬件加速(如GPU、TPU)的支持下,我们可以更高效地处理复杂的模型训练和推断任务。

2.1.3 正态分布与平方损失

在这一部分,我们将通过假设噪声的分布形式,来进一步解释平方损失目标的含义。正态分布(也叫高斯分布)在统计学和机器学习中非常重要。它是最常见的连续概率分布之一,在许多自然现象中都有体现。在线性回归中,假设误差或噪声是符合正态分布的,这对模型的理论基础和损失函数的选择具有重要意义。

正态分布(高斯分布)

正态分布由数学家高斯首次应用于天文学研究,并以他的名字命名。一个随机变量 x 服从均值为 μ,方差为 σ²(标准差为 σ)的正态分布时,其概率密度函数(PDF)由以下公式给出:

p(x) = 1 / √(2πσ²) * exp(-(x - μ)² / (2σ²))

其中:

  • μ 是均值,表示数据分布的中心;

  • σ² 是方差,决定分布的宽度(标准差 σ 是方差的平方根);

  • x 是自变量,表示观测数据。

正态分布的图像呈现一个对称的钟形曲线。均值 μ 决定了分布的中心,标准差 σ 决定了曲线的宽度。

正态分布与线性回归

在线性回归模型中,假设目标变量 y 由输入特征 x 和噪声(误差)组成。具体地,假设噪声服从均值为零、方差为 σ² 的正态分布,即:

y = w^T x + b + ε

其中,ε 是噪声项,且 ε ~ N(0, σ²),即噪声服从均值为 0、方差为 σ² 的正态分布。

线性回归的目标是最小化预测值和真实值之间的差距,而这一差距通常使用平方损失函数来衡量。平方损失函数可以通过最大化正态分布的似然函数来理解。

平方损失

平方损失函数定义为预测值与真实值之间的差的平方。具体地,对于每个样本 i,损失函数 L 表示为:

L(ŷi, yi) = (ŷi - yi)²

其中,ŷi 是模型预测的值,yi 是实际值。

假设噪声服从正态分布,我们可以通过最大化似然函数来得到线性回归的估计。在正态分布中,似然函数是所有样本概率密度的乘积,即:

L(θ) = ∏(i=1 to n) p(yi | xi, θ)

其中,p(yi | xi, θ) 是在给定输入 xi 和模型参数 θ(包括 w 和 b)下,输出 yi 的概率密度。最大化这个似然函数相当于最小化平方损失函数。

Python实现正态分布

为了更好地理解正态分布,我们可以使用Python编写一个简单的函数来计算正态分布的概率密度。以下是一个计算正态分布概率密度的函数:

import math
import numpy as np

def normal(x, mu, sigma):
p = 1 / math.sqrt(2 * math.pi * sigma**2)
return p * np.exp(-0.5 * (x - mu)**2 / sigma**2)

通过调用这个函数,我们可以计算给定均值和标准差下,任意 ( x ) 值的正态分布概率密度。

可视化正态分布

接下来,我们使用 numpy 来绘制正态分布的曲线。我们可以选择不同的均值和标准差参数来观察正态分布曲线的变化。以下是绘制不同均值和标准差的正态分布图形的代码:

import matplotlib.pyplot as plt

# 定义x的取值范围
x = np.arange(-7, 7, 0.01)

# 设置不同的均值和标准差
params = [(0, 1), (0, 2), (3, 1)]

# 绘制图形
plt.figure(figsize=(4.5, 2.5))
for mu, sigma in params:
y = normal(x, mu, sigma)
plt.plot(x, y, label=f'mean {mu}, std {sigma}')

plt.xlabel('x')
plt.ylabel('p(x)')
plt.legend()
plt.show()

在这个可视化图中,我们选择了三个不同的参数组合:

  1. 均值为0,标准差为1;

  2. 均值为0,标准差为2;

  3. 均值为3,标准差为1。

这些曲线展示了不同均值和标准差下正态分布的变化。例如,当标准差增加时,曲线变得更加平缓,表示数据的分布更广。

总结

正态分布与线性回归之间有着密切的关系。在线性回归中,假设噪声服从正态分布,这使得平方损失函数成为最大化似然函数的一种有效方法。通过理解正态分布的性质,我们不仅能更好地理解回归模型的理论基础,还能利用其在实际问题中进行预测和推断。


2.1.3 正态分布与平方损失(续)

正如我们所看到的,改变均值会导致分布沿 ( x ) 轴的偏移,而增加方差会使分布更加分散,降低其峰值。

噪声的正态分布假设

在线性回归模型中,假设目标值 ( y ) 可以表示为输入特征 ( x ) 的线性组合加上一个噪声项 ( \epsilon ),即:

y = w^T x + b + ε

其中,噪声 ( ε ) 服从均值为零,方差为 ( σ^2 ) 的正态分布:

ε ~ N(0, σ^2)

似然函数

基于正态分布的假设,我们可以推导出给定输入 ( x ) 时,观测到特定输出 ( y ) 的可能性(likelihood)。由于噪声 ( ε ) 服从正态分布,目标变量 ( y ) 的条件概率密度函数可以表示为:

P(y | x) = 1 / √(2πσ^2) * exp( - (y - w^T x - b)² / 2σ² )

这表示在给定输入 ( x ) 时,观测到输出 ( y ) 的概率密度。

最大似然估计

在最大似然估计法中,目标是寻找使整个数据集的似然函数 P(y | X) 最大化的参数 ( w ) 和 ( b )。对于整个数据集 ( {(x^(i), y^(i))} ),数据点 ( i ) 的条件概率密度为:

P(y | X) = Π P(y^(i) | x^(i))

其中 ( n ) 是数据集的大小。最大似然估计法要求我们寻找一组 ( w ) 和 ( b ),使得这个乘积最大化。

对数似然函数

我们可以通过最大化对数似然来简化这一过程。由于对数函数是单调递增的,最大化对数似然和最大化原始似然是等价的。对数似然函数是似然函数的自然对数:

log P(y | X) = Σ log( P(y^(i) | x^(i)) )

代入正态分布的概率密度函数,我们可以得到对数似然函数:

log P(y | X) = -n / 2 log(2πσ²) - 1 / (2σ²) Σ (y^(i) - w^T x^(i) - b)²

由于最大化对数似然等价于最大化似然,因此我们将目标转换为最小化负对数似然

  • log P(y | X) = n / 2 log(2πσ²) + 1 / (2σ²) Σ (y^(i) - w^T x^(i) - b)²

简化与平方损失

通常情况下,我们假设噪声的标准差 ( σ ) 是已知的或固定的。因此,我们可以忽略第一个项,因为它与参数 ( w ) 和 ( b ) 无关。剩下的第二项与我们之前介绍的平方损失函数是一样的,即:

1 / (2σ²) Σ (y^(i) - w^T x^(i) - b)²

可以看出,最小化负对数似然函数中的第二项等价于最小化平方误差损失函数。因此,在高斯噪声假设下,最小化均方误差(MSE)等价于进行线性回归的最大似然估计。

结论

在假设噪声服从正态分布的情况下,使用均方误差损失函数进行最优化等价于最大化线性回归模型的似然函数。因此,最小化均方误差不仅在统计学上具有重要意义,而且与最大似然估计相联系,这为我们理解和应用线性回归提供了坚实的理论基础。


智能空间机器人
好好学,一天进步一点点,关键是坚持。
 最新文章