05.18 「震撼」可视化和直观理解:神经网络的反向传播「荐读」

1 BP 简介

BP 是一种通过递归应用l链式法则计算梯度的方法。 对这个过程的理解对于我们高效地开发,设计,调试神经网络是直观重要的。

BP 问题本质上是研究 f 在 x 处的偏导。我们之所以对这个问题感兴趣是因为某个对应于具体问题的神经网络,f 对应着 损失函数 L , 输入 x 包括训练数据和神经网络的权重参数。

例如,损失函数可能是 SVM 损失函数,输入的训练数据 (xi ,yi),i=1…N ,权重参数分别为 W,b. 记住,就像是在机器学习中,我们通常认为训练数据是给定且固定的,权重参数认为是我们可以改变被我们控制的。因此,尽管我们能容易地利用反向传播计算在每一个输入样本点 xi 的梯度,但是,实际上我们只计算在参数W,b 的梯度,进一步去更新参数W,b .

2 梯度简介

从简单谈起,考虑函数 f (x,y)=xy. 求各自的偏导过程如下:

「震撼」可视化和直观理解:神经网络的反向传播「荐读」

这个求偏导的过程告诉我们, 一个函数对于某个变量的变化率等于如下极限:

「震撼」可视化和直观理解:神经网络的反向传播「荐读」

如果 x=4, y=−3 则 f(x,y) = −12 ,因此,∂f / ∂x = −3. 这个式子告诉我们,假如我们增加 x 一点,那么整个表达式将会减少这个量的 3 倍。

值得一提的是, ∇f 这个标记的含义是偏微分的向量,因此,我们得到: ∇f=[∂f / ∂x,∂f / ∂y]=[ y,x ]. 尽管梯度从技术角度讲是一个向量,但是我们经常称为 对 x 的梯度,而不是更准确的术语:对 x 的偏微分。

3 链式法则

让我们考虑一个稍显复杂的表达式,f (x,y,z)=(x+y) z. 为了更直观地理解反向传播,我们将这个表达式拆成两部分,将 (x+y) 标记为 q , 因此 f=qz. 更多地,我们知道如何计算这两个表达式的偏导:

∂f / ∂q = z

∂f / ∂z = q

因为 q = (x+y) ,所以,

∂q / ∂x=1

∂q / ∂y=1

链式法则 ( chain rule ) 告诉我们正确的链接这些梯度表达式的方法是通过相乘来做,因此,

∂f/ ∂x=∂f /∂q*∂q /∂x

编码实现:

# set some inputs

x = -2;

y = 5;

z = -4

# perform the forward pass

q = x + y # q becomes 3

f = q * z # f becomes -12# perform the backward pass (backpropagation) in reverse order:# first backprop through f = q * z

dfdz = q # df/dz = q, so gradient on z becomes 3

dfdq = z # df/dq = z, so gradient on q becomes -4# now backprop through q = x + y

dfdx = 1.0 * dfdq # dq/dx = 1. And the multiplication here is the chain rule!

dfdy = 1.0 * dfdq # dq/dy = 1

将这个过程可视化的图形显示如下:

「震撼」可视化和直观理解:神经网络的反向传播「荐读」

前向传播 ( forward pass ) 计算开始于输入端,结束到输出端,图中绿色表示,输入分别为: x = -2, y = 5, z = -4 , 因此, q = 3, q 乘以 -4 后 f 得到 -12 .

反向传播( backward pass ) 却开始于输出端,然后递归地应用链式规则计算梯度,图中红颜色所示,f 增加 1,表现在 q 上就是使得 它变小 4, 使得 z 增加 3,q 节点还没有传播到输入端,所以 q 继续向后传播影响到 x, y, 根据 q 对 x 和 y 的梯度公式, 得到 x 变化 -4, y 也会变化 -4.

一个复杂点的例子:

「震撼」可视化和直观理解:神经网络的反向传播「荐读」

将上个式子链式分解为如下:

「震撼」可视化和直观理解:神经网络的反向传播「荐读」

可视化正向传播,反向传播,规则和上个例子一致,绿色代表输入值,红色代表改变量。大家不妨详细分析一下!

「震撼」可视化和直观理解:神经网络的反向传播「荐读」


分享到:


相關文章: