举例:假设一个有两个隐藏层,每个隐藏层有一个神经元且接着一个sigmoid激活函数的神经网络例子,输入为x0,输出为pre,真实值为rel,经过第一个线性层为x11,第一个激活函数为x12;第二个线性层为x21,第二个激活函数为x22
一、
1.
首先需要知道输出:pre = sig(w2*sig(w1*x0+b1)+b2) = sig(w2*x12+b2) , x12 = sig(w1*x0+b1)
权重更新公式:w-a*df/dw (a为梯度的学习率) ,激活函数sig(x)=1/(1+exp(-x))对x求导为 sig(x)*(1-sig(x))
损失值为L2:loss = (pre-rel)**2
2.
1.计算w2权重更新变化值:df/dw2 = (dloss/dpre) * (dpre/dw2) = 2*(pre-rel) * sig(w2*x12+b2) * (1-sig(w2*x12+b2)) * x12
2.计算w1权重更新变化值:df/dw1 = (dloss/dpre) * (dpre/dx12) * (dx12/dw1) = (dpre/dx12) * sig(w1*x0+b1) * (1-sig(w1*x0+b1)) * x0 = 2*(pre-rel) * [ sig(w2*x12+b2) * (1-sig(w2*x12+b2)) ] * w2 * [sig(w1*x0+b1) * (1-sig(w1*x0+b1)) ] * x0
为简化方程 : df/dw1 = (pre-rel) * A * w2 * B *x0 , df/dw1 = (pre-rel) * A * x12
其中 A,B 为sigmoid激活函数的偏导,恒大于 0 且 小于0.25
二、结合图形描述:
三、多样本、多输入情况
假设将多个样本同时输入,即设样本数为m;且一次有多个输入值,即特征数为n。神经网络有2个隐藏层,第一层m1个神经元,第二层m2个神经元。
前向传播:
1.输入矩阵为 X 大小为(输入特征数,输入样本数)即(n , m)
2.W1T(T为转置)大小 为 (当前层神经元数,当前层输入特征数) 即 (m1,n)b1 (当前神经元数,样本数) 即 (m1,m)
3.W2T(T为转置)大小为 (当前层神经元数,上一层神经元数) 即 (m2,m1)b1 (当前神经元数,样本数) 即 (m2,m)
后向传播:
dw1 和 dw2 分别与 w1,w2 有相同的形状大小,且dw1,与dw2都是由m个样本的变化值平均而来即(1/m)