🎨
Bible-DeepLearning
  • Introduction
  • 第6章 深度前馈网络
    • 6.1 例子:学习XOR
    • 6.2 基于梯度的学习
      • 6.2.1 代价函数
        • 6.2.1.1 使用最大似然学习条件分布
        • 6.2.1.2 学习条件统计量
      • 6.2.2 输出单元
        • 6.2.2.1 用于高斯输出分布的线性神单元
        • 6.2.2.2 用于Bernoulli输出分布的sigmoid单元
        • 6.2.2.3 用于Multinoulli输出分布的softmax单元
    • 6.3 隐藏单元
      • 6.3.1 ReLU及其扩展
      • 6.3.2 logistic sigmoid与双曲正切函数
      • 6.3.3 其他隐藏单元
      • 李宏毅补充 SELU
    • 6.4 架构设计
    • 6.5 反向传播和其他的微分算法
      • 6.5.1 计算图
      • 6.5.2 微积分中的链式法则
      • 6.5.3 递归地使用链式法则来实现反向传播
      • 6.5.4 全连接MLP中的反向传播计算
      • 6.5.5 符号到符号的导数
      • 6.5.6 一般化的反向传播
      • 6.5.7 实例:用于MLP 训练的反向传播
      • 6.5.8 复杂化
  • 第7章 深度学习中的正则化
    • 7.1 参数范数惩罚
      • 7.1.1 L2参数正则化
      • 7.1.2 L1参数正则化
    • 7.2 作为约束的范数惩罚
    • 7.3 正则化和欠约束问题
    • 7.4 数据集增强
    • 7.5 噪声鲁棒性
    • 7.6 半监督学习
    • 7.7 多任务学习
    • 7.8 提前终止
    • 7.9 参数绑定和参数共享
    • 7.10 稀疏表示
    • 7.11 Bagging 和其他集成方法
    • 7.12 Dropout
    • 7.13 对抗训练
    • 7.14 切面距离、正切传播和流形正切分类器
    • Ag补充 一些能用于提升比赛成绩的方法
  • 第8章 深度模型中的优化
    • 8.1 学习和纯优化有什么不同
      • 8.1.1 经验风险最小化
      • 8.1.2 代理损失函数和提前终止
      • 8.1.3 批量算法和小批量算法
    • 8.2 神经网络优化中的挑战
      • 8.2.1 病态
      • 8.2.2 局部极小值
      • 8.2.3 8.2.3 高原、鞍点和其他平坦区域
      • 8.2.4 悬崖和梯度爆炸
      • 8.2.5 长期依赖
      • 8.2.6 非精确梯度
    • 8.3 基本算法
      • 8.3.1 随机梯度下降
      • 8.3.2 动量
      • 8.3.3 Nesterov 动量
    • 8.4 参数初始化策略
    • 8.5 自适应学习率算法
      • 8.5.1 AdaGrad
      • 8.5.2 RMSProp
      • 8.5.3 Adam
      • 8.5.4 选择正确的优化算法
    • 8.6 二阶近似方法
      • 8.6.1 牛顿法
      • 8.6.2 共轭梯度
      • 8.6.3 BFGS
    • 8.7 优化策略和元算法
      • 8.7.1 批标准化
      • 8.7.2 坐标下降
      • 8.7.3 Polyak 平均
      • 8.7.4 监督预训练
      • 8.7.5 设计有助于优化的模型
  • 第9章 卷积网络
    • 9.1 卷积运算
    • 9.2 动机
    • 9.3 池化
    • 9.4 卷积与池化作为一种无限强的先验
    • 9.5 基本卷积函数的变体
    • 9.6 结构化输出
    • 9.7 数据类型
  • 第10章 序列建模:循环和递归网络
    • 10.1 展开计算图
    • 10.2 循环神经网络
      • 10.2.1 导师驱动过程和输出循环网络
      • 10.2.2 计算循环神经网络的梯度
      • 10.2.3 作为有向图模型的循环网络
      • 10.2.4 基于上下文的RNN序列建模
    • 10.3 双向RNN
    • 10.4 基于编码 - 解码的序列到序列架构
    • 10.5 深度循环网络
    • 10.6 递归神经网络
    • 10.7 长期依赖的挑战
    • 10.9 渗漏单元和其他多时间尺度的策略
    • 10.10 长短期记忆和其他门控RNN
      • 10.10.1 LSTM
      • 10.10.2 其他门控RNN
    • 10.11 优化长期依赖
      • 10.11.1 梯度截断
      • 10.11.2 引导信息流的正则化
    • 10.12 外显记忆
  • 第11章 实践方法论
    • 11.1 性能度量
    • 11.2 默认的基准模型
    • 11.3 决定是否收集更多数据
    • 11.4 选择超参数
      • 11.4.1 手动选择超参数
      • 11.4.3 网络搜索
      • 11.4.4 随机搜索
    • 11.5 调试策略
