梯度下降:
梯度=∇f(x,y)=∂x∂f⋅i+∂y∂f⋅j
df=∂x∂fdx+∂y∂fdy
z[l]=W[l]⋅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]⋅al−1+b[l]a[l]=σ(z[l])
反向传播
接下来我们以下面的例子来了解神经网络的反向传播,梯度下降
首先我们模型的输出层的损失函数计算主要依靠两个参数 J(y(i),a[l](i)) ,然后的话y(i) 是样本xi对应的一个label,这个是人工标注确定的值,所以损失函数主要靠第 l 层的 a[l](i) 来决定,我们对于参数的调优,要从输出层开始往前传播。
接下来我们考虑到损失函数的梯度
∇J(ai[l])=∂ai[l]∂J
我们使用 Ji[l+1] 表示输出层带给第 l 层第i个神经元的一个梯度分量。
Ji[l+1]=∂ai[l]∂J
然后我们知道 a=σ(z), z[l]=WT⋅a[l−1]+b , 所以接下来链式求导:
∇Ji[l+1]=(∂σ∂Ji[l+1]∂zi[l]∂σ∂Wi[l]∂zi[l],∂σ∂Ji[l+1]∂zi[l]∂σ∂ai[l−1]∂zi[l],∂σ∂Ji[l+1]∂zi[l]∂σ∂bi[l]∂zi[l])