深入学习纽约大学PyTorch课程笔记Week3&4
- Week 3
-
- 3.1 神经网络参数变换可视化及卷积的基本概念
-
- 3.1.1 可视化的神经网络
- 3.1.2 参数变换
-
- 一个简单的参数变换:权重共享
- 超网络
- 序列数据中的主题(motif)检测
- 图像中的图案检测
- 3.1.3 离散卷积
-
- 卷积
- 互相关(cross-correlation)
- 高维卷积
- 深度卷积神经网络(DCNN)中,卷积操作中可用的一般变化
- 3.1.4 神经网络深度卷积 (DCNNs)
- 3.1.5 灵感来自生物学
-
- Hubel 和Weisel的贡献 (1962)
- Fukushima的贡献(1982)
- 3.2 实现细节和优势构、细节和优势。
-
- 3.2.1 原始 CNN 和向现代 CNN 的演变
-
- 小数据集上的原始卷积神经网络
- 贝尔实验室:第一个真实卷积网络
- 有汇聚层的卷积网络架构
- 位移等变性
- 通用架构分解
- 3.2.2 LeNet5 和数字识别
-
- 在 PyTorch 中实现 LeNet5
- 3.2.3 CNN的优势
-
- 示例:MNIST
- 3.2.4 特征捆绑问题
-
- 特征捆绑问题是什么?
- 如何解决?
- 示例:动态输入长度
- 3.2.5 CNN 的优势
- 3.3 神经信号的性质
-
- 3.3.1 神经信号的性质
- 3.3.2 探索自然信号的特同变性,探索自然信号的特性
-
- 区域性 ? \Rightarrow ? 离散型
- 固定性 ? \Rightarrow ? 参数共享
- 填充
- 面向空间数据的标准CNN
- 汇聚
Week 3
3.1 神经网络参数变换可视化及卷积的基本概念
3.1.1 可视化的神经网络
本节将展示神经网络的可视化、线性变换和ReLU操作的效果
图1是神经网络的可视化表示。一般来说,神经网络的输入位于图的底部或左侧,而输出位于图的顶部或右侧。在图1中,粉红色的神经元是输入,蓝色的神经元是输出。在这个网络中,我们有四个隐藏层,这意味着整个网络有六个(四个隐藏层 1个输入层 一个输出层)。 2 × 2 2\times2 2×2作为权重矩阵的矩阵 W W W。这是因为我们希望将输入平面转换为另一个平面。线性变换包括切换、旋转、反射和缩放。
每层的变换类似于将我们的平面折叠到图2所示的一些特定区域。在实验中,我们发现,如果每个隐藏层只有两个神经元,优化过程就会变长;如果隐藏层中有更多的神经元,优化过程就会变得容易。所以问题是:为什么更少的神经元会使训练变得困难?我们将是可视化的 ReLU \texttt{ReLU} ReLU然后回答这个问题。
当我们将每个隐藏层分开时,我们会发现每个层都在线性转换中执行一些步骤,然后将负值转换为零ReLU操作。在图3(a)(b)我们可以观察到ReLU操作的可视化效果。ReLU操作为我们执行了非线性变换。经过一些变换之后,我们最终将得到如图4所示的线性可分的数据。
所以现在我们终于知道了两个神经元隐藏层难以训练的原因。。所以如果其中一个bias将数据点移出右上象限,然后ReLU操作将这些点变为零。之后,无论后续层如何变换,值都会保持零。为了使神经网络更容易训练,我们可以添加更多的神经元来扩大网络,或者添加更多的隐藏层,或者使用两种方法的组合。在剩下的学期里,我们将深入探索网络的最佳结构是什么,请注意。
一般的参数变换意味着我们的参数向量 w w w是一个函数的输出。通过这个变换,我们可以将原始参数空间映射到另一个空间。在图5中, w w w是含参数 u u u的 H H H的输出。 G ( x , w ) G(x,w) G(x,w)是一个网络,而 C ( y , y ˉ ) C(y,\bar y) C(y,yˉ)则是代价函数。反向传播公式也做了如下改变:
u ← u − η ∂ H ∂ u ⊤ ∂ C ∂ w ⊤ u \leftarrow u - \eta\frac{\partial H}{\partial u}^\top\frac{\partial C}{\partial w}^\top u←u−η∂u∂H⊤∂w∂C⊤
[ N u × 1 ] = [ N u × 1 ] − η [ N u × N w ] × [ N w × 1 ] , [N_u \times 1] = [N_u \times 1]-\eta[N_u \times N_w]\times[N_w \times 1], [Nu×1]=[Nu×1]−η[Nu×Nw]×[Nw×1],
w ← w − η ∂ H ∂ u ∂ H ∂ u ⊤ ∂ C ∂ w ⊤ w \leftarrow w - \eta\frac{\partial H}{\partial u}\frac{\partial H}{\partial u}^\top\frac{\partial C}{\partial w}^\top w←w−η∂u∂H∂u∂H⊤∂w∂C⊤ 这些公式以矩阵形式应用。注意,右边的项的维度需要保持协调。 u , w , ∂ H ∂ u ⊤ u,w,\frac{\partial H}{\partial u}^\top u,w,∂u∂H⊤, ∂ C ∂ w ⊤ \frac{\partial C}{\partial w}^\top ∂w∂C⊤ 的维度分别是 [ N u × 1 ] , [ N w × 1 ] , [ N u × N w ] , [ N w × 1 ] [N_u \times 1],[N_w \times 1],[N_u \times N_w],[N_w \times 1] [Nu×1],[Nw×1],[Nu×Nw],[Nw×1]。原本 ∂ H ∂ u \frac{\partial H}{\partial u} ∂u∂H的维度应该是 [ N w × N u ] ( 即 ∂ w ∂ u ) [N_w \times N_u](即\frac{\partial w}{\partial u}) [Nw×Nu](即∂u∂w),转置后变成 [ N u × N w ] [N_u \times N_w] [Nu×Nw]; ∂ C ∂ w \frac{\partial C}{\partial w} ∂w∂C也同理。因此反向传播公式的维度是协调一致的。
一个简单的参数变换:权重共享
权重共享变换意味着 H ( u ) H(u) H(u)只是将 u u u的一个分量复制为 w w w中的多个分量。 H ( u ) H(u) H(u)就像一个Y形分支,将 u 1 u_1 u1 复制到 w 1 , w 2 w_1 , w_2 w1,w2 。我们可以将其表达为,
w 1 = w 2 = u 1 , w 3 = w 4 = u 2 w_1 = w_2 = u_1, w_3 = w_4 = u_2 w1=w2=u1,w3=w4=u2
我们强制共享参数保持相等,因此关于共享参数的梯度将在反向传播中被求和。举个例子,代价函数 C ( y , y ˉ ) C(y, \bar y) C(y,yˉ)关于 u 1 u_1 u1的梯度是代价函数 C ( y , y ˉ ) C(y, \bar y) C(y,yˉ))关于 w 1 w_1 w1 的梯度和代价函数 C ( y , y ˉ ) C(y, \bar y) C(y,yˉ)关于 w 2 w_2 w2的梯度之和。
超网络
超网络是指网络的其中一个网络权重是另一个网络的输出。图6显示了一个“超网络”的框架。其中,函数 H H H作为一个网络具有参数向量 u u u和输入 x x x。因此 G ( x , w ) G(x,w) G(x,w)的权重是通过网络 H ( x , u ) H(x,u) H(x,u)动态配置的。这个想法虽然古老,但即使在现在也非常有效。
序列数据中的主题(motif)检测
权重共享变换可被用于主题检测。主题检测表示在序列数据中找出某些主题,比如在语音或者文本数据中找出关键词。如图7所示,一种解决方案是在数据上使用滑动窗口,即通过移动权重共享函数来检测特定的主题(即语言信号中的一组特定声音),然后将输出(即评分)传给最大值函数。
在这个例子中,我们有5个这样的函数。这个方案的结果就是,我们对5个梯度求和并进行反向传播计算。我们不想要这些梯度隐式累加,因此我们需要使用。
图像中的图案检测
另一个有用的场景是图像中的图案检测。我们经常通过在图片上刷动我们的“检测模板”进行形状检测,而。一个简单的例子如图8所示,即对字母”C”和”D”进行区分。”C”与”D”的区别在于”C”拥有两个端点,而”D”则有两个拐角。因此我们可以基于此设计“端点模板”和“拐角模板”。如果形状与模板相似,则会有阈值输出。然后我们可以通过对这些输出求和以区分字母。在图8中,该网络检测到两个端点和0个拐角,因此答案“C”被激活。
这里同样重要的是,我们的**“模板匹配”应该是平移不变的 - 即当我们对输入进行移位,输出或者说被检测到的字母不应该改变**。这在权重共享变换中被完美解决。如图9所示,当我们改变“D”的位置,我们依然可以检测到拐角图案,即使它们已经被移位。当我们对检出的图案进行求和,“D”的检测将被激活。
使用局域检测器,然后对所有检测进行求和来检测图像中的字母,这是一种我们已经使用了多年的手工规则方法。而这就带来一个问题:我们如何能够自动设计这些“检测模板”呢?我们能够使用神经网络来学习这些“检测模板”吗?接下来我们将会介绍卷积,即我们用“检测模板”来匹配图片的操作。
3.1.3 离散卷积
卷积
1维情况下,输入 x x x和 w w w之间卷积的精确数学定义是:
y i = ∑ j w j x i − j y_i = \sum_j w_j x_{i-j} yi=j∑wj