Vectorization|向量化

bolin
发布于 2025-06-19 / 4 阅读
0
0

Vectorization|向量化

一、向量化的含义

向量化(Vectorization) 是一种利用数组或矩阵运算替代逐元素循环操作的技术,常用于科学计算和数据处理中,以提高代码执行效率。

通俗理解:就像用“批量处理”代替“一个一个做”——比如算100个数字的加法时,直接用一条指令完成,而不是循环100次。

向量化(图1).png

这张图片对比了非向量化向量化的实现方式:

  1. 参数表示

    • 数学符号:向量 w⃗、x⃗ 和标量 b,索引从 1 开始(线性代数惯例)。

    • NumPy 代码:数组 wx 和标量 b,索引从 0 开始(编程惯例)。

  2. 非向量化计算

    • 数学公式:手动展开求和 fw,b(x⃗)=w1x1+w2x2+w3x3+b。

    • 代码实现:用循环逐元素计算(for j in range(n)),效率较低。

  3. 向量化计算

    • 数学公式:点积运算 fw,b(x⃗)=w⃗⋅x⃗+b。

    • 代码实现:调用 np.dot(w, x) + b,简洁高效,避免显式循环。

二、向量化 与 非向量化对比

向量化(图2).png

  1. 非向量化实现(左侧)

    • 通过 for 循环逐个计算 w[j] × x[j] 并累加,共 16 次独立操作(t0 到 t15)。

    • 缺点:显式循环效率低,代码冗长,计算速度随数据量线性增长。

  2. 向量化实现(右侧)

    • 调用 np.dot(w, x),将向量 w⃗ 和 x⃗ 的点积计算封装为单条指令。

    • 原理:并行执行所有乘法并求和(w[0]x[0]+w[1]x[1]+⋯+w[15]x[15])。

    • 优势

      • 底层使用优化后的线性代数库(如 BLAS),避免循环开销。

      • 天然支持大规模数据,计算效率显著提升。

  3. 核心结论

    • 向量化通过硬件并行和算法优化,将 O(n) 的循环操作转化为单步计算,适合处理高维数据或批量运算。

三、梯度下降中的向量化

向量化(图3).png

  1. 问题描述(顶部)

    • 目标:对 16 维参数向量 w⃗ 和梯度向量 d⃗ 执行梯度下降更新:

      wj=wj−αdj (α=0.1)

    • 数学表示:向量形式为 w⃗=w⃗−0.1d⃗。

  2. 非向量化实现(中部)

    • 方法:通过 for 循环逐个更新每个参数 wj(共 16 次独立操作)。

    • 代码示例

      python

      for j in range(0, 16):
          w[j] = w[j] - 0.1 * d[j]
    • 缺点:显式循环效率低,代码冗余,计算速度慢。

  3. 向量化实现(底部)

    • 方法:直接对整个向量执行按元素操作:

      w⃗=w⃗ − 0.1⋅d⃗

    • 代码示例(NumPy):

      python

      w = w - 0.1 * d  # 单行完成所有更新
    • 优势

      • 代码简洁,无显式循环。

      • 底层利用并行计算(如 SIMD 指令),大幅提升速度。

  4. 核心对比

    非向量化

    向量化

    显式循环逐个更新

    单条指令批量更新

    效率低(O(n) 步)

    效率高(并行化)


  • 向量化将梯度下降的参数更新从 串行循环 转化为 并行批量操作,尤其适合高维优化问题(如深度学习)。

  • 实际应用中,向量化是加速数值计算(如 NumPy、TensorFlow)的基础技术。


评论