梯度下降:

梯度=f(x,y)=fxi+fyj\text{梯度} = \nabla f(x,y)\\=\frac{\partial f}{\partial x}\cdot i+\frac{\partial f}{\partial y}\cdot j

df=fxdx+fydydf = \frac{\partial f}{\partial x}dx+\frac{\partial f}{\partial y}dy

z[l]=W[l]a[l1]+b[l]z^{[l]} = W^{[l]}\cdot a^{[l-1]}+b^{[l]}

正向传播

下面我们探讨一下这个公式(3)的正向计算过程:

我们探讨假如这是第一个隐藏层,处理的是输入的数据 X:

然后的话,我们的 X 假如是(m,n) 的矩阵,然后W是(k,m)的矩阵,b是(k,1)的矩阵

X = \left[ \matrix{ ... & ... & ...\\ x_1^{[l]}& x_2^{[l]} & x_3^{[l]}\\ ... & ... & ... } \right] .........x_i^{[l]}\text{表示第i个样本的第l维特征} \\\\ W^{T}=\left[ \matrix{ ... & w_1^{[j]} & ...\\ ...& w_2^{[j]} & ...\\ ... & w_3^{[j]} & ... } \right].........w_i^{[j]}\text{表示第i个神经元的第j维特征的权重}

我们假设 W^T 形状(3,2) ,X形状(2,2),b形状(3,1)来深究一下W、X 矩阵的运算:

Z = W^T \cdot X+b= \left[ \matrix{ w_1^{[1]} & w_1^{[2]}\\ w_2^{[1]} & w_2^{[2]} \\ w_3^{[1]} & w_3^{[2]} } \right] \cdot \left[ \matrix{ x_1^{[1]} & x_2^{[1]}\\ x_1^{[2]}& x_2^{[2]} } \right] +\left[ \matrix{ b_1\\ b_2\\ b_3 }\right] =\left[ \matrix{ w_1^{[1]}\cdot x_1^{[1]}+w_1^{[2]}\cdot x_1^{[2]}+b_1 & w_1^{[1]}\cdot x_2^{[1]}+w_1^{[2]}\cdot x_2^{[2]}+b_1\\ w_2^{[1]}\cdot x_1^{[1]}+w_2^{[2]}\cdot x_1^{[2]}+b_2 & w_2^{[1]}\cdot x_2^{[1]}+w_2^{[2]}\cdot x_2^{[2]}+b_2\\ w_3^{[1]}\cdot x_1^{[1]}+w_3^{[2]}\cdot x_1^{[2]}+b_3 & w_3^{[1]}\cdot x_2^{[1]}+w_3^{[2]}\cdot x_2^{[2]}+b_3 } \right]

如图:输入的有两个样本X,然后隐藏层有三个神经元,三个神经元分别对应三组参数(w,b)

所以我们可以得出隐藏层的这样的一个正向公式:

Z[l]=W[l]al1+b[l]a[l]=σ(z[l])Z^{[l]} = W^{[l]}\cdot a^{l-1}+b^{[l]}\\ a^{[l]} = \sigma(z^{[l]})

反向传播

接下来我们以下面的例子来了解神经网络的反向传播,梯度下降

首先我们模型的输出层的损失函数计算主要依靠两个参数 J(y(i),a[l](i))J(y^{(i)},a^{[l](i)}) ,然后的话y(i)y^{(i)} 是样本xix_i对应的一个label,这个是人工标注确定的值,所以损失函数主要靠第 l 层的 a[l](i)a^{[l](i)} 来决定,我们对于参数的调优,要从输出层开始往前传播。

接下来我们考虑到损失函数的梯度

J(ai[l])=Jai[l]\nabla J(a_i^{[l]}) = \frac{\partial J}{\partial a_i^{[l]}}

我们使用 Ji[l+1]J_i^{[l+1]} 表示输出层带给第 ll 层第ii个神经元的一个梯度分量。

Ji[l+1]=Jai[l]J_i^{[l+1]} = \frac{\partial J}{\partial a_i^{[l]}}

然后我们知道 a=σ(z), z[l]=WTa[l1]+ba = \sigma(z),\space z^{[l]}=W^T\cdot a^{[l-1]}+b , 所以接下来链式求导:

Ji[l+1]=(Ji[l+1]σσzi[l]zi[l]Wi[l],Ji[l+1]σσzi[l]zi[l]ai[l1],Ji[l+1]σσzi[l]zi[l]bi[l])\nabla J_i^{[l+1]} = (\frac {\partial J_i^{[l+1]}}{\partial \sigma}\frac {\partial \sigma}{\partial z_i^{[l]}}\frac {\partial z_i^{[l]}}{\partial W_i^{[l]}}, \frac {\partial J_i^{[l+1]}}{\partial \sigma}\frac {\partial \sigma}{\partial z_i^{[l]}}\frac {\partial z_i^{[l]}}{\partial a_i^{[l-1]}} , \frac {\partial J_i^{[l+1]}}{\partial \sigma}\frac {\partial \sigma}{\partial z_i^{[l]}}\frac {\partial z_i^{[l]}}{\partial b_i^{[l]}})