Fenrier Lab

图解自动微分的正向模式和逆向模式

自动微分建立在复合函数求导的链式规则之上,考虑以下复合函数 \[f(x) = a(b(c(x)))\] 则 \(f\) 对 \(x\) 的导数为 \[\frac{\mathrm{d}f}{\mathrm{d}x} = \frac{\mathrm{d}f}{\mathrm{d}a} \frac{\mathrm{d}a}{\mathrm{d}b} \frac{\mathrm{d}b}{\mathrm{d}c} \frac{\mathrm{d}c}{\mathrm{d}x}\] 显然,上述公式存在两种计算顺序,第一种先对高阶函数求导,我们称之为逆向模式 \[\frac{\mathrm{d}f}{\mathrm{d}x} =\left( \left(\frac{\mathrm{d}f...
点我阅读更多...

如何自底向上地建立起对 Monad 的理解

原群 (Magma) 如果存在一个集合 \(M\) 以及建立在其元素间的二元运算 \(\star\),满足 \(\forall x, y \in M\),有 \(x \star y \in M\),则称这样的集合为原群,写作 \((M, \star)\)。 半群 (Semigroup) 如果一个原群 \(M\) 的二元运算满足结合律性质,即 \(\forall x, y, z \in M \), 都有 \(x \star y \star z = x \star (y \star z)\),则称这样的结构为半群。 幺半群 (Monoid) 在半群的基础上,如果其中的二元运算存在单位元,即,\(\exists e \in G\),\(\forall x \in G\)...
点我阅读更多...

卷积层的反向传播分析

卷积层是卷积神经网络最基本的结构,在以前的文章中,我们讨论了卷积层的前馈计算方法,而神经网络的学习过程包括前馈计算和梯度的反向传播两个部分,本文就准备对卷积层的梯度计算进行分析。为了简单起见,我们使用一个 3x3 的输入张量和 2x2 的卷积核来举例说明,并把结论推广的任意大小输入和卷积核情况。 \[\left[\begin{aligned} x_{11} \quad x_{12}\quad x_{13}\\ x_{21} \quad x_{22}\quad x_{23}\\ x_{31} \quad x_{32}\quad x_{33} \end{aligned} \right] \star \left[\begin{aligned} k_{11} \quad k_{12}\\ k...
点我阅读更多...

批量正则化的前馈计算与反向传播分析

Batch Normalization 想要解决什么问题? 很多时候,当我们训练好一个模型,拿到实际运行环境中会发现精度表现不如预期,其中有一个可能的原因是实际环境中的数据分布和我们训练集的分布不同,术语叫 Covariate Shift。这时我们可以采用一些办法把真实数据的分布变换成想要的形式,比如标准化,对数变换等等。在神经网络训练过程中,每一层的输入数据都经过了前面多层处理,并且每层的权重参数都在反向传播的过程中不断变化,因此,即便同样的初始数据在不同轮次的训练中都可能有不同的分布,这一现象也被称为 Internal Covariate Shift。既然数据分布都不一样了,那上一批次训练的参数可能就失效了,这就迫使每层的权重参数不断地修正自己来适应新的数据分布,而不是朝着减小损...
点我阅读更多...

全连接层的前馈计算与反向传播分析

全连接层差不多可以说是神经网络中最简单的结构,对它进行分析可以让我们比较容易地建立起对神经网络运作方式的理解基础。首先我们来看一下前馈计算过程,设置全连接层的输入维度为 \(n\),输出维度为 \(m\),并定义以下变量:输入向量 \(x \in R^m\),输出向量 \(y\in R^n\),权重向量 \(W \in R^{n\times m}\),偏置项 \(b \in R^n\),则前馈计算的公式表示如下 \[y = W x + b\qquad \qquad (1)\] 它的分量形式为 \[y_i = \sum_{j = 1}^m w_{ij}x_j + b_i \qquad \qquad (2)\] 前馈计算相当简单,接下来我们再考虑它的反向传播,也就是损失对参数 \(...
点我阅读更多...