李宏毅

Gradient Descent

参数的更新

但是有上百万的参数,高效的计算 - backpropagation

所以backpropagation就是梯度下降

数学基础

Chain Rule 微分链式法则

Backpropagation

Lost function

  • 是对每一笔x(数据)定义的cost function,加和作为当前输出和目标的距离

求梯度

以线性神经元为例
对于单独一个线性神经元 有

z作为输入,传给激活函数

经过多层后输出,与 计算距离

  • 称为 forward pass
  • 称为 backward pass
Forward pass

结果就是各权重对应的输入
该权重的偏微分数值就是前一个神经元的输入

Backward pass

计算

z算完出来
过激活函数

如果是sigmoid

一层一层加
再加一层

这个时候,C看成是 的某种加和 (chain rule)

这里只考虑了两个神经元,如果是多个就是多个链式相加 而且到这里都是在计算第一层权重系数中的某一个权重的梯度

到这里

假设后面两个偏导已经算出来了
此时可以有另外的角度看待这个式子
看成是输入 ,经过加和后乘上激活函数 得到输出就是
以微分的方式逆过来看

  • 但是 已经在前面forward pass 决定了,所以现在是一个常数
    然后

所以也是一个逆向的神经元输出,通过下一层的输入z的偏微分可以求出前一层的偏微分,最终给出权重的偏微分(compute recursively)
一直到输出层(output layer)

是激活函数输出,所以 就是激活函数的导在 上的取值
看损失函数怎么定义,直接对y求偏导就可以得到
所以秒算(李宏毅)
所以从最后一层开始往前算,一直到第一层就能得到梯度
所以此时变成

计算前一层的偏微分,就是后一层加权和,然后通过激活函数的导进行放大

  • 输入是前向的
  • 是个常数
总结

backpropagation 是梯度下降的算法,通过两个部分结合,逆向的计算梯度
backpropagation ()分为两个部分
一个是forward pass,一个是backward pass

  • forward pass () 就是指前一个激活函数输出到下一个激活函数输入的过程,也就是z,如何对参数求导的问题
    • 结论是 每一层输入对参数的导都是前一层的输出
  • backward pass () 是计算损失对输入的导的过程,将计算过程逆过来考虑,通过最后一层反向计算总体的损失对参数的导
    • 这样的计算产生了激活函数导数的相乘(vanishing gradient problem)
    • 反向和正向是等效的,只是这样比较有效且不复杂
  • 两部分合起来构成了反向传播(相乘)

自己的补充

  • 待补

reference