该系列是斯坦福CS224N的一系列学习笔记,“深入学习的自然语言处理”。可以在此处查看相应的课程视频。
ShowMeai是CS224N课程的所有课程。它已经进行了中文翻译和注释,并成为GIF运动!单击课程的注释和学习对11-NLP讲座的卷积神经网络的解释。有关更多信息获取方法,请参见文章的末尾。
CS224N是斯坦福大学顶级机构生产的深度学习和自然语言处理的专业课程。核心内容涵盖了RNN,LSTM,CNN,Transformer,Bert,Q&A,摘要,文本生成,语言模型,阅读理解的前沿。
本说明对应于斯坦福大学CS224N自然语言处理特殊课程的知识领域:NLP中的卷积神经网络。它主要解释了卷积神经网络的结构及其在NLP场景中的使用及其用法,一些模块和一些可调节结构。
卷积神经网络是神经网络的特殊结构,首先在计算机视野领域广泛使用,但它们在NLP Field.com上也具有显着的应用程序效果,并带有传统的神经网络,它引入了本地体验的概念Wild和多滤波器,可以在控制参数数时有效地处理输入数据。在NLP中特别具体,它接收向量矢量的序列,然后首先为所有sub -phrases创建一个嵌入,然后CNN基于卷积。核和线以完成数据处理计算。
(有关CNN的详细信息,您还可以参考Showmeai在深度学习教程中的吴恩达老师课程摘要|卷积神经网络的解释,内部图像的解释)
我们从一个维度开始。考虑两个维矢量$ f $和$ g $,其中$ f $是主要矢量,$ g $是过滤器。$ f $和$ g $之间的体积,值在$ n $ item是$(f ast g)[n] $,等于$ sum_ {m = -m}^{m} f [n -m] g [m] $。
对于两个维卷积,计算如下所示,$ 9 imes9 $的绿色矩阵表示主矩阵$ f $(在实际应用程序中是输入数据矩阵)。$ 3 imes3 $的红色矩阵代表过滤器$G $。当前计算的卷积位于起始位置。计算方法是重新连接滤波器和输入区域的元素乘法。计算结果为4。
使用ShowMeai深度学习教程|文章中动态计算过程的卷积神经网络解释:
考虑word vector $ x {i} in r^{k} $和$ n $单词的句子的句子向量,$ x {1:n} = x {1} oplus x {2} ldots oplus oplus x_{n} $。字数,考虑卷积过滤器$ w在r^{h k} $中,该$ w以$ h $单词的作用。$ k = 2,n = 5,h = 3 $,上图显示了NLP的单层卷积层。在此句子中,连续三个单词的每种可能组合都将获得一个值。
请注意,过滤器$ W $本身是向量。我们将拥有$ c {i} = fleft(w^} x {i | h-1}+b ight)$给出$ mathbf {c} = left [c {1},c {2} dots c_ {n-h+1} ight]在r^{n-h+1} $中。最后两个时间步骤,即从或开始,我们没有足够的单词来与过滤器相乘(因为$ h = 3 $)。如果我们需要为了用后两个词向量卷积,一种常见的技术是用$ h -1 $零向量填充句子的右侧,如上图所示。
假设我们不使用零补充剂,我们将获得最终的卷积输出,$ mathbf {c} $具有$ n-h+1 $ number。实际上,我们希望接收CNN的输出并将其用作更深层次的输入,例如反馈神经网络或RNN。但是,所有这些都需要固定的长度输入,而CNN输出的长度取决于句子的长度$ n $ ..一种智能的方法来解决此问题。cnn输出$ mathbf {c} in mathbb}^{n-h-1} $是max-pooling layer.max-pooling output layer $ hat $ hat {c} = max {mathbf {c}} $,所以$ hat{C}在Mathbb} $中。
我们还可以使用最小构造,因为我们通常使用relu作为非线性激活功能,而Relu的下边界为$ 0 $。因此,Relu可以涵盖最小池,因此我们始终使用最大池而不是最小值构造。
在上面的相关示例和图2中,我们有$ h = 2 $,这意味着我们仅使用特定的组合方法,即使过滤器用于查看bi-gram。我们可以使用多个BI-Grams滤波器过滤器将学会识别不同类型的BI-GRAGR。更重要的是,我们不仅限于使用BI-Grams,还可以使用Tri-gram,四元格甚至更长的过滤器。EAD过滤器具有最大的池层之一因此,CNN层的最终输出将是一个等于过滤器数量的向量。
如果我们允许梯度流入此处使用的单词向量,则该单词向量可能会随训练而发生重大变化。这是需要的,因为它使用vector来实现当前特定任务(远离手套初始化)。出现在测试集中而不是训练集中?尽管与训练集中中出现的其他语义相关的单词向量将从其起点大大移动,但这些单词仍将处于其初始点。神经网络将用于更新的输入。因此,我们在这些单词的句子中表现不佳。
一种方法是维护两组词向量,一组“静态”(静态”(无梯度流)和一组“动力学”(通过SGD进行了更新)。它们最初是相同的(手套或其他初始化)。这两组也被用作神经网络的输入。因此,初始化的单词向量始终在神经网络的训练中起着重要作用。测试中的无形词可以增加正确理解的可能性。
有几种处理这两个渠道的方法。最常见的是在CNN中使用之前的平均值。其他方法是将CNN滤波器的长度加倍。您还可以在卷积层之后获取特征图(例如,在下图中进行汇总操作合并)
请参阅上面的图片。提出这个问题的另一种方法是我们应该收缩或扩展吗?我们使用零垫吗?
如果我们使用狭窄的卷积,我们仅在仅在滤波器的所有组件中计算输入分量位置的卷积。这显然不是在输入的开始和结尾,如图4所示。
如果我们使用广泛的卷积,则具有与卷积过滤器的每个对齐相对应的输出组件。为此,我们必须在输入开始和结束时以$ h -1 $零填充。
在狭窄的卷积的情况下,输出长度为$ n -h+ 1 $,在宽卷积的情况下,输出长度为$ n+ h -1 $。
这是最大的合并层的摘要。k-max池层不仅从其输入中选择到最大值,而且是$ k $的最大值(并维护原始订单)。设置$ k = 1 $是我们之前看到的最大的合并层。
原始:https://juejin.cn/post/7097350781145186317