Powered by GitBook
On this page
  • 卷积运算
  • 离散形式的卷积
  • 高维的卷积
  • 核翻转与互相关卷积
  • 卷积运算的特点

Was this helpful?

  1. 第9章 卷积网络

9.1 卷积运算

在通常形式中,卷积是对两个实变函数的一种数学运算。

[success] 实变函数:以实数作为自变量的函数叫做实变函数。

卷积运算

为了给出卷积的定义,我们从两个可能会用到的函数的例子出发。

[success] 卷积运算: $s(t) = (x*w)(t) = \int x(a)w(t-a)da$ x是输入,w是核函数,s是特征映射

假设我们正在用激光传感器追踪一艘宇宙飞船的位置。 我们的激光传感器给出一个单独的输出$x(t)$,表示宇宙飞船在时刻$t$ 的位置。 $x$和$t$都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。

现在假设我们的传感器受到一定程度的噪声干扰。 为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。 显然,时间上越近的测量结果越相关,所以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权重。 我们可以采用一个加权函数$w(a)$ 来实现,其中$a$表示测量结果距当前时刻的时间间隔。 如果我们对任意时刻都采用这种加权平均的操作,就得到了一个新的对于飞船位置的平滑估计函数$s$:

s(t)=∫x(a)w(t−a)da\begin{aligned} s(t) = \int x(a)w(t-a)da \end{aligned}s(t)=∫x(a)w(t−a)da​

这种运算就叫做卷积(convolution)。 卷积运算通常用星号表示:

s(t)=(x∗w)(t)\begin{aligned} s(t) = (x*w)(t) \end{aligned}s(t)=(x∗w)(t)​

在我们的例子中,$w$必须是一个有效的概率密度函数,否则输出就不再是一个加权平均。 另外,在参数为负值时,$w$的取值必须为0,否则它会预测到未来,这不是我们能够推测得了的。 但这些限制仅仅是对我们这个例子来说。

[success] 仅仅是这个例子中要求w函数满足这些条件。真正的卷积运算没有这样的限制。

通常,卷积被定义在满足上述积分式的任意函数上,并且也可能被用于加权平均以外的目的。

在卷积网络的术语中,卷积的第一个参数(在这个例子中,函数$x$)通常叫做输入(input),第二个参数(函数$w$)叫做核函数(kernel function)。 输出有时被称作特征映射(feature map)。

离散形式的卷积

在本例中,激光传感器在每个瞬间反馈测量结果的想法是不切实际的。 一般地,当我们用计算机处理数据时,时间会被离散化,传感器会定期地反馈数据。 所以在我们的例子中,假设传感器每秒反馈一次测量结果是比较现实的。 这样,时刻$t$只能取整数值。 如果我们假设$x$和$w$都定义在整数时刻$t$上,就可以定义离散形式的卷积:

s(t)=(x∗w)(t)=∑a=−∞∞x(a)w(t−a)\begin{aligned} s(t) = (x*w)(t) = \sum_{a = -\infty}^{\infty} x(a)w(t-a) \end{aligned}s(t)=(x∗w)(t)=a=−∞∑∞​x(a)w(t−a)​

高维的卷积

在机器学习的应用中,输入通常是多维数组的数据,而核通常是由学习算法优化得到的多维数组的参数。 我们把这些多维数组叫做张量。 因为在输入与核中的每一个元素都必须明确地分开存储,我们通常假设在存储了数值的有限点集以外,这些函数的值都为零。 这意味着在实际操作中,我们可以通过对有限个数组元素的求和来实现无限求和。

最后,我们经常一次在多个维度上进行卷积运算。 例如,如果把一张二维的图像$I$作为输入,我们也许也想要使用一个二维的核$K$:

S(i,j)=(I∗K)(i,j)=∑m∑nI(m,n)K(i−m,j−n).\begin{aligned} S(i,j) = (I*K)(i,j) = \sum_m \sum_n I(m,n) K(i-m, j-n). \end{aligned}S(i,j)=(I∗K)(i,j)=m∑​n∑​I(m,n)K(i−m,j−n).​

核翻转与互相关卷积

[success] 数学上的卷积会有核翻转的动作。 而DL中所有的卷积在数学上称为“互相关cross-correction”。 即DL“卷积” = 数学“互相关” 数学“卷积” = DL“卷积” + 数学“翻转”。 数学上的翻转操作是为了实现某些数学性质。在DL中不需要这些性质。因此DL中的卷积不需要翻转这一步。 例如一个核为:

