纽约大学深度学习PyTorch课程笔记(自用)Week4

Week4

4.1 线性代数与卷积


线性代数回顾

这部分将在神经网络的背景下对基础线性代数进行一个简单回顾。我们首先介绍一个简单的隐藏层 h : h = f ( z ) \boldsymbol{h}: \boldsymbol{h} = f(\boldsymbol{z}) hh=f(z)

其输出为一个非线性函数 f f f作用到一个向量 z z z上。这里 z z z是一个仿射变换 A ∈ R m × n \boldsymbol{A} \in\mathbb{R^{m\times n}} ARm×n作用到输入向量 x ∈ R n \boldsymbol{x} \in\mathbb{R^n} xRn上的输出:

z = A x \boldsymbol{z} = \boldsymbol{A} \boldsymbol{x} z=Ax

考虑到简洁性,bias在这里被忽略。线性方程可扩展为:

A x = ( a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ) ( x 1 ⋮ x n ) = ( —    a ( 1 )    — —    a ( 2 )    — ⋮ —    a ( m )    — ) ∣ x ∣ = ( a ( 1 ) x a ( 2 ) x ⋮ a ( m ) x ) m × 1 \boldsymbol{A}\boldsymbol{x} = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n}\\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix} \begin{pmatrix} x_1 \\ \vdots \\x_n \end{pmatrix} = \begin{pmatrix} \text{---} \; \boldsymbol{a}^{(1)} \; \text{---} \\ \text{---} \; \boldsymbol{a}^{(2)} \; \text{---} \\ \vdots \\ \text{---} \; \boldsymbol{a}^{(m)} \; \text{---} \\ \end{pmatrix} \begin{matrix} \rvert \\ \boldsymbol{x} \\ \rvert \end{matrix} = \begin{pmatrix} {\boldsymbol{a}}^{(1)} \boldsymbol{x} \\ {\boldsymbol{a}}^{(2)} \boldsymbol{x} \\ \vdots \\ {\boldsymbol{a}}^{(m)} \boldsymbol{x} \end{pmatrix}_{m \times 1} Ax= a11a21am1a12a22am2a1na2namn x1xn = a(1)a(2)a(m) x= a(1)xa(2)xa(m)x m×1

其中 a ( i ) \boldsymbol{a}^{(i)} a(i)是矩阵 A \boldsymbol{A} A的第 i i i行。

为了理解这个变换的含义,让我们分析一下 z \boldsymbol{z} z的一个分量,比如 a ( 1 ) x a^{(1)}\boldsymbol{x} a(1)x。假设 n = 2 n=2 n=2,那么 a = ( a 1 , a 2 ) \boldsymbol{a} = (a_1,a_2) a=(a1,a2)并且 x = ( x 1 , x 2 ) \boldsymbol{x} = (x_1,x_2) x=(x1,x2)

a \boldsymbol{a} a x \boldsymbol{x} x在二维坐标轴上可以被画成向量。现在,如果 a \boldsymbol{a} a ı ^ \hat{\boldsymbol{\imath}} ^之间的角度是 α \alpha α x \boldsymbol{x} x ı ^ \hat{\boldsymbol{\imath}} ^之间的角度是 ξ \xi ξ,那么利用三角公式, a ⊤ x a^\top\boldsymbol{x} ax(在这里 a ⊤ a^\top a被假设成是一个行向量)可以被展开为:

a ⊤ x = a 1 x 1 + a 2 x 2 = ∥ a ∥ cos ⁡ ( α ) ∥ x ∥ cos ⁡ ( ξ ) + ∥ a ∥ sin ⁡ ( α ) ∥ x ∥ sin ⁡ ( ξ ) = ∥ a ∥ ∥ x ∥ ( cos ⁡ ( α ) cos ⁡ ( ξ ) + sin ⁡ ( α ) sin ⁡ ( ξ ) ) = ∥ a ∥ ∥ x ∥ cos ⁡ ( ξ − α ) \begin {aligned} \boldsymbol{a}^\top\boldsymbol{x} &= a_1x_1+a_2x_2\\ &=\lVert \boldsymbol{a} \rVert \cos(\alpha)\lVert \boldsymbol{x} \rVert \cos(\xi) + \lVert \boldsymbol{a} \rVert \sin(\alpha)\lVert \boldsymbol{x} \rVert \sin(\xi)\\ &=\lVert \boldsymbol{a} \rVert \lVert \boldsymbol{x} \rVert \big(\cos(\alpha)\cos(\xi)+\sin(\alpha)\sin(\xi)\big)\\ &=\lVert \boldsymbol{a} \rVert \lVert \boldsymbol{x} \rVert \cos(\xi-\alpha) \end {aligned} ax=a1x1+a2x2=acos(α)xcos(ξ)+asin(α)xsin(ξ)=ax(cos(α)cos(ξ)+sin(α)sin(ξ))=axcos(ξα)

这个输出度量了输入对矩阵 A \boldsymbol{A} A的特定行的对齐情况。这可以通过观察两个向量 ξ − α \xi-\alpha ξα之间的角度来理解。当 ξ = α \xi = \alpha ξ=α时,这两个向量完美对齐,输出达到最大。如果 ξ − α = π \xi - \alpha = \pi ξα=π,那么 a ⊤ x \boldsymbol{a}^\top\boldsymbol{x} ax达到最小并且两个向量指向相反方向。本质上来看,线性变换允许我们将一个输入对于各个方向的投影看作定义的 A A A。这个直觉的想法同样可以扩展到高维情况。

另一个理解线性变换的方式是理解到 z \boldsymbol{z} z也可以被扩展为:

A x = ( ∣ ∣ ∣ a 1 a 2 ⋯ a n ∣ ∣ ∣ ) ∣ x ∣ = x 1 ∣ a 1 ∣ + x 2 ∣ a 2 ∣ + ⋯ + x n ∣ a n ∣ + \boldsymbol{A}\boldsymbol{x} = \begin{pmatrix} \vert & \vert & & \vert \\ \boldsymbol{a}_1 & \boldsymbol{a}_2 & \cdots & \boldsymbol{a}_n \\ \vert & \vert & & \vert \\ \end{pmatrix} \begin{matrix} \rvert \\ \boldsymbol{x} \\ \rvert \end{matrix} = x_1 \begin{matrix} \rvert \\ \boldsymbol{a}_1 \\ \rvert \end{matrix} + x_2 \begin{matrix} \rvert \\ \boldsymbol{a}_2 \\ \rvert \end{matrix} + \cdots + x_n \begin{matrix} \rvert \\ \boldsymbol{a}_n \\ \rvert \end{matrix} + Ax= a1a2an x=x1a1+x2a2++xnan+

而输出则是矩阵 A \boldsymbol{A} A的列的权重和。因此,信号就只是输入的组合而已。


扩展线性代数至卷积

现在,我们通过音频数据分析的例子,将线性代数扩展至卷积。首先,我们将一个全连接层表达为矩阵乘法的形式:

[ w 11 w 12 w 13 w 21 w 22 w 23 w 31 w 32 w 33 w 41 w 42 w 43 ] [ x 1 x 2 x 3 ] = [ y 1 y 2 y 3 y 4 ] \begin{bmatrix} w_{11} & w_{12} & w_{13}\\ w_{21} & w_{22} & w_{23}\\ w_{31} & w_{32} & w_{33}\\ w_{41} & w_{42} & w_{43} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix} y_1\\ y_2\\ y_3\\ y_4 \end{bmatrix} w11w21w31w41w12w22w32w42w13w23w33w43 x1x2x3 = y1y2y3y4

在这里例子中,权重矩阵的大小是 4 × 3 4 \times 3 4×3,输入向量的大小是 3 × 1 3×1 3×1,输出向量的大小是 4 × 1 4 \times 1 4×1

但是对于音频数据,数据会变得更长(不再是3个样本的长度)。音频数据中的样本数量等于音频持续长度(比如3秒钟)乘以采样率(比如22.05 kHz)。如下所示,输入向量 x \boldsymbol{x} x将会非常长。相应的,权重矩阵将变得很“宽”。

[ w 11 w 12 w 13 w 14 ⋯ w 1 k ⋯ w 1 n w 21 w 22 w 23 w 24 ⋯ w 2 k ⋯ w 2 n w 31 w 32 w 33 w 34 ⋯ w 3 k ⋯ w 3 n w 41 w 42 w 43 w 44 ⋯ w 4 k ⋯ w 4 n ] [ x 1 x 2 x 3 x 4 ⋮ x k ⋮ x n ] = [ y 1 y 2 y 3 y 4 ] \begin{bmatrix} w_{11} & w_{12} & w_{13} & w_{14} & \cdots &w_{1k}& \cdots &w_{1n}\\ w_{21} & w_{22} & w_{23}& w_{24} & \cdots & w_{2k}&\cdots &w_{2n}\\ w_{31} & w_{32} & w_{33}& w_{34} & \cdots & w_{3k}&\cdots &w_{3n}\\ w_{41} & w_{42} & w_{43}& w_{44} & \cdots & w_{4k}&\cdots &w_{4n} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ x_3\\ x_4\\ \vdots\\ x_k\\ \vdots\\ x_n \end{bmatrix} = \begin{bmatrix} y_1\\ y_2\\ y_3\\ y_4 \end{bmatrix} w11w21w31w41w12w22w32w42w13w23w33w43w14w24w34w44w1kw2kw3kw4kw1nw2nw3nw4n x1x2x3x4xkxn = y1y2y3y4
上面的式子将会非常难以训练。幸运的是,有很多方法可以进行简化。


性质:局部性

根据数据的局部性(即:我们不考虑较远的数据点),当 k k k相对较大的时候,来自权重矩阵的 w 1 k w_{1k} w1k 可以被填充为0。因此,矩阵的第一行就成为了一个大小为3的卷积核。让我们将这个大小为3的卷积核表示为 a ( 1 ) = [ a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) ] \boldsymbol{a}^{(1)} = \begin{bmatrix} a_1^{(1)} & a_2^{(1)} & a_3^{(1)} \end{bmatrix} a(1)=[a1(1)a2(1)a3(1)]

[ a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) 0 ⋯ 0 ⋯ 0 w 21 w 22 w 23 w 24 ⋯ w 2 k ⋯ w 2 n w 31 w 32 w 33 w 34 ⋯ w 3 k ⋯ w 3 n w 41 w 42 w 43 w 44 ⋯ w 4 k ⋯ w 4 n ] [ x 1 x 2 x 3 x 4 ⋮ x k ⋮ x n ] = [ y 1 y 2 y 3 y 4 ] \begin{bmatrix} a_1^{(1)} & a_2^{(1)} & a_3^{(1)} & 0 & \cdots &0& \cdots &0\\ w_{21} & w_{22} & w_{23}& w_{24} & \cdots & w_{2k}&\cdots &w_{2n}\\ w_{31} & w_{32} & w_{33}& w_{34} & \cdots & w_{3k}&\cdots &w_{3n}\\ w_{41} & w_{42} & w_{43}& w_{44} & \cdots & w_{4k}&\cdots &w_{4n} \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ x_3\\ x_4\\ \vdots\\ x_k\\ \vdots\\ x_n \end{bmatrix} = \begin{bmatrix} y_1\\ y_2\\ y_3\\ y_4 \end{bmatrix} a1(1)w21w31w41a2(1)w22w32w42a3(1)w23w33w430w24w34w440w2kw3kw4k0w2nw3nw4n x1x2x3x4xkxn = y1y2y3y4


性质:平稳性

自然数据信号具有平稳性(即:某些模式会不停重复)的性质。这可以帮助我们复用之前定义的卷积核 a ( 1 ) \mathbf{a}^{(1)} a(1) 。我们在使用这个卷积核的时候,每次移动一步(即步长为1),结果如下:

[ a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) 0 0 0 0 ⋯ 0 0 a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) 0 0 0 ⋯ 0 0 0 a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) 0 0 ⋯ 0 0 0 0 a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) 0 ⋯ 0 0 0 0 0 a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) ⋯ 0 ⋮ ⋮ ⋮ ⋮ ⋮ ] [ x 1 x 2 x 3 x 4 ⋮ x k ⋮ x n ] \begin{bmatrix} a_1^{(1)} & a_2^{(1)} & a_3^{(1)} & 0 & 0 & 0 & 0&\cdots &0\\ 0 & a_1^{(1)} & a_2^{(1)} & a_3^{(1)} & 0&0&0&\cdots &0\\ 0 & 0 & a_1^{(1)} & a_2^{(1)} & a_3^{(1)} & 0&0&\cdots &0\\ 0 & 0 & 0& a_1^{(1)} & a_2^{(1)} &a_3^{(1)} &0&\cdots &0\\ 0 & 0 & 0& 0 & a_1^{(1)} &a_2^{(1)} &a_3^{(1)} &\cdots &0\\ \vdots&&\vdots&&\vdots&&\vdots&&\vdots \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ x_3\\ x_4\\ \vdots\\ x_k\\ \vdots\\ x_n \end{bmatrix} a1(1)0000a2(1)a1(1)000a3(1)a2(1)a1(1)000a3(1)a2(1)a1(1)000a3(1)a2(1)a1(1)000a3(1)a2(1)0000a3(1)00000 x1x2x3x4xkxn

由于局部性,矩阵的右上角和左下角均被置0,这就导致了稀疏性。不断复用某个卷积核,就称作权重共享。


Toeplitz matrix的多层结构

经过这些改变,剩下的参数数量为3(即: a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3)。与之前有着12个参数(即: w 11 , w 12 , ⋯   , w 43 w_{11},w_{12},\cdots,w_{43} w11,w12,,w43 )的权重矩阵进行比较,现在的参数数量过于受限,我们希望进行扩展。

前面的矩阵可以被认为是带着卷积核 a ( 1 ) \boldsymbol{a}^{(1)} a(1) 的一层(即一个卷积层)。那么我们可以使用不同的卷积核 a ( 2 ) \boldsymbol{a}^{(2)} a(2) , a ( 3 ) \boldsymbol{a}^{(3)} a(3) , 等进行多层构建,从而增加参数数量。

每层都有一个包含着一个多次重复的卷积核的矩阵。这类矩阵被称之为Toeplitz矩阵。在每一个Toeplitz矩阵中,每个从左至右的降对角线是常数。而且这里使用的Toeplitz矩阵也是稀疏矩阵。

在这里插入图片描述

给定第一个卷积核 a ( 1 ) \boldsymbol{a}^{(1)} a(1) 和输入向量 x \boldsymbol{x} x,该层给出的输出的第一项是: a 1 ( 1 ) x 1 + a 2 ( 1 ) x 2 + a 3 ( 1 ) x 3 a_1^{(1)} x_1 + a_2^{(1)} x_2 + a_3^{(1)}x_3 a1(1)x1+a2(1)x2+a3(1)x3 。因此整个输出向量如下:

[ a ( 1 ) x [ 1 : 3 ] a ( 1 ) x [ 2 : 4 ] a ( 1 ) x [ 3 : 5 ] ⋮ ] \begin{bmatrix} \mathbf{a}^{(1)}x[1:3]\\ \mathbf{a}^{(1)}x[2:4]\\ \mathbf{a}^{(1)}x[3:5]\\ \vdots \end{bmatrix} a(1)x[1:3]a(1)x[2:4]a(1)x[3:5]

同样的矩阵相乘方法可以被用于后续带有其它卷积核(比如 a ( 2 ) \boldsymbol{a}^{(2)} a(2) a ( 3 ) \boldsymbol{a}^{(3)} a(3))的卷积层并得到类似的结果。

在这里插入图片描述

4.1.2 听见卷积 - Jupyter Notebook

对应的Jupyter Notebook可以在这里获得。

在这个notebook中,我们将卷积看做“运行的标量积”的形式对它进行探索。

librosa库让我们能够加载音频片段\boldsymbol{x}x及它的采样率。在这个例子中,我们有70641个样本,采样率为22.05kHz,片段总长度为3.2秒。导入的音频信号是波动的(见图1),并且我们能够通过yy轴的振幅猜测它大概是听上去是怎么样的。这个音频信号x(t)x(t)其实就是Windows系统的关机音(见图2)。
在这里插入图片描述
我们需要从波形分离出音符。为了实现这件事情,如果我们使用傅里叶变换,所有的音符会一起出现,那么找出每个音高的精确时间和位置就变得非常困难。因此,我们需要使用局部傅里叶变换(也被称作声谱图)。正如在声谱图(图三)中观察到的那样,不同的音高在不同频率下的达到峰值(比如第一音高的峰值是1600)。在各自的频率下连接四个音高,我们就获得了原信号的音高版本。
在这里插入图片描述
输入信号和所有音高(比如钢琴上的所有键)的卷积能够帮助提取输入片段中的所有音符(即:当音频匹配特定卷积核的时候的激发)。原信号的声谱图和连接的音高的信号如图4所示。原信号的频率和四个音高的图像如图5所示。输入信号(原信号)和四个卷积核的卷积如图6所示。图6中卷积的音频片段证明了卷积对于提取音符的有效性。

在这里插入图片描述

4.1.3 不同数据集的维度

最后一个部分,我们将额外讨论一下维度的不同表示以及这个问题的一些例子。我们假设输入集 X X X由定义域 Ω \Omega Ω映射到通道 c c c的函数组成。


举例
  • 音频数据:定义域是1维、时间索引的离散信号;通道数量 c c c可以是1 (单声道), 2 (立体声do), 5+1 (杜比 5.1), 等。
  • 图像数据:定义域是2维(像素)(下图中的 × \times ×表示的是笛卡尔积); c c c可以是1(灰度图片), 3(彩色图片), 20(高光谱), 等。
  • 狭义相对论:定义域是 R 4 × R 4 \mathbb{R^4} \times \mathbb{R^4} R4×R4(时空 × \times × 四维动量),当 c = 1 c = 1 c=1时,这就是哈密顿量。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值