先落结论
用 n[l] 表示第 l 层神经元的数量, w[l] 为第 l 层的权重, b[l] 为偏置
z[l] 表示未激活前的矩阵(也就是wx+b的结果), a[l] 表示激活 z[l] 后(第 l 层的输出)的矩阵
那么正确的神经网络各矩阵的维度应该为:
w[l]: (n[l], n[l - 1])
b[l]: (n[l], 1)
a[l], z[l]: (n[l], 1)
当输入多个训练集m, w[l] 维度不变(因为神经元数量 n[l] 和 n[l - 1] 没有改变), 而 z[l], a[l] 变为 (n[l], m).
推导过程
简单地说就是要满足矩阵乘法的正确性.
假设只有 1 个训练集, 我们知道第 l 层神经网络如下:
z[l] = w[l] a[l - 1] + b[l]
a[l] = gl
我们知道在第 l - 1 层有 n[l - 1] 个神经元, 那么上一层的输出 a[l - 1] 一定是 (n[l - 1], 1) 的, 假设 w[l] 有 k行j列, 那么:
(k, j) * (n[l - 1], 1) + (n[l], 1), 根据矩阵乘法我们显然可以知道 j 一定为 n[l - 1], 由于当前层有 n[l] 个神经元, 所以要分配一个 n[l] 行的矩阵给 w[l] (k = n[l]).
于是 w[l]: (n[l], n[l - 1])
激活函数是个向量化的函数, 显然可以得到 z[l] 和 a[l] 的维度是相等的.