非结构化数据的神经网络:自动微分、训练问题与解决方案
1. 自动微分与反向传播
自动微分是神经网络训练中的关键技术,它可以高效地计算梯度。在计算图中,我们可以通过反向拓扑顺序进行反向模式微分,也可以使用前向模式微分。
1.1 反向模式微分
在计算图中,我们从输出节点开始,先计算子节点的梯度,然后反向计算父节点的梯度。例如,对于节点 $j$,其梯度计算公式为:
[
\frac{\partial o}{\partial x_j} = \sum_{k \in children(j)} \frac{\partial o}{\partial x_k} \frac{\partial x_k}{\partial x_j}
]
其中,$\frac{\partial o}{\partial x_k}$ 是子节点 $k$ 的梯度,也称为伴随梯度,$\frac{\partial x_k}{\partial x_j}$ 是子节点 $k$ 相对于父节点 $j$ 的雅可比矩阵。
计算图可以提前使用 API 定义静态图(如 TensorFlow 1),也可以在运行时通过跟踪函数执行来动态计算(如 TensorFlow 动态图模式、JAX 和 PyTorch)。后者更适合处理动态图,其形状可以根据函数计算的值而变化。
1.2 前向与反向模式微分对比
考虑映射 $o = f(x)$,其中 $x \in \mathbb{R}^n$,$o \in \mathbb{R}^m$,且 $f$ 由多个函数复合而成:$f = f_4 \circ f_3 \circ f_2 \circ f_1$。我们可以使用链式法则计算雅
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



