我有一个序列标记的任务,我想建立一个CNN,它将输入固定数量的嵌入(字符或基于字),并通过卷积/池提取类似n-gram的特征
我以前没有使用卷积(文本或其他方式),所以我不确定在这种设置中哪种架构更有意义:
请你分享一下你的直觉吗?
答案 0 :(得分:0)
我只在RNN(回归神经网络)中进行了序列标记,在CNN中进行了图像分类,但我想我至少可以描述第一和第二种设置正在做什么:
Conv1D / MaxPool1D :卷积将采用嵌入并将它们围绕过滤器进行卷积,在这种情况下,过滤器是n X n X 1.然后将创建一个n / 2 X n / 2 X 1矩阵现在比输入更复杂。
让我来描述一下我的意思。如果你有一个6×6像素的灰度图像(灰度级只有1层,RGB将有3层),你用一个
[[1, 0, -1], [1, 0, -1], [1, 0, -1]]的滤镜(内核)进行卷积 然后输出将是3 X 3 X 1图像,并且像素现在不表示灰度值,而是它是否认为在该位置存在垂直线,因为0中间列和两侧1s。
然后Max Pool将拍摄3 X 3 X 1并拍摄一个f大小的正方形,然后沿着新的图像以s步幅发送该正方形。所以在这个例子中说f = 2和s = 2.然后我们在该图像上有一个2×2的正方形。结果将是2 X 2 X 1
[[max of upper left 2 squares, max of upper right square and 0], [max of lower left squares, max of lower right square and zero]]
这是一个2×2矩阵,其中单元格的值显示在原始图像中在这些位置具有垂直条的可能性很高或很低。
现在将它放入嵌入式序列中,这可能意味着如果你有一个n个单词,其值为m个变量,那么你将有一个n X m X 1矩阵。然后,您将使用f X f矩阵对其进行卷积,以创建更复杂的矩阵,然后使用f X f square(或窗口)和s的步长运行最大池序列。这可能是受某个变量影响最大的单词,具体取决于您设置过滤器的方式。
Conv2D / MaxPool2D :这与上面完全相同,但现在你有一个n X m X 2矩阵。除了现在你的滤波器将是一个f X f X 2矩阵,你的输出将是(如果我们继续我们的例子)一个2 X 2 X 2矩阵而不是2 X 2 X 1矩阵,则每隔一个步骤都是相同的。这可能会产生一些不同的影响。您可以复制n X m X 1矩阵并在第二维中复制它,然后使滤波器的2维度不同,从而通过显示不仅最大的变量,最终可以提供更实际的洞察力1个但有2个变量类别。
我希望这在某种程度上有所帮助。