前向传播
输入𝑎[𝑙−1],输出是𝑎[𝑙],缓存为𝑧 [𝑙];从实现的角度来说我们可以缓存下 𝑤[𝑙]和𝑏[𝑙],这样更容易在不同的环节中调用函数。
反向传播
输入为𝑑𝑎[𝑙],输出为𝑑𝑎[𝑙−1],𝑑𝑤[𝑙], 𝑑𝑏[𝑙],链式求导,多推算几次就理解和记住了。
向量化实现过程可以写成:
维度分析
具体标注在上图中,认真分析非常简单
𝑤 的维度是(下一层的维数,前一层的维数),即𝑤[𝑙]: (𝑛[𝑙],𝑛[𝑙−1]);
𝑏 的维度是(下一层的维数,1),即:𝑏[𝑙] :(𝑛 [𝑙],1);
𝑧[𝑙], 𝑎[𝑙] : (𝑛[𝑙] ,1);
𝑑𝑤[𝑙] 和𝑤[𝑙] 维度相同,𝑑𝑏[𝑙] 和𝑏[𝑙] 维度相同,且𝑤和𝑏向量化维度不变,但𝑧, 𝑎以及𝑥的维度向量化后发生变化。
𝑍[𝑙] :(𝑛[𝑙], 𝑚)
𝐴[𝑙] : (𝑛[𝑙], 𝑚),𝐴[0] =𝑋=(𝑛[𝑙] ,𝑚)
对于公式1 和6 的维度相乘,运算不会报错
>>> a=np.array([[1,2],[2,2],[3,2]])>>> aarray([[1, 2],[2, 2],[3, 2]])>>> a.shape(3, 2)>>> b=np.array([[3,0],[2,0],[20,20]])>>> barray([[ 3, 0],[ 2, 0],[20, 20]])>>> b.shape(3, 2)>>> c=a*barray([[ 3, 0],[ 4, 0],[60, 40]])>>> c.shape(3, 2)
