BP推导

首先进行网络变量和参数的定义,规定J是损失函数,每层的激活值使用a表示,g是激活函数,al=g(zl)zl=Wlal1+bl ,其中l表示层索引,aili表示层内的神经元索引,l表示第l层的神经元数目。推导的目标是求得
WlJ

1.向量化形式

这里我们统一使用分子范式,在具体的权值更新中再相应的作转置。分几步进行:

  1. 定义误差变量δ,这里向量化之后
    δil=zilJδl=zlJ

  2. 假定最后一层的误差变量δL已求出,现在求δl+1δl之间的关系
    zl+1=Wl+1g(zl)+bl+1

    δl=zlJ=zl+1Jzlzl+1=δl+1zlzl+1

    下面求
    zlzl+1=g(zl)zl+1zlg(zl)=Wl+1diag(g(z1l),g(z2l),,g(zll))
    合并可得
    δl=δl+1Wl+1diag(g(z1),g(z2),,g(zl))

验证:采用的是分子范式,因而δl+1:1×l+1,权值Wl:l+1×l,那么δl:1×l,简洁明了

  1. 利用每层的误差变量来求对权值的偏导
    WlJ=zlJWlzl=δl???
    显然上式中的Wlzl问题属于vector-by-matrix的微分问题,超出知识范围,我们利用下节中的第一部分的结论,使用归纳法
    WijlJ=zilJWijlzil=δilajl1分子范式:l1×lWlJ=((δl)T(al1)T)T=al1δl
    再具体的向量更新中,如下
    Wl(t+1)=Wl(t)+η(al1δl)T

2.非向量化形式

  1. 定义误差变量,这里zil=j=1l1Wijlajl1+bil,向量化形式为zl=Wlal1+bl
    WijlJ=zilJWijlzil=δilajl1

  2. 求层间误差变量的关系
    δil=zilJ=j=1l+1δjl+1zilzjl+1=j=1l+1δjl+1Wjil+1g(zil)
    如何将上面的结果向量化,可以看出g(zil)中的索引为i与求和的索引无关,因此,我们将其分离出来,先把求和部分向量化。向量化最重要的是维度正确,可以在纸上画出它们相乘的部分。注意这里的δl我们设为列向量,而不是上节中的横向量。
    j=1l+1δjl+1Wjl+1=(Wl+1)Tδl+1
    上面说了,可以看出g(zil)中的索引为i与求和的索引无关,只与最终的δil中的i相关,那么直接将这一项化为逐元素相乘形式,
    δl=(Wl+1)Tδl+1g(zl)
    写成对角阵的形式
    δl=diag(g(z1),g(z2),,g(zl)(Wl+1)Tδl+1
    结果为
    WlJ=δl(al1)T

02-23 08:05