反向传播计算前级delta时,后级delta去掉常数偏置参数delta0的原因

学习吴恩达机器学习时,课程和练习题中讲过,计算时需要去掉\delta_{0}^{(2)}

 

代码中也做了类似处理:

 

    for t in range(m):
        a1t = a1[t,:]  # (1, 401)
        z2t = z2[t,:]  # (1, 25)
        a2t = a2[t,:]  # (1, 26)
        ht = h[t,:]  # (1, 10)
        yt = y[t,:]  # (1, 10)
        
        d3t = ht - yt  # (1, 10)
        
        z2t = np.insert(z2t, 0, values=np.ones(1))  # (1, 26)
        d2t = np.multiply((theta2.T * d3t.T).T, sigmoid_gradient(z2t))  # (1, 26)
        
        delta1 = delta1 + (d2t[:,1:]).T * a1t
        delta2 = delta2 + d3t.T * a2t

上述代码倒数第二行的d2t[:,1:]去掉\delta_{0}^{(2)}

这里会产生的疑惑是,去掉\delta_{0}^{(2)}是不是就不计算误差对每层的常数偏置的影响了。实际上不是这样的,每层的常数偏置都得系数都需要计算其偏导数,

比如我们在计算输入层的X_{0}的偏置时,X矩阵的(行,列)是(X样本数,输入项数+1),误差矩阵是下一级的\delta矩阵去掉\delta_{0}^{(2)},因为\delta_{0}^{(2)}关联的a^{(2)}_{0}是第二层的偏置,a^{(2)}_{0}与第一层的输入X之间没有连线,所以不参与输入层系数的误差(偏导数)的运算,在计算输入层系数偏导数theta1时不参与运算,但它是theta2的一部分,所以说它对theta2来说是有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值