Backpropagation计算过程举例
初始权重(initialize weights)是随机产生的(如-1~1之间)
初始化可以选择均值为0,方差为1/n_in的正态分布,n_in为输入的实例个数,Python中可使用np.random.normal函数来初始化权重:
np.random.normal(0, 1/3, size=(2, 3))
初始化了均值为0,方差为1/3的2行3列矩阵,对应输入层3个结点、隐藏层2个结点的情况
正向计算结点值
X为实例向量,w为权重,θ为偏向(bias),对于input layer是没有偏向的,其他偏向θ值可以定在-0.5~0.5之间
如下图
由node4对应所有实例计算出的结果(0.332)即是node4对应的的值
最开始所有层w,b都会初始化一个值
以下[3,2,1]的神经元结构为例:input layer为所有x值,每一个结点代表一个x的值
如:node4 = x1 * w14 + x2 * w24 + x3 * w34 + θ4 =0.2+0+(-0.5)+(-0.4)=-0.7(相当于中间变量Z或activation a)
θ为偏向bias,算出来node4=-0.7也就是node4对于output的输入值
反向更新权重和偏向
利用公式计算每一个结点的error
输出层node6的error计算:
T表示实际值,O表示最终输出值,下标 j 表示结点的索引值
隐藏层的node4和node5的error计算:
j 表示当前层的某个结点,k表示与之连线的下一层的结点,因此对于node4,其Err_k即为node6的error值,w_ij为当前结点与下一结点的连接权重,node5同理
更新weight的公式:
其中l为学习率,其余的参数同上面error计算的参数一致
更新bias的公式: