反向传播算法(back propagation)

深度学习小白一枚(才起步),之前是做软件开发,读研转CV方向。帖子上的关于反向传播算法写的都很迷,自己想总结一下反向传播算法(back propagation)。

需要的数学知识有:1、线性代数(矩阵求导)

                                2、高等数学(链式求导法则)

反向传播算法,顾名思义,肯定有正向传播,forward propagation 算法。

forward propagation 就是在神经网络中上一层的输出作为输入乘上权重矩阵W加上偏置b(后面通过梯度下降bp算法要修改W、b)得到新的输出。

这里举逻辑回归的例子,z是隐藏层,加上**函数后得到a,以及定义了损失函数loss function(极大似然法得到)。

反向传播算法(back propagation)

下面是前向传播各层的值。

反向传播算法(back propagation)

但是这些权重和偏置不是我们最终想要的,因此要优化损失函数,得到使损失函数最小的那组权重和偏置。因此需要对损失函数进行back propagation。

(这里为了书写方便,将偏倒写成微分d的形式 意思目明白就行)

这里以单层传播为例,从最后一层计算dL/da,微积分知识得到:

dL/da = -y/a+(1-y)/(1-a) 

dL/dz = dL/da * da/dz = [-y/a+(1-y)/(1-a) ]*[a(1-a)]  =  a - y

dL/dw = dL/dz * dz*dw = a * dL/dz

dL/db = dL/dz * dz*db = dL/dz(后面的层以此类推)

然后再gradient descent:(lr表示学习率)

repeat:

w := w - lr*dL/dw

b := b - lr*dL/db

这样最后得到的w和b就是使loss function最小的一组值。下图是恩达大哥的手写笔记 一个道理。

反向传播算法(back propagation)

反向传播算法(back propagation)