美文网首页
反向传播算法

反向传播算法

作者: 若_6dcd | 来源:发表于2018-12-25 19:45 被阅读0次

    吴恩达神经网络课程里,反向传播算法最难理解的是反向传播阶段怎样调整各层次的权值,费用函数的双层求和符号令人无限头大,于是费用函数的偏导数就更难证明。而课程此处略去一万字,最开始自己被\delta 搅得一头雾水,不明白为什么每一层的误差是这个值。直到读了反向传播推导超简版一文才豁然开朗。

    这里写下自己理解的思路:

    1. 如何调整最后一层参数?

    既然是反向传播,说明对于参数的调整是从最后一层开始的,根据梯度下降算法:

    \theta =\theta+\alpha\cdot \frac{dJ}{d\theta}

    问题在于如何计算\frac{dJ}{d\theta} 。对于最后一层的某一个假设来说,神经网络会变化为如下的形状:

    由于只有一个输出,最后一层神经网络退化为logistic模型,那么费用函数会退化为:

    J=-y\cdot log(h(x))-(1-y)\cdot log(1-h(x))

    即:

    J= -y\cdot log(a^L ) - (1-y)\cdot log(1-a^L )

    a^L = g(z^L ) = g(\theta^ {L-1}a^{L-1} )

    根据链式法则\frac{dJ}{d\theta^{L-1}} =\frac{dJ}{da^L} \times \frac{da^L}{d\theta^{L-1}}得到:

    \frac{dJ}{da^L} = \frac{d(-ylog(a^L)-(1-y)log(1-a^L))}{da^L}
=-\frac{y}{a^L} + \frac{1-y}{1-a^L} = \frac{a^L-y}{a^L(1-a^L)}

    \frac{da^L}{d\theta^{L-1}} = \frac{da^L}{dz^L}*\frac{dz^L}{d\theta^{L-1}}

    \frac{da^L}{dz^L} = a^L*(a^L-1)

    \frac{dz^L}{d\theta^{L-1}} = a^{L-1}

    由以上四式可得:

    \frac{dJ}{d\theta^{L-1}} = (a^L-y)a^{L-1}

    这里,课程中的\delta 被叫做偏差量,其实理解为为了求梯度下降的偏导数而引入的中间变量更为妥当。

    于是最后一层输出层的\delta 值被定义为a^L-y

    是因为每一层都可以推导类似的关系

    2. 反向传播的推导

    对于\frac{dJ}{d\theta^{n-1}} = \frac{dJ}{dz^n}\times \frac{dz^n}{d\theta^{n-1}} 中,\frac{dz^n}{d\theta^{n-1}}是系数矩阵,因此要求梯度,只需要求出\frac{dJ}{dz^n}即可。直接从费用函数求解太复杂,于是从z^{n}z^{n-1}的关系入手:

    \frac{dJ}{dz^{n-1}}=\frac{dJ}{dz^n} \times \frac {dz^n}{dz^{n-1}}

    z^n = \theta^{n-1} a^{n-1} = \theta^{n-1}g(z^{n-1})

    于是,\frac{dz^n}{dz^{n-1}} = \theta^{n-1} a^{n-1}(a^{n-1}-1)

    定义\delta ^n = \frac {dJ}{dz^n}可得:

    \delta^{n-1} = \delta^{n} \theta^{n-1}a^{n-1}(a^{n-1}-1)

    这样就可以依次求解梯度下降的梯度向量

    相关文章

      网友评论

          本文标题:反向传播算法

          本文链接:https://www.haomeiwen.com/subject/cqelkqtx.html