第9章: RNN 与 CNN

80. 将单词转换为数字IDPermalink

考虑第51问中所创建的数据,试将其中的单词按如下规则转化为ID:

  • 按在数据集中的词频对这些单词降序排序,ID与词频的排名相对应(词频最高的单词ID为1,词频第二高的单词ID为2,以此类推);
  • 对于所有词频为1的单词,令它们的ID为0

实现一个函数以满足上述要求,接收单词的序列作为输入,返回其对应ID的序列作为输出。

81. 使用RNN进行预测Permalink

现有一个ID的序列x=(x1,x2,,xT),与某个单词的序列相对应。 其中,T表示该序列中单词的总数,xtRV表示第t个单词所对应的ID的one-hot编码向量(V表示词表中单词的总数)。 使用循环神经网络(RNN, Recurrent Neural Network)构建一个模型,按下式通过ID的序列x预测其所属的类别y

h0=0,ht=RNN(emb(xt),ht1),y=softmax(W(yh)hT+b(y)),

其中,emb(x)Rdw表示词嵌入,是一个将one-hot编码向量(稀疏,高维)映射到词向量(密集,低维)的函数。htRdh表示时序上t时刻的隐状态(hidden state)。RNN(x,h)表示一个RNN单元,利用当前时刻t的输入x与前一时刻的隐状态h计算下一个时刻的隐状态。 W(yh)RL×dh 是一个线性映射矩阵,从隐状态的空间映射到用于预测类别的空间,b(y)RL是偏置项(dw, dhL分别表示词向量的维度,隐状态的维度与类别数量)。RNN单元RNN(x,h)可以有各种不同的构成,如:

RNN(x,h)=g(W(hx)x+W(hh)h+b(h)),

其中,W(hx)Rdh×dwW(hh)Rdh×dh,b(h)Rdh是RNN单元的参数,g表示激活函数(如tanh,ReLU等)。

这里暂不需要训练模型,只需随机初始化模型参数并计算分类y即可。合理设置参数的维度,如dw=300,dh=50。后续问题将沿用本问的设定。

82. 使用随机梯度下降法进行训练Permalink

使用随机梯度下降法(SGD,Stochastic Gradient Descent)训练第81问中的模型,训练过程中,打印出模型在训练集与验证集上的损失与正确率。选用适当的基准终止训练(如“10个Epochs后停止”)。

83. Mini-batch, GPU训练Permalink

修改第82问中的代码,使其以每B个实例为单位计算损失与梯度,并在GPU上进行训练(适当选择B的值)。

84. 使用预训练词向量Permalink

使用预训练词向量(如Google News embeddings,在约1,000亿单词上训练所得)初始化词嵌入emb(x),并训练模型。

85. 双向RNN与多层RNNPermalink

使用前向和反向RNN对输入文本进行编码,并训练模型。

hT+1=0,ht=RNN(emb(xt),ht+1),y=softmax(W(yh)[hT;h1]+b(y))

其中,htRdh,htRdh分别代表时刻t时,在前向和反向RNN上求得的隐状态向量。 RNN(x,h)使用当前时刻的输入x与下一时刻的隐状态h计算前一时刻的隐状态,W(yh)RL×2dh是一个线性映射矩阵,从隐状态的空间映射到用于预测类别的空间,b(y)RL是偏置项。 [a;b]表示两个向量ab的拼接(concatenation)。

在此基础上,增加双向RNN的层数,并重复此实验。

86. 卷积神经网络 (CNN)Permalink

现有一个ID的序列x=(x1,x2,,xT),与某个单词的序列相对应。 其中,T表示该序列中单词的总数,xtRV表示第t个单词所对应的ID的one-hot编码向量(V表示词表中单词的总数)。使用卷积神经网络(CNN, Convolutional Neural Network)构建一个模型,通过ID的序列x预测其所属的类别y

CNN的设定如下:

  • 词嵌入向量的维度: dw
  • 卷积核(Filter):3个词
  • 卷积步长(Stride):1个词
  • 卷积填充(Padding):启用
  • 每次卷积操作后产生的向量维度:dh
  • 每次卷积操作后,使用最大池化(max-pooling)将输入句子表示为dh维的向量

即,t时刻的特征向量ptRdh以下述公式计算:

pt=g(W(px)[emb(xt1);emb(xt);emb(xt+1)]+b(p))

其中, W(px)Rdh×3dw, b(p)Rdh代表CNN的参数, g是激活函数(如tanh,ReLU等),[a;b;c]表示向量a,b,c的拼接。矩阵W(px)的列数为3dw,因为需要对3个拼接后的词向量进行线性映射。

最大池化操作中,取所有时刻的特征向量在各个维度上的最大值,获得输入文章的特征向量cRdh。假设c[i]代表向量c的第i个维度,最大池化以下述公式计算:

c[i]=max

最后,使用矩阵W^{(yc)} \in \mathbb{R}^{L \times d_h}及偏置b^{(y)} \in \mathbb{R}^{L}对输入文章的特征向量进行线性映射,然后使用softmax函数预测其所属类别y

y = {\rm softmax}(W^{(yc)} c + b^{(y)})

这里暂不需要训练模型,只需随即初始化模型参数并计算y即可。

87. 使用随机梯度下降法进行CNN训练Permalink

使用随机梯度下降法(SGD)训练第86问中的模型,训练过程中,打印出模型在训练集与验证集上的损失与正确率。选用适当的基准终止训练(如“10个Epochs后停止”)。

88. 超参数调节Permalink

修改第85问或第87问中的代码,改变神经网络的架构或调节超参数,以构建一个高性能的分类器。

89. 基于预训练语言模型的迁移学习Permalink

从预训练的语言模型(如BERT等)出发,构建一个能对新闻标题进行分类的模型。