吴恩达深度学习复盘(6)神经网络的矢量化原理

矢量化基础是线性运算,这里先简单复习一下。线性基本运算基本没什么,大量使用的有点乘和叉乘。

基本例子

1. 矩阵的基本概念

  • 矩阵可以看作是一个块或者二维数组,这是对矩阵的一个在计算机计算的直观描述。

2. 向量的点积(内积)

  • 例子:以向量和向量为例

  • 计算过程

  • 总结:

对于向量和向量

假设

它们的点积的计算方式是,也就是将对应元素相乘后再把所有乘积相加。

  • 等价表示:

向量通常可以用列向量表示,通过取的转置(即将列向量变为行向量,记为),可以得到点积的另一种等价表示形式。

例如,若是一2x1的列向量,转置后是一个1×2的行向量。此时,为2×1列向量)的点积就等于乘以,即。这种表示方式在理解矩阵乘法时非常有用,因为它将向量的点积与矩阵乘法联系了起来。

3. 向量与矩阵的乘法

  • 设定向量和矩阵:

设向量

设矩阵W是一个的矩阵,

  • 计算乘积矩阵的元素:

这里,我们来计算

结果矩阵的第一个元素:用向量与矩阵W的第一列向量做点积,即

结果矩阵的第二个元素:用向量与矩阵W的第二列向量做点积,即

所以,

  • python点乘例子

    import numpy as np

    定义向量 A

    A = np.array([[2, 3, 4]])

    定义矩阵 W

    W = np.array([[5, 6],
    [7, 8],
    [9, 10]])

    计算向量与矩阵的乘积

    result = np.dot(A, W)

    print("向量与矩阵的乘积结果:", result)

4. 矩阵与矩阵的乘法

设矩阵,这是一个的矩阵;矩阵,这是一个的矩阵。

根据矩阵乘法的规则,因为A的列数(3列)等于B的行数(3行),所以A和B可以相乘,结果矩阵的行数等于A的行数(2行),列数等于B的列数(2列),即C是一个的矩阵。

接下来计算C中各个元素的值:

  • (C的第一行第一列元素): A的第一行元素与B的第一列元素对应相乘再相加,即
  • (C的第一行第二列元素): A的第一行元素与B的第二列元素对应相乘再相加,即
  • (C的第二行第一列元素): A的第二行元素与B的第一列元素对应相乘再相加,即
  • (C的第二行第二列元素): A的第二行元素与B的第二列元素对应相乘再相加,即

所以,矩阵

NumPy 库来验证:

复制代码
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])
B = np.array([[7, 8],
              [9, 10],
              [11, 12]])

C = np.dot(A, B)
print(C)

转向矩阵通用例子

设向量的列向量,矩阵W为的矩阵

根据向量与矩阵乘法规则(用向量转置后的行向量与矩阵相乘),得到的结果是一个的矩阵(行向量)。

计算过程如下:

=

=

  1. 笔者注:

无论是向量与矩阵相乘,还是矩阵与矩阵相乘,本质上都涉及到很多向量之间的点积运算,并且是按照一定的顺序来构建结果矩阵(如)的元素,一次计算一个元素。其实是规则的嵌套,函数的函数。

矢量化展开的原理和例子

1.简介

  • 以矩阵,说明其转置表示,即把的列变为行。在NumPy中,除了常规的转置理解方式外,还可以使用这样的函数来计算转置,该函数会将矩阵的列横向排列。

  • 给出矩阵,通过(np指NumPy库)这样的代码计算矩阵。python在一些代码中可能会看到这种写法,这也是计算矩阵乘法的另一种方式,使用np.dot更清晰。

2.矢量化原理

假设输入特征值为 [2, 17],我们将其看作矩阵 A 的转置 ,这是一个 1x2 的矩阵。

设权重矩阵 W 是一个 2x3 的矩阵,偏置矩阵 B 是一个 1x3 的矩阵,具体数值如下:

复制代码
A_T = [2, 17]
W = [[1, 2, 3],
     [4, 5, 6]]
B = [[10, 20, 30]]

计算

  • 计算
    • 的第一个元素:
    • 的第二个元素:
    • 的第三个元素:
    • 所以
  • 再加上偏置矩阵 B:
    • Z 的第一个元素:
    • Z 的第二个元素:
    • Z 的第三个元素:
    • 所以

应用激活函数 g

假设激活函数 g 是 sigmoid 函数,其公式为

所以最终的输出矩阵

3.代码例子

python 复制代码
import numpy as np

# 定义 sigmoid 激活函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 输入特征值矩阵 A 的转置
A_T = np.array([[2, 17]])

# 权重矩阵 W
W = np.array([[1, 2, 3],
              [4, 5, 6]])

# 偏置矩阵 B
B = np.array([[10, 20, 30]])

# 计算 Z = A^T W + B
Z = np.dot(A_T, W) + B

# 应用激活函数 g 得到输出矩阵 a
a = sigmoid(Z)

print("Z 的值:", Z)
print("a 的值:", a)    

4.矢量化实现的优势

只需要几行代码就能在神经网络中实现一个问题,并且能获得巨大的速度提升。原因是现代计算机擅长高效地实现矩阵乘法(如`np.dot`对应的操作),利用快速硬件可以非常有效地完成大规模矩阵乘法运算。

笔者注:用纯cpu集群训练理论是可以的,但是是不现实的。

相关推荐
Kyln.Wu12 分钟前
【python实用小脚本-169】『Python』所见即所得 Markdown 编辑器:写完即出网页预览——告别“写完→保存→刷新”三连
开发语言·python·编辑器
爱掉发的小李17 分钟前
Linux 环境下 Docker 安装与简单使用指南
java·linux·运维·c++·python·docker·php
Debroon1 小时前
大模型幻觉的本质:深度=逻辑层次,宽度=组合限制,深度为n的神经网络最多只能处理n层逻辑推理,宽度为w的网络无法区分超过w+1个复杂对象的组合
人工智能·深度学习·神经网络
惜.己1 小时前
selenium获取元素 出现的错误AttributeError: ‘TestPage‘ object has no attribute ‘driver‘
python·selenium·pycharm
weisian1512 小时前
力扣经典算法篇-42-矩阵置零(辅助数组标记法,使用两个标记变量)
算法·leetcode·矩阵
LetsonH2 小时前
⭐CVPR2025 FreeUV:无真值 3D 人脸纹理重建框架
人工智能·python·深度学习·计算机视觉·3d
蹦蹦跳跳真可爱5892 小时前
Python----大模型(大模型微调--BitFit、Prompt Tuning、P-tuning、Prefix-tuning、LORA)
人工智能·python·深度学习·自然语言处理·transformer
Monkey的自我迭代2 小时前
决策树分类实战:从数据到模型优化
python·决策树·机器学习
DONG9132 小时前
Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
开发语言·汇编·数据结构·python·算法·青少年编程·排序算法
golitter.3 小时前
pytorch的 Size[3] 和 Size[3,1] 区别
人工智能·pytorch·python