123456789\begin{aligned} 1 && 2 && 3 \\ 4 && 5 && 6 \\ 7 && 8 && 9 \end{aligned}147​​258​​369​

翻转之后是这样的:

963852741\begin{aligned} 9 && 6 && 3 \\ 8 && 5 && 2 \\ 7 && 4 && 1 \end{aligned}987​​654​​321​

卷积是可交换的(commutative),我们可以等价地写作:

S(i,j)=(K∗I)(i,j)=∑m∑nI(i−m,j−n)K(m,n).\begin{aligned} S(i, j) = (K*I)(i,j) = \sum_m \sum_n I(i-m, j-n) K(m, n). \end{aligned}S(i,j)=(K∗I)(i,j)=m∑​n∑​I(i−m,j−n)K(m,n).​

通常,下面的公式在机器学习库中实现更为简单,因为$m$和$n$的有效取值范围相对较小。

卷积运算可交换性的出现是因为我们将核相对输入进行了翻转(flip),从$m$增大的角度来看,输入的索引在增大,但是核的索引在减小。 我们将核翻转的唯一目的是实现可交换性。 尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。 与之不同的是,许多神经网络库会实现一个相关的函数,称为互相关函数(cross-correlation),和卷积运算几乎一样但是并没有对核进行翻转:

S(i,j)=(I∗K)(i,j)=∑m∑nI(i+m,j+n)K(m,n).\begin{aligned} S(i, j) = (I*K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n). \end{aligned}S(i,j)=(I∗K)(i,j)=m∑​n∑​I(i+m,j+n)K(m,n).​

许多机器学习的库实现的是互相关函数但是称之为卷积。 在这本书中我们遵循把两种运算都叫做卷积的这个传统,在与核翻转有关的上下文中,我们会特别指明是否对核进行了翻转。

[warning] 图9.1算是互相关卷积吗?核翻转卷积是怎样的?

在机器学习中,学习算法会在核合适的位置学得恰当的值, 所以一个基于核翻转的卷积运算的学习算法所学得的核,是对未进行翻转的算法学得的核的翻转。 单独使用卷积运算在机器学习中是很少见的,卷积经常与其他的函数一起使用,无论卷积运算是否对它的核进行了翻转,这些函数的组合通常是不可交换的。

[warning] 举个例子?

图9.1演示了一个在2维张量上的卷积运算(没有对核进行翻转)的例子。 我们限制只对核完全处在图像中的位置进行输出,在一些上下文中称为"有效"卷积。

[warning] 只对核完全处在图像中的位置进行输出?

卷积运算的特点

离散卷积可以看作矩阵的乘法,然而,这个矩阵的一些元素被限制为必须和另外一些元素相等。 例如对于单变量的离散卷积,矩阵每一行中的元素都与上一行对应位置平移一个单位的元素相同。 这种矩阵叫做Toeplitz矩阵。

对于二维情况,卷积对应着一个双重分块循环矩阵。

[warning] 这里不是很理解双重分块循环矩阵?

除了这些元素相等的限制以外,卷积通常对应着一个非常稀疏的矩阵(一个几乎所有元素都为零的矩阵)。

[warning] “非常稀疏的矩阵”在哪?

这是因为核的大小通常要远小于输入图像的大小。任何一个使用矩阵乘法但是并不依赖矩阵结构的特殊性质的神经网络算法,都适用于卷积运算,并且不需要对神经网络做出大的修改。

[warning] 不依赖矩阵结构的特殊性质的神经网络算法?

典型的卷积神经网络为了更有效地处理大规模输入,确实使用了一些专门化的技巧,但这些在理论分析方面并不是严格必要的。

[success] 单变量卷积 图像一块同样大小的区域与kernel的内积,得到一个数值。 全部数值组合到一起,是一个小一点的矩阵,称为feature map。 每个filter会得到一个feature map。 如果原始图像是彩色的,那么原始图像是3维的张图,kernel也是3维的张量。

卷积的实现: python: conv_forward tensorflow:tf.nn.conv2d keras:Conv2D

Previous第9章 卷积网络Next9.2 动机

Last updated 4 years ago

Was this helpful?

[success] 单变量卷积

CNN上的卷积计算: CNN中的kernal不是预先定义好的,而是自己计算出来的。

[success] 卷积网络层与全链接网络层的区别: (1)full connect -> 只连接部分input (2)每个连接使用不同参数 -> 参数共享 flatten: