卷积神经网络如何精确地使用卷积代替矩阵乘法?


13

我正在读Yoshua Bengio关于深度学习的书,它在第224页上说:

卷积网络只是简单的神经网络,它在其至少一层中使用卷积代替一般的矩阵乘法。

但是,我不是100%确定如何从数学上精确地“通过卷积替换矩阵乘法”。

我真正感兴趣的是为1D中的输入向量定义此值(例如),因此我将没有输入作为图像并尝试避免2D的卷积。xRd

因此,例如,在“正常”神经网络中,操作和馈送模式可以简洁地表达,如Andrew Ng的注释:

˚F Ž + 1 = 一个+ 1

W(l)a(l)=z(l+1)
f(z(l+1))=a(l+1)

其中是在使向量通过非线性之前计算的向量。非线性作用在向量并且是有关层的隐藏单元的输出/激活。 ˚F Ž 一个+ 1 z(l)fz(l)a(l+1)

对我来说,这种计算很清楚,因为矩阵乘法已为我明确定义,但是,用卷积代替矩阵乘法对我来说似乎并不明确。即

˚F Ž + 1 = 一个+ 1

W(l)a(l)=z(l+1)
f(z(l+1))=a(l+1)

我想确保我能精确地数学理解上述方程式。

我只用卷积代替矩阵乘法的第一个问题是,通常,用点积来标识一行。因此,人们清楚地知道整个与权重之间的关系,并映射到所指示的维向量。但是,当用卷积代替它时,对我来说不清楚哪一行或权重对应于哪些条目。我什至不清楚,实际上已经不再需要将权重表示为矩阵了(我将在后面提供一个示例来解释这一点) Ž + 1 w ^ W(l)a(l)z(l+1)W(l)a(l)

在输入和输出全部为一维的情况下,是否仅根据卷积的定义计算卷积,然后将其传递给奇异点?

例如,如果我们将以下向量作为输入:

x=[1,2,3,4]

并且我们具有以下权重(也许是通过反向传播学到的):

W=[5,6,7]

那么卷积是:

xW=[5,16,34,52,45,28]

仅通过非线性传递并将结果视为隐藏层/表示(假设暂时没有池化)是否正确?即如下:

f(xW)=f([5,16,34,52,45,28])=[f(5),f(16),f(34),f(52),f(45),f(28)])

斯坦福UDLF教程出于某种原因,我修剪了卷积与0卷积的边缘,我们是否需要修剪?)

这是应该如何工作的?至少对于一维输入向量?是不是矢量了吗?W

我什至画了一个神经网络,假设这看起来像我想的那样:

在此处输入图片说明

Answers:


3

在我看来,您的方向正确,但也许我可以帮助您澄清。

单输出

nwRn

xRnaRxwσ

a=σ(xw)

在此,的元素指定对的相应元素加权的权重,以计算输出单元的总体激活。您甚至可以将其视为“卷积”,其中输入信号()与滤波器()的长度相同。X X w ^wxxw

在卷积设置中,中的值大于值;现在假设我们的输入瓦特X [RxwxRmm>nwx

a1=σ(x1:nw)a2=σ(x2:n+1w)a3=σ(x3:n+2w)amn+1=σ(xmn+1:mw)

w

您已经基本上在您的问题中提出了这个问题,但是我试图通过点积来说明与香草神经网络层的联系。普通网络层的主要区别在于,如果输入向量长于权重向量,则卷积会将网络层的输出转换为向量-在卷积网络中,它就是所有向量!该输出矢量在此层中称为输出单元的“功能图”。

多路输出

nw1Rnw2Rn

W=[w1w2]

a1=σ(xw1)a2=σ(xw2)
a=[a1a2]=σ(xW)

w1w2a1=[a11a21amn+11]a2=[a12a22amn+12]A=[a1a2]

A=σ(XW)
XW

W

希望这会有所帮助!


1

卷积层是完全连接网络的严格子集,即矩阵乘法。实际上,前向遍历中的卷积层等效于矩阵乘法,其中:

  • 一些权重被捆绑/共享
  • 一些权重为零

在后向传递中,权重将根据在前向传递中贡献了多少权重进行更新。即,权重为零仍为零。跨多个输出绑定的权重将从所有这些输出接收梯度(将这些梯度求和,以生成该权重的最终梯度更新)。


0

不,那不是应该的方式。卷积运算始终使输入变小(对于尺寸大于1的滤波器),而不像您的示例中那样大。

15+26+37=38


N+n1Nn+1

该webapge中使用的卷积不是数学卷积的定义。
查理·帕克

2
nnn1

1
我知道,现在我抬起头来,这很有意义。但是,有一个小错误。输入并不总是使其变小,我知道现在甚至在CNN中卷积的类型都不同,根据Yoshua Bengio的书,iro.umontreal.ca /有3种卷积类型(完全,有效,相同)。 〜bengioy / dlbook。我没有详细了解它们,但至少我知道它们!感谢Felbo。视觉界不应该使用卷积一词,它令人困惑和恼火。还是谢谢你。
查理·帕克

2
@CharlieParker Matlab中的conv函数具有相同的3种“形状”(完全,有效,相同),Matlab仅默认为“完全”-请参阅mathworks.com/help/matlab/ref/conv.html上的文档。因此,卷积而不翻转内核是互相关的xcorr(x, y) = conv(x, fliplr(y))。NN社区实际上在进行互相关时往往会说卷积,但这非常相似。
lmjohns3,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.