深度学习小白一枚(才起步),之前是做软件开发,读研转CV方向。帖子上的关于反向传播算法写的都很迷,自己想总结一下反向传播算法(back propagation)。
需要的数学知识有:1、线性代数(矩阵求导)
2、高等数学(链式求导法则)
反向传播算法,顾名思义,肯定有正向传播,forward propagation 算法。
forward propagation 就是在神经网络中上一层的输出作为输入乘上权重矩阵W加上偏置b(后面通过梯度下降bp算法要修改W、b)得到新的输出。
这里举逻辑回归的例子,z是隐藏层,加上激活函数后得到a,以及定义了损失函数loss function(极大似然法得到)。
下面是前向传播各层的值。
但是这些权重和偏置不是我们最终想要的,因此要优化损失函数,得到使损失函数最小的那组权重和偏置。因此需要对损失函数进行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最小的一组值。下图是恩达大哥的手写笔记 一个道理。