如果有 30 名学生、8 个特征、16 个神经元,要写多少次内积?
逐个样本、逐个神经元计算会不断重复同一种工作。矩阵把数据和权重排成规则表格,让计算机一次完成所有“对应相乘再求和”。
一个向量
表示一个样本,交给一个或几个神经元分别打分。
一个数据矩阵
每行放一名学生,一次送进同一层神经网络。
矩阵解决的四个问题
- 能说出矩阵的行数、列数和形状
- 能用“每行点乘向量”计算矩阵向量积
- 能判断两个矩阵能否相乘及结果形状
- 能解释 Y=XW+b 如何批量处理样本
矩阵:按行、按列排好的长方形数字表
下面矩阵有 2 行、3 列,形状写作 2×3。先说行,再说列,就像先说教室有几排,再说每排几个座位。
加法与数乘:仍然是对应格子逐项计算
只有形状相同才能相加;相同位置的元素相加。
一个普通数乘矩阵时,要乘每一个格子。
矩阵乘向量:矩阵的每一行分别给向量打一次分
第 10 章只有一组权重 w·x。现在把多组权重一行一行叠起来,就能同时得到多个分数。
1×2+3×4+4×(−3)=2
−2×2+6×4+5×(−3)=5
两行各产生一个标量,合起来得到二维向量 (2,5)。
拖动输入向量,看两行权重如何产生两个分数
矩阵 A 固定不动。改变 x 的三个特征,每一行都会独立做一次内积。
神经网络的一层,就是许多神经元整齐排成矩阵
每一行权重属于一个神经元;输入向量同时交给所有行。加上每个神经元自己的偏差,再通过激活函数,就得到下一层向量。
一名样本的 n 个特征。
m 行神经元,每行 n 个权重。
每个输出神经元一个可学习偏差。
矩阵乘矩阵:左边选一行,右边选一列,做内积
结果矩阵的每个格子,都来自一次“行点乘列”。计算一个格子时不要整张表一起看,只圈住那一行和那一列。
所以可以乘
2×2
左上角:第 1 行 · 第 1 列
右下角:第 2 行 · 第 2 列
批量计算:一次把多名样本送进同一组神经元
为了方便批量处理,这里把每个样本写成一行。数据矩阵 X 有 B 行样本、n 列特征;权重矩阵 W 有 n 行、m 列;结果 Y 有 B 行、m 列。
每列 1 个特征
1 个输出神经元
原来的那名学生
| 样本 | x₁ | x₂ | × W | + b | y₁ | y₂ |
|---|---|---|---|---|---|---|
| 样本 A | 1 | 2 | [[2,−1],[1,3]] | [1,0] | 5 | 5 |
| 样本 B | 2 | 1 | 共享同一个 W | [1,0] | 6 | 1 |
| 样本 C | 3 | 0 | 共享同一个 W | [1,0] | 7 | −3 |
四个最容易混淆的地方
先行后列
3×2 表示 3 行 2 列,不是反过来。形状不是乘法题。
里面相同
(a×b)(b×c) 才能相乘;结果形状是外侧 a×c。
行点乘列
矩阵乘法不是同位置元素相乘。结果每个格子都是一对行列的内积。
把矩阵计算浓缩成四张卡片
知识检测:选择后立即诊断
每一道错题都会说明具体知识缺口并提供回看链接。改对后,章末诊断仍保留首次薄弱点。
矩阵怎样一次安排很多次内积?
同一个输入列依次与矩阵的每一行配对,每一行产生一个输出,最后组成新的输出向量。
读图顺序
一个样本的多个特征先按顺序排成输入向量。
矩阵每一行都与同一个输入向量完成一次内积。
神经网络因此能把很多神经元的计算写成一次矩阵运算。