NVidia在2017年提出了《Training Deep AutoEncoders for Collaborative Filtering》:

1.介绍

Amazon, Netflix和Soptify均使用推荐系统给用户推荐items。推荐系统分为两类:基于上下文的推荐(context-based),基于个性化的推荐(personized)。

基于上下文的推荐可以解释上下文因子,比如:位置、日期、时间。基于个性化的推荐通常使用CF来推荐items给用户。在本方法中,用户兴趣会基于个人品味、其它用户在系统中行为的偏好、用户间的隐式相似度进行分析。底层假设是:两个具有相似品味的用户,比两个随机选择的用户,在对于某一个item具有相同的看法上,具有更高的似然。

在设计推荐系统中,目标是提取预测的accuracy。Netflix Prize比赛提供了最著名的示例:预测用户对于电影的评分。

这是个经典的CF问题:推断在 \(m \times n\)矩阵R中缺失条目,它的第(i,j)条目描述了由用户i给第j个item的评分。接着使用RMSE(Root Mean Squared Error)进行衡量。

1.1 相关工作

深度学习在图片识别、NLP、增强学习等领域取得了突破。自然的,这些成功也刺激了在推荐系统上使用deep learning。首先使用DL的推荐系统使用的是RBM(restricted Boltzman machines)[16]。一些最近方法使用autoencoders [17, 18],前馈神经网络[5]以及RNN [17]。许多流行的矩阵分解技术可以看成是降维。因此,对于推荐很自然地会采用deep autoencoders。I-AutoRec(item-based autoencoder)和U-AutoRec(user-based autoencoder)首先进行了成功尝试[17]。

还有许多非深度学习类型的CF方法[3,15]。矩阵分解技术,例如:ALS[8,12],概率矩阵分解[14]都很流行。最健壮的系统可以包含这些方法来赢取Netflix Prize竞赛[10]。

注意,Netflix Prize数据也包含了临时信号: 时间(time),即:何时做出的评分。这样,许多经典CF方法可以被扩展成插入时间信息,比如: TimeSVD++[11],最近的RNN-based技术[19]。

2.模型

我们的模型受U-AutoRec方法的启发,但有许多重要的区别。我们会训练更深的模型。为了确保没有预训练,我们会:

  • a) 使用SELU(scaled exponential linear units)
  • b) 使用较高的dropout
  • c) 在训练期间使用迭代型output re-feeding

一个autoencoder是这样的网络,它会实现两个转换:

  • encoder encode(x): \(R^n \rightarrow R^d\)
  • decoder(z): \(R^d \rightarrow R^n\)

autoencoder的目标是获取数据的d维数据,以确保在x和\(f(x)=decode(encode(x))\)间的error measure是最小化的。图1描述了典型的4-layer autoencoder网络。如果在encoding阶段将噪声添加到该数据中,该autoencoder会被称为de-noising。Autoencoder是一个很好的降唯工具,可以被认为是一种严格泛化的PCA。一个没有非线性激活函数、只有“code” layer的autoencoder,可以在encoder中学习PCA转换,以MSE loss进行最优化。

图1:

在我们的模型中,encoder和decoder部分的autoencoder包含了前馈神经网络,它具有经典的fully connected layers:\(l = f(W * x+b)\),其中f是一些非线性激活函数。如果activation的范围小于这些数据,decoder的最后的layer应是线性的。我们发现,对于在hidden layers中的激活函数f来说,包含非零负部分(non-zero negative part), 接着我们会在大多数我们的实验中使用SELU units。

如果ecoder与encoder是镜像结构,那么可以限制:decoder的权重\(W_d^l\)与从相应的layer l转换的encoder权重\(W_e^l\)相同。这样的autoencoder被称为受限的(constrained/tied),比不受限的参数数目要小一倍。

前向传播和推断(forward pass和inference):在forward pass(和inference)期间,模型会使用通过评分训练集\(x \in R^n\)的用户向量表示,其中n是items的数目。注意,x是非常稀疏的,而decoder的输出\(f(x) \in R^n\)是dense的,它包含了在语料中所有items的预测评分。

2.1 Loss function

由在用户表示向量x中预测零值是没有意义的,我们会根据[17]的方法,来最优化MMSE(Masked Mean Squared Error loss):

\[MMSE = \frac{m_i * (r_i - y_i)^2} {\sum_{i=0}^{i=n} m_i}\]

…(1)

其中\(r_i\)是实际评分,\(y_i\)是重构评分(或预测评分),其中\(m_i\)是一个mask函数:

  • 如果\(r \neq 0\)则\(m_i=1\)
  • 否则为\(m_i=0\)

注意,这里在RMSE得分和MMSE得分之间有一个简单的关系:\(RMSE = \sqrt{MMSE}\)

2.2 Dense re-feeding

在训练和inference期间,输入\(x \in R^n\)是非常稀疏的,由于很少用户会在现实中进行评分,所有items只有一少部分有评分。另一方面,autoencoder的输出\(f(x)\)是dense的。假设考虑这样的理想场景:有一个完美的f,使得:

\(f(x)_i = x_i, \forall i: x_i \neq 0\),

其中\(f(x)_i\)可以准确预测所有用户对于items: \(x_i = 0\)的将来评分(future ratings)。那么这意味着,如果用户对新的item k进行评分(创建一个新向量x’),那么\(f(x)_k = x_k',f(x)=f(x')\)。这样,在理想场景下,\(y=f(x)\)应是一个关于训练良好的antoencoder \(f(y)=y\)的确定点(fixed point)。

为了显式增强fi€xed-point constraint,以及能执行dense training updates,我们使用一个迭代式dense re-feeding steps(以下的3和4)来增大每个最优化迭代(optimization iteration)。

  • 1.给定稀疏x,使用等式(1)来计算dense f(x)和loss
  • 2.计算梯度、执行权重更新(backward pass)
  • 3.将f(x)看成是一个新的样本,计算f(f(x))。现在f(x)和f(f(x))是dense的,来自等式(1)的loss上所有m项都是非零的(第二个forward pass)
  • 4.计算梯度、执行weight更新(第二个backward pass)

第(3)和(4)对于每个迭代也可以执行多次。

3.实验和结果

3.1 实验设定

对于评分预测任务,最相关的是,给定过去的评分来预测将来的评分,而非随机预测缺失的评分。对于评估,我们将原始的Netflix Prize训练集基于时间分割成许多份训练集和测试集。训练间隔(training interval)比测试间隔(testing interval)要包含了更早的时间。测试间隔接着被随机划分成Test和Validation子集,以便来自测试间隔的每个评分具有50%的机会出现在其中的一个子集上。没有出现在训练集上的users和items,会从test和validation子集上移除,表一提供了详细的数据。

对于大多数实验,我们使用了一个batch size=128, 使用momentum=0.9的SGD,learning-rate=0.001.我们使用xavier initialization来初始化参数。注意,不同于[18],我们没有使用layer-wise pre-training。我们相信,选择合适的activation function,可以成功。

3.2 激活函数类型的影响

为了探索使用不同activation function的影响,我们在深度学习的一些流行选择上做了测试:sigmoid, RELU, max(relu(x),6). tanh,ELU, LRELU,SELU。在每个hidden layer上使用4层autoencoder。由于评分的范围是[1, 5],我们将decoder的最后一层保持为线性,以用于sigmoid和tanh的模型。在其它所有模型中,activation function会被应用到所有layers。

图2:

我们发现,在该任务上,ELU,SELU和LRELU的效果会比SIGMOID, RELU, RELU6和TANH要更好。图2做这部分做了展示。有两个属性,看起来分离的激活(separate activations)要比不分离的要更好:

  • a) non-zero negative part
  • b) unbounded positive part

这里,我们下结论,在该setting中,这些属性对于训练成功很重要。这样,我们使用SELU激活单元,并对基于SELU的网络进行模型效果调参。

图2

3.3 overfitting

我们训练所使用的最大数据是,表1的”Netflix Full”,包含了477K用户的98M条评分数据。在该数据集中的电影数(items)n=17768. 因而,encoder的第一层将具有\(d * n + d\)个权重,其中,d是在layer中的units数。

对于现代deep learning算法和硬件来说,这是相当小的任务。如果我们使用单层(single layer)的encoders和decoders,我们可能会对训练数据overfit,即使d小到512. 图3清晰地演示了这个。从不受限的autoencoder切换到受限autoencoder可以减少overfitting,但不会完整地解决该问题。

图3

3.4 层数更深

当让layers更宽时,可以帮助训练的loss下降,添加更多层通常有利用网络能力的泛化。我们为所有hidden layers选择足够小的维度(d=128),以便轻易避免overfitting,并开始添加更多的layers。表2展示了,这里存在着layers数与评估的accuracy间存在着一种正相关。

表2

在encoder和decoder的第一层到第三层,在RMSE上提供了很好的提升。(从1.146到0.8378). 之后,随机添加更多层会有用,然后,它会收益递减。注意,在encoder和decoder中中使用d=256,会有9115240个参数,它几科是这些深度模型的两倍还在多,它具有更差的评估RMSE(以上1.0)。

3.5 Dropout

第3.4节展示了,当我们添加更多小layers时,事实上会收益衰减。因而,我们会更宽范围地实验模型架构和超参数。我们的最有希望的模型具有以下架构:

n, 512, 512, 1024, 512, 512, n

这意味着encoder有3层(512, 512, 1024),coding layer为1024,decoder的size为(512, 512,n)。如果没有正则化,该模型会很快overfits。为了进行正则化,我们尝试了许多dropout值,非常高的dropout概率(比如:0.8)看起来是最好的。图4展示了评估的RMSE。我们只在encoder output上应用drouput,例如:f(x)=decode(dropout(encode(x)))。我们会尝试在模型的每一层应用dropout,但这扼杀了模型收敛,不会提升泛化。

图4

3.6 Dense re-feeding

迭代式dense re-feeding(见2.2节)在我们的6-layer模型: (n, 512, 512, 1024, dp(0.8), 512, 512, n)的accuracy评估中会提供给我们额外的提升。这里,每个参数表示了inputs、hidden units、outputs的数目,dp(0.8)表示一个dropout layer,它的drop概率为0.8. 只应用output re-feeding不会对模型效果有提升。然而,结合更高的learning rate,它可以极大提升模型的performance。注意,更高的learning rate(0.005),如果没有dense re-feeding,模型会开始偏离。详见图5.

图5

应用dense re-feeding和增加learning rate,允许我们更进一步提升RMSE的评估RMSE,从0.9167到0.9100.选择最好的evalutation RMSE的一个checkpoint,计算test RMSE给定0.9099,我们相信比其它方法有更好。

3.7 与其它方法的比较

我们使用我们最好的模型,与Recurrent recommender Network进行比较(它要好于PMF, T-SVD, I/U-AR)。注意,不同于T-SVD和RRN,我们的方法不会对评分的时序动态性(temporal dynamics of ratings.)做出显式解释。表3展示了,它对future rating预测任务上要比其它方法要好。我们使用训练集训练每个模型,在100 epochs计算evaluation RMSE。接着,最高的evaluation RMSE的checkpoint在测试集上进行测试。

“Netflix 3 months”的训练数据比”Netflix full”要小7倍,也就是说,在模型效果上差些并不吃惊(0.9373 vs. 0.09099)。事实上,在”Netflix full”上效果最好的模型会在该集合上over-fits,我们必须减小模型复杂度(见表4)

参考

https://arxiv.org/pdf/1708.01715.pdf

CRNN( Convolutional Recurrent Neural Network)由华科白翔等人提出。

介绍

crnn主要关注CV中的一个经典难题:基于图片的序列识别。现实世界中,一大群视频对象,比如场景文字(scene text)、手写、音阶符,以序列方式出现。不同于通用目标识别,识别这样的序列对象通常需要系统去预测一串对象labels,而非单个label。因而,识别这样的目标很自然地转化成一个序列识别问题。序列化目标的另一个独特属性是,它们的长度变化很大。例如,英文词汇可以包含2个字符“OK”,也可以包含15个符如“congratulations”。因而,大多数流行的deep模型(比如DCNN)不能直接应用于序列预测,因为DCNN模型经常在固定维度的inputs和outputs上操作,不能产生变长的label sequence

对于一个特定的序列对象(比如:场景文字),已经有一些方法来解决该问题。例如,在[35,8]中的算法首先对单个字符进行检测,接着对这些被检测的字符使用DCNN进行识别,可以使用带标注的字符图片进行训练。这样的方法通常需要训练一个很强的字符检测器,来从原始图片中精准地检测和裁减每个字符。一些其它方法[22]会将场景文字识别看成是一个分类问题,为每个英文词汇(总共90K words)分配一个class label。将它看成是一个带有大量分类的训练模型,它很难泛化到其它类型的目标上,比如:中文文字、音阶等,因为这种类型序列的基本组合远超100w。总之,当前基于DCNN的系统不能直接用于基于图片的序列识别。

RNN模型是Deep模型的另一分支,主要用于处理序列。RNN的一个好处是,它不需要知道在训练和测试时一个序列目标图片中每个元素的位置。然而,需要有一个预处理step来将一个输入目标图片转化成一个图片特征序列。例如,Graves et al.[16]从手写文本中抽取一个几何集合 或者 图片特征,而paper[33]将word images转化成顺序化的HOG特征。这些预处理step与pipeline中的子任何组件相互独立,因而,基于RNN的系统不能以一种end-to-end的方法地直接被训练和优化

一些传统的场景文字识别方法,它们不基于神经网络,也能在该领域带来重大启发和新颖的表示。paper[5]和paper[30]提出来将word images和text strings嵌入到一个公共的向量子空间中,将文字识别转换成一个检索问题(retrieval problem)。paper[36]和paper[14]使用中间级别的特征来进行场景文字识别。尽管在标准的benchmarks上取得了效果提升,这些方法总体上好于之前的神经网络方法,本文方法也能做到。

该paper的主要贡献是一个新的NN模型,它的网络架构是专门为识别图片中的序列化对象而设计的。提出的NN模型被命名为“CRNN ( Convolutional Recurrent Neural Network)”,因为它是一个DCNN和RNN的组合。对于序列化对象,比起CNN模型,CRNN具有着一些明显的优点:

  • 1) 它可以直接从sequence labels(例如:words)中学习,无需详细注解(例如:characters)
  • 2) 在从图片数据中直接学习有信息表示时,它具有DCNN的相同特性,即不用手工特征,也不用预处理steps(包括:二值化/分割,成分定位等)
  • 3) 它具有RNN的相同属性,可以产生一个labels序列
  • 4) 它不限制序列化对象的长度,在训练和测试阶段只需要高度归一化
  • 5) 它在场景文字识别上,比之前的方法要好
  • 6) 比起标准的DCNN,它包含了更少的参数,消耗更少的存储空间

2.网络结构

CRNN的网络结构如图1所示,自底向上,包含了三个组成部分:

  • 卷积层(conv layers)
  • 递归层(recurrent layers)
  • 一个合成层(transcription layer)

图1

在CRNN的底部,conv layers从每一张输入图片中自动抽取一个特征序列。在卷积网络的顶部,构建一个recurrent网络来对通过conv layers输出的每一帧的特征序列做预测。transcription layer将每一帧的预测翻译成一个label sequence。尽管CRNN由不同的网络结构组成,它可以使用一个loss function进行jointly training。

2.1 特征序列抽取

在CRNN模型中,conv layers的组件通过从一个标准的CNN模型所使用的conv layers和max-pooling layers进行构建(移除FC layers)。这样的组件被用于从一个输入图片中抽取一个序列化特征表示。在feed给网络之前,所有的图片需要被归一化成相同的高度。接着,一个特征向量的序列会从feature maps中被抽取出来。特别的,一个特征序列的每个feature vector通过在feature maps上按列从左到右来生成。这意味着,第i个feature vector是所有maps中的第i列的拼接(concatenation)。在我们的设置中,每一列的宽度寄存定为单个pixel。

由于有conv layers、max-pooling layers、以及element-wise激活函数在局部区域上操作。它们是平移不变的(translation invariant)。因而,feature maps的每列对应于原始图片的一个矩形区域(术语称为“receptive field”),这样的矩形区域与在feature maps中相应的从左到右的相对应的列具有相同的顺序。如图2所示,在特征序列中的每个vector与一个receptive field相关联,可以被看成是该区域的图片描述符

图2: receptive field. 在被抽取的特征序列中,每个向量都与输入图片上的一个receptive field相关,可以被认为是该区域的特征向量

对于不同类型的视觉识别任务,健壮的、丰富的、可训练的卷积特征被广泛使用。一些之前的方法采用CNN来学习一个关于序列目标(比如:场景文字)的健壮表示。然而,这些方法通常会通过CNN来抽取整个图片的全局表示,接着收集局部深度特征来识别该序列目标。由于CNN需要输入图片缩放到一个固定size,以满足固定的输入维度,不适合变长的序列化目标识别。在CRNN中,我们将deep features转成顺序表示,以便能表示不同长度的序列化目标。

2.2 Sequence Labeling

在conv layers之上,构建了一个deep bi-RNN网络。该recurrent layers可以为在特征序列\(x = x_1, ..., x_T\)中的每一帧\(x_t\)预测一个label分布\(y_t\)。该recurrent layer的优点有三个。

  • 首先,RNN具有很强的能力来捕获在序列中的上下文信息。对于基于图片的序列识别使用上下文信息,比将每个符号单独对待的方式更稳定更有用。将场景文本识别看成一个示例,宽字符可能需要许多个连续帧才能完整描述(如图2所示)。另外,当观察它们的上下文时,一些模糊的字符很容易区分;例如,很容易识别“il”,通过区别该字符高度而非单个字符单独识别。
  • 第二,RNN可以对error微分进行反向传播至它的输入(例如:conv layer),从而允许我们在同一网络中对recurrent layers和conv layers进行jointly training。
  • 第三,RNN能在特有长度的序列上操作,从头到尾进行遍历。

一个典型的RNN unit在它的input layers和output layers间具有自连接的hidden layer。每次它接受序列中的一帧\(x_t\)时,它会使用一个带有当前输入\(x_t\)和过去状态\(h_{t-1}\)作为输入的非线性函数(\(h_t = g(x_t, h_{t-1})\))来更新它的内部状态\(h_t\)。接着,基于\(h_t\)做出预测\(y_t\)。在这种方式下,过去的上下文 \(\{x_{t'} \}_{t'<t}\)可以被捕获并用来进行预测。然而,传统的RNN unit,存在着梯度消失问题,这限制了它可存储的上下文范围,增加了训练过程的负担。LSTM是一种特殊的RNN unit,可以用来解决该问题。一个LSTM(如图3所示)包含了一个memory cell和三个乘法门,称为:input gates, output gates和forget gates。概念上,memory cell会存储过去的上下文,input gates和output gates允许cell存储一段时间的上下文。同时,在cell中的memory可以被forget gate清除。LSTM的这种特殊设计允许它捕获长范围依赖,这通常发生在基于图片的序列上。

LSTM是有向的,它只使用过去的上下文。然而,在基于图片的序列中,两个方向的上下文都是有用的。因而,我们使用了两个LSTMs来组成双向LSTM:一个向前,一个向后。另外,多个bi-LSTMs可以进行stack,产生一个如图3.b所示的deep bi-LSTM。deep结构比shallow结构允许更高级的抽象,在语音识别上可以达到极大的效果提升[17]。

图3: LSTM. (a) 单个LSTM unit (b)paper中所使用的bi-LSTM结构。它会将一个forward LSTMs和一个backward LSTMs组合产生一个bi-LSTM。将多个bi-LSTM进行Stacking可以产生一个deep bi-LSTM。

在recurrent layers上,error微分(differentials)沿如图3.b所示的箭头反向传播,例如:Back-Propagation Through Time(BPTT)。在recurrent layers的底部,传播的微分序列被级联成maps,将feature maps转换成feature sequences的操作进行反向,fed back到conv layers。实际上,我们创建了一个定制的network layer,称为“Map-to-Sequence”,来作为在conv layers和recurrent layers间的桥梁

2.3.1 label序列的概率

我们采用了由Graves et al.[15]提出的Conectionist Temporal Classifcation(CTC) layer中所定义的条件概率。该概率被定义成,对于label sequence (l) ,在每帧预测\(y = y_1, ..., y_T\)上的条件概率,它会忽略在l中每个label所处的位置。因此,当我们使用该概率的负log-likelihood作为目标来训练该网络时,我们只需要图片和它们相应的label序列,从而避免为单独的字符标注位置。

条件概率的公式可以如下简短描述:

输入是一个序列\(y=y_1, ..., y_T\),其中T是序列长度。接着,每个\(y_t \in R^{\|L'\|}\)是一个在集合\(L'=L U\)上的概率分布。其中L包含了任务中的所有labels(例如:所有英文字符),以及空白(blank)label。一个seq-to-seq的映射函数B被定义在序列\(\pi \in L'^{T}\)上,其中T为长度。B将\(\pi\)映射到l上,通过首先移除重复的labels,接着移除空白。例如,B将“–hh-e-l-ll-oo–”(其中’-‘表示空白)映射到”hello”。接着,条件概率被定义成通过B将所有\(\pi\)映射到l上概率求和:

\(p(l|y) = \sum_{\pi : B(\pi) = 1} p(\pi | y)\) …(1)

其中\(\pi\)的概率被定义成\(p(\pi \| y) = \prod_{t=1}^{T} y_{\pi_t}^t\),其中\(y_{\pi_t}^t\)是在时间t时具有label \(\pi_t\)的概率。直接计算等式(1)在计算上是不可行的,因为求和项是指数级别的。然而,等式(1)可以通过paper[15]中提到forward-backward算法进行有效计算。

2.3.2 Lexicon-free transcription

在该模式下,序列 \(l^{*}\)表示等式(1)的最高概率。由于不存在可训练的算法来精准求解,我们使用paper[15]的策略进行。序列\(l^{*}\)可以通过\(I^{*} = B(arg max_{\pi} p(\pi \| y))\)进行近似。例如,在每一时刻t上采用最可能的label \(\pi_t\),将产生的序列映射到\(l^{*}\)上。

2.3.3 Lexicon-based transcription

在lexicon-based模式下,每个测试样本会与一个词典D相关系。通常,label序列通过选择在词典中具有等式(1)的最高条件概率的序列被识别。例如,\(l^{*} = arg max_{I \in D} p(l \|y)\)。然而,对于大词典,例如,50k-words的Hunspell spell-checking dictionary,在词典上执行搜索是一个非常耗时的开销。例如,为在词典中的所有的sequence计算等式(1)的概率,并选择最高的概率。为了解决该问题,我们观察到,label sequences通过lexicon-free transcription方式进行预测,通常会在编辑距离(edit distance metric)上更接近ground truth。这意味着,我们可以将我们的搜索限制在最近邻候选\(N_{\delta}(l')\)上,其中\(\delta\)是最大编辑距离,I’是在lexicon-free模式下从y转录得到的序列:

\(I^{*} = arg max_{I \in N_{\delta}(I')} p(l | y)\)…(2)

候选\(N_{\delta}(l')\)可以通过BK-tree结构有效发现,它是一种metric tree用来离散化metric空间。BK-tree的搜索时间复杂度为\(O(log \| D \|)\),其中\(\|D\|\)是lexicon size。因此,该scheme可以扩展到非常大的词典上。在我们的方法中,为一个词典离线构建了一个BK-tree。接着,我们使用该tree执行了最快的在线搜索,通过小于或等于到query sequence的\(\delta\)编辑距离来发现序列。

2.4 网络训练

训练数据集通过\(X = \{I_i, l_i \}_i\)的定义,其中\(I_i\)是训练图片,\(l_i\)是ground truth的label sequence。目标函数是最小化ground truth的条件概率的-log-likelihood:

\(O = - \sum_{I_i, l_i \in X} log p(l_i | y_i)\) …(3)

其中,\(y_i\)是由\(I_i\)经过recurrent layers和conv layers所产生的序列。该目标函数会从一张图片和它的ground truth的label序列间计算一个cost value。因此,该网络可以在(images, sequences) pairs上进行端到端训练,消除训练图片中由人工标注所有独立components的过程。

该网络使用SGD进行训练。Gradients的计算通过BP算法进行。特别的,在transcription layer,error微分通过back-propagated结合forward-backward算法计算。在recurrent layers,会使用Back-Propagation Through Time (BPTT) 来计算error微分。

对于optimization,我们使用AdaDelta来自动计算每个维度的learning rates。对比常用的momentum方法,AdaDelta无需人工设置一个learning rate。更重要的,我们发现,使用AdaDelta的optimization比momentum方法收敛更快。

3.试验

为了评估CRNN模型的有效性,我们在场景文识别和音阶识别的标准benchmarks上进行试验。

3.1 Datasets

对于场景文本识别的所有试验,我们使用Jaderberg【20】的synthetic dataset (Synth)作为试验。该dataset包含了800w的训练图片,以及相应的ground truth的words。这样的图片通过一个人造文本引擎(synthetic text engine)生成,高度与现实相近。我们的网络在synthetic data上训练一次,并在其实真实世界的测试数据集上进行测试,无需在其它训练数据上做任何的fine-tuning。即使用CRNN模型是纯粹使用synthetic text data训练的,它也能在标准的文本识别becnmarks上工作良好。

目前在效果评测方面,使用了4种流行的场景文本识别benchmarks:

  • ICDAR 2003(IC03):该测试数据集包含了带标注文本边框的251张场景图片。根据paper[34],我们忽略了那些包含非字母数字字符、以及那些小于三个字符的图片,获得的测试集包含了860个裁减过的文本图片。每张测试图片与一个50-words的词典相关联(由paper[34]定义)。一个完整的词典可以通过组合所有单张图片的词典来构成。另外,我们使用了一个50k个词的词典,它包含了在Hunspell spell-checking dictionary字典中的所有词。
  • ICDAR 2013 (IC13):测试数据集继承了IC03上的大多数数据,它包含了1015张ground truth的裁减word images。
  • IIIT 5k-word (IIIT5k):包含了3000张来自互联网上的word test images。每张图都与一个50词的词典和1k-words词典相关。
  • Street View Text (SVT):该测试数据集包含了来自Google Street View的249张街景门牌图片。从它们中裁减出647张word images。每张word images具有一个由paper[34]定义的50 words的词典。

3.2 实现细节

在我们的实验中,所使用的配置如表1所示:

表1:

conv layers基于一个VGG-VeryDeep架构(paper[32])。为了让它更适合识别英文字符,会做一定调整。在第3和第4个max-pooling layers中,我们采用了1x2 的rectangular pooling window来替代常见的squared方法。该tweak yields的feature maps具有更大的宽度,更长的feature序列。例如,一张包含了10字符的图片,通常size=100x32, 其中一个feature sequence可以生成25帧。该长度超过了最大英文词汇的长度。在那之上,rectangluar pooling windows会生成rectangular receptive fields(如图2),它有益于识别具有narrow shapes的一些字符,比如’i’和’l’。

该网络不只具有deep conv layers,但也具有recurrent layers。两者很难训练。我们发现使用batch-normalization技术来训练这样深度的网络很有用。两个batch-normalization layers,训练过程可以极大加速。

我们使用torch7来实现该网络框架,定制实现了LSTM units(Torch7/CUDA),transcription layer(c++)和BK-tree数据结构(c++)。实验在工作站(2.50 GHz Intel(R) Xeon(R) E5- 2609 CPU, 64GB RAM 以及NVIDIA(R) Tesla(TM) K40 GPU)上进行训练。该网络的训练使用AdaDelta进行训练,相应的\(\rho\)为0.9. 在训练期间,所有图片被归一化到100 x 32,以加速训练过程。训练过程大概达到50个小时后收敛。测试图片的高度被归一化到32. 宽度按高度的比例进行缩放,但至少是100个像素。平均测试时间是0.16s/sample,在IC03上进行评测,没有词典。合适的词典搜索被应用于IC03的50k词典上,参数\(\delta\)设置为3.每个测试样本平均花费0.53s。

评测

略,详见paper.

参考

2.前置

首先,我们将使用隐式反馈的CF问题进行公式化。接着,简短介绍下广泛使用的MF模型,以及重点介绍使用内积的缺陷。

2.1 使用隐式数据进行学习

假设M和N表示users和items的数目。我们使用用户的隐式反馈来定义user-item交互矩阵\(Y \in R^{M \times N}\):

\[y_{ui} = \begin{cases} 1, \\ 0 \end{cases}\]

…(1)

\(y_{ui}\)为1表示:user u和item i间有交互;然而,它并不意味着u实际会喜欢i。相似的,该值为0也并不表示用户u不喜欢item i。对隐式数据的学习存在着许多挑战,因为它存在许多关于用户偏好的噪声数据。而已观察条目至少反映了用户在这些items上的兴趣,未观察条目可能只是缺失数据(missing data),它天然缺少负反馈

隐式反馈的推荐问题,可以公式化为:对在Y中未观察条目的得分(score)的估计问题,这些得分可以被用于进行ranking。Model-based方法假设,数据可以通过一个底层模型进行生成。正式的,他们可以被抽象成:学习\(\hat{y}_{ui}=f(u,i \mid \theta)\),其中\(\hat{y}_{ui}\)可以表示交叉项\(y_{ui}\)的预测得分,\(\theta\)表示模型参数,f表示将模型参数映射到预测得分的函数(我们称之为“interaction function”)

为了估计参数\(\theta\),已经存在的机器学习方法会优化一个目标函数。有两种类型的目标函数最为常用——pointwise loss以及pairwise loss:

  • 作为在显式反馈上的一个天然扩展,pointwise learning方法通常会使用一个回归框架,对\(\hat{y}_{ui}\)与它的目标值\(y_{ui}\)间的平方loss(squared loss)进行最小化。为了处理缺失的negative数据,会将所有未观察条目当成是负反馈,或者从未观察条目中进行抽样。
  • pairwise learning的思想是:已观察条目应比未观察条目排序更靠前。pairwise learning会最大化已观察条目\(\hat{y}_{ui}\)与未观察条目\(\hat{y}_{uj}\)间的间隔。

更近一步,我们的NCF框架会使用神经网络的方法对交叉函数f进行\(\hat{y}_{ui}\)的参数估计。这样,它能天然支持pointwise和pairwise的两种学习方法。

2.2 矩阵分解(MF)

MF会分别将每个user和item使用一个关于隐特征的real-valued vector进行关联。假设:

  • \(p_u\)和\(q_i\)表示user u和item i的隐向量

MF会将对\(y_{ui}\)的估计表示成\(p_u\)和\(q_i\)的内积:

\[\hat{y}_{ui}=f(u,i|p_u,q_i) = p_u^T q_i = \sum\limits_{k=1}^{K} p_{uk} q_{ik}\]

…(2)

其中:K表示隐空间的维度。

MF会建模关于user和item隐因子的two-way interaction,假设隐空间的每个维度相互独立,并使用相同的权重进行线性组合。这样,MF可以被看成是一个关于隐因子的线性模型。

图1展示了内积函数如何限制了MF的表达力。有两个设置需要明确声明:

  • 首先,由于MF会将users和items映射到相同的隐空间上,两个用户间的相似度可以通过一个内积、或者隐向量间夹角的cosine来进行度量。
  • 第二,不失一般性,我们可以使用jaccard系数作为MF所需要去恢复的两个用户间的ground truth相似度。

图1

假设,我们首先关注在图1a中的前三行(users)。很容易有:\(s_{23}(0.66) > s_{12}(0.5) > s_{13}(0.4)\)。 这样,\(p_1, p_2, p_3\)在隐空间中的几何关系可以如图1b所示。现在,假设我们考虑一个新的用户\(u_4\),它的输入可以如图1a中的虚线表示。我们有:\(s_{41}(0.6) > s_{43}(0.4) > s_{42}(0.2)\),这意味着,\(u_4\)与\(u_1\)最接近,接着是\(u_3\),最后是\(u_2\)。然而,如果一个MF模型将\(p_4\)挨着\(p_1\)(如图1b虚线的两种选择),它会产生\(p_4\)与\(p_2\)(比起\(p_3\))更接近,它很不幸会产生一个大的ranking loss。

以上示例展示了MF的可能限制(使用简单的、确定内积来估计在低维空间中(上图就是个2维的..)的复杂的user-item interactions)。我们注意到,解决该问题的一种方法是:使用更大数目的隐因子K。然而,它会伤害模型的泛化能力(例如:overfitting),特别是在数据稀疏的情况下。在该工作中,我们通过使用DNN来学习交叉函数来解决该限制。

3. neural CF

我们首先描述通用的NCF框架,详述如何使用一个概率模型学习NCF,它会利用隐式数据的二元性质。我们接着展示MF在NCF下是如何表示和泛化的。为了利用DNN进行CF,我们接着提出一个NCF的实例,使用一个多层感知器(MLP)来学习user-item因子模型,它会在NCF框架下对MF和MLP进行ensembles;它会利用MF的线性能力和MLP的非线性能力来建模user-item的隐结构。

3.1 通用框架

图2

为了启用CF的神经网络方法,我们采用multi-layer表示来建模一个user-item interaction \(y_{ui}\),如图2所示,其中,一个layer的output会看成是下一layer的input。底部的input layer包含了两个特征向量\(v_u^U\)和\(v_i^I\),它们可以被定制化成支持更宽范围的users和items的建模,比如:context-aware和content-based,neighbor-based。由于本paper主要关注在纯粹的CF设置中,我们只使用了一个user和一个item的单位矩阵(identity)作为输入特征,并使用one-hot编码将它转成成一个关于输入的二值化稀疏特征表示。注意,这样的一个关于inputs的泛化特征表示,我们的方法可以进行简单的调整:通过使用content features来表示users和items来解决冷启动问题。

上面的input layer是embedding layer;它是一个fully connected layer,可以将稀疏表示投影到一个dense vector上。获得的user(item) embedding可以看成是,在隐因子模型的上下文中关于user(item)的隐向量。user embedding和item embedding接着被feed到一个multi-layer的神经结构中,我们将它称之为neural CF layers,它们会将隐向量映射到预测得分上。neural CF layers的每个layer可以被定制化以发现user-item interactions的特定隐结构。最终的output layer就是预测得分\(\hat{y}_{ui}\),训练的执行会最小化在\(\hat{y}_{ui}\)和目标值\(y_{ui}\)间的pointwise loss。我们注意到,训练该模型的另一种方式是执行pairwise学习,比如,使用Bayesian Personalized Ranking和margin-based loss。该paper只关注neural network建模部分,NCF的pairwise learning的扩展是将来的工作。

我们将NCF的预测建模成:

\[\hat{y}_{ui} = f(P^T v_u^U, Q^T v_i^I | P, Q, \theta_f)\]

…(3)

其中,\(P \in R^{M \times K}\)以及\(Q \in R^{N \times K}\),表示users和items的隐因子矩阵,\(\theta_f\)表示交叉函数f的模型参数。由于函数f被定义成一个多层神经网络,它可以被公式化为:

\[f(P^T v_u^U, Q^T v_i^I) = \phi_{out} (\phi_X (...\phi_2(\phi_1(P^T v_u^U, Q^T v_i^I))...))\]

…(4)

其中\(\phi_{out}\)和\(\phi_x\)各自表示output layer和第x个neural CF layer的映射函数,它们总共有X个neural CF layers。

3.1.1 NCF学习

为了学习模型参数,已经存在的pointwise方法大多数会使用squared loss来执行回归:

\[L_{sqr} = \sum_{(u,i) \in y \cup y^-} w_{ui}(y_{ui} - \hat{y}_{ui})^2\]

…(5)

其中,\(Y\)表示在Y中可观察到的interactions集合,而\(Y^-\)表示负例的集合,它可以是所有(或从中抽样)未观察到的interactions;其中\(w_{ui}\)是一个超参数,它表示训练实例(u,i)的权重。其中squared loss可以通过假设observations从一个高斯分布中生成来解释,我们指出,它与使用隐式数据并不十分稳合。这是因为对于隐式数据,目标值\(y_{ui}\)是一个二值化(1或0)的值,它表示u是否与i有交互。在下文中,我们会描述一个概率化方法来学习pointwise NCF,它会关注隐式数据的二元特性。

考虑到隐式反馈的一元性质(one-class),我们将\(y_{ui}\)的值看成是一个label——1表示item i与y相关,否则不相关。预测得分\(\hat{y}_{ui}\)接着会表示i如何与u相关的可能性。为了赋于NCF这样的一个概率化解释,我们需要限制output \(\hat{y}_{ui}\)的范围为[0,1],它可以轻易地通过使用一个概率化函数(例如:logistic or Probit function)作为output layer \(\phi_{out}\)的activation function来达到该目的。使用上述设定,我们可以定义likelihood function为:

\[p(Y, Y^- | P, Q, \theta_f) = \prod_{(u,i) \in Y} \hat{y}_{ui} \prod_{(u,j) \in Y^-} (1 - \hat{y}_{uj})\]

…(6)

采用负log似然,我们可以达到:

\[L = - \sum_{(u,i) \in Y} log (1-\hat{y}_{ui}) \\ = - \sum_{(u,i) \in Y \cup Y^-} y_{ui} log \hat{y}_{ui} + (1-y_{ui}) log(1-\hat{y}_{ui})\]

…(7)

这是用于最小化NCF方法的目标函数,它的最优化通过执行SGD来完成。你可以注意到,该实现与二元cross-entropy loss相同,这也被称为logloss。通过对NCF采用一个概率化方法,我们可以将使用隐式反馈的推荐看成是一个二元分类问题。classification-aware log loss很少在推荐文献中被研究,我们在本工作中使用它,并在4.3节展示它的有效性。对于负样本\(Y^-\),我们会在每个迭代中控制采样率(例如:观察到交叉的数目),从未观察到的交互中均匀对它们抽样。而非均匀采样策略(例如:item流行度偏差(item popularity-biased))可能会提升效果,我们会在后续工作中探索。

3.2 Generalized MF(GMF)

我们现在已经展示了MF是如何被解释成NCF框架的一个特征case。由于MF是推荐中最流行的方法,已经在许多文献中广泛研究,可以恢复它来允许NCF来模仿一个因子分解模型的大家族

由于输入层(input layers)会使用user(item) ID的one-hot编码,获得的embedding vector可以看成是user(item)的隐向量。假设:

  • 用户隐向量\(p_u\)是\(P^T v_u^U\),
  • item隐向量\(q_i\)是\(Q^T v_i^I\)。

我们定义第一个neural CF layer的映射函数是:

\[\phi_1(p_u, q_i) = p_u \odot q_i\]

..(8)

其中:\(\odot\)表示向量的element-wise product。我们接着将该向量投影到output layer上:

\[\hat{y}_{ui} = a_{out}(h^T (p_u \odot q_i))\]

…(9)

其中:\(a_{out}\)和h分别表示output layer的activation function和edge weights。直觉上,如果我们为\(a_{out}\)使用一个identity function,并强制h是一个关于1的均匀向量,我们就可以准确恢复成MF模型。

在NCF框架下,MF可以很轻易地进行泛化和扩展。例如,如果我们允许h是从数据中学到,并没有均匀限制,它可以产生一个MF变种:允许隐维度的重要性区分。如果我们为\(a_{out}\)使用一个非线性函数,它会将MF泛化成一个非线性设置,这会比线性MF模型更具表现力。在本工作中,我们实现了一个在NCF框架下的泛化版本的MF,它会使用sigmoid function \(\sigma(x)=1/(1+e^{-x})\)作为\(a_{out}\),并使用log loss来从数据中学习h。我们称它为GMF,即Generalized Matrix Factorization的简称。

3.3 多层感知器(MLP)

由于NCF采用两路来建模users和items,它直觉上会通过将它们两路进行拼接来组合特征。该设计在多模态深度学习中被广泛使用(multimodal deep learning)。然而,简单的向量拼接不能解释在user和item隐特征间的任意interactions,它对于建模CF效果来说是不够的。为了解决该问题,我们提出了在concated vector上添加hidden layers,并使用一个标准的MLP来学习user和item隐特征间的interaction。在某种意义上,我们可以赋予该模型一个很大的灵活性和非线性来学习\(p_u\)和\(q_i\)间的交互,而非\(GMF\)的方式只能使用一个固定的element-wise product。更精准的,在NCF框架下的MLP模型被定义成:

\[z_1 = \phi_1(p_u,q_i) = \begin{bmatrix} p_u \\ q_i \end{bmatrix}, \\ \phi_2(z_1) = a_2 (W_2^T z_1 + b_2), \\ \cdots \\ \phi_L(z_{L-1}) = a_L (W_L^T z_{L-1} + b_L), \\ \hat{y}_{ui} = \sigma(h^T \phi_L(z_{L-1}))\]

…(10)

其中,\(W_x, b_x, a_x\)表示权重矩阵,bias向量以及第x层perceptron的activation function。对于MLP layers的激活函数,我们可以自由选择sigmoid、tanh、ReLU等。我们可以分析分个函数:

  • 1) sigmoid函数会限制每个neuron到(0,1)间,这可以限制模型的效果;它会饱和(saturation),当其它output接近0或1时,其中neurons会停止学习
  • 2) 尽管tanh是一个更好的选择,已经被广泛采用,它只能缓和sigmoid的问题到一定程度,因为它可以看成是sigmoid的归一化版本:\(tanh(x/2) = 2\sigma(x) - 1)\)
  • 3) 我们会采用ReLU,它更加生物上可信,并且被证明是未饱和的(non-saturated)。

再者,它鼓励稀疏激活,更适合稀疏数据,使得模型更不会overfitting。经验上ReLU会比tanh有稍微更好的效果,比sigmoid有显著更好的效果。

为了设计网络结构,一个常见解法是采用塔式结构(tower pattern),其中底层(bottom layer)是最宽的,每个后续layer会有更少的neurons数目(如图2所示)。前提是,对于更高layers通过使用更少数目的hidden units,它们可以学到更抽象的数据特征。经验上实现了塔式结构,每个后续的layer size会是前一layer size的二分之一。

3.4 GMF和MLP的Fusion

至今,已经开发了两个NCF的实例——GMF会使用一个线性kernel来建模隐特征交叉,MLP会使用一个非线性kernel来学习interaction function。那么问题来了:如何将GMF和MLP在NCF框架下进行混合,以便能利用更多者来达到对复杂的user-item interactions的更好建模。

一个简单解决方案是,让GMF和MLP共享相同的embedding layer,接着将它们的interaction function的输出进行组合。这种方法与Neural Tensor Network(NTN)的方法相近。特别的,将GMF与一个单层MLP进行组合的建模,可以公式化成:

\[\hat{y}_{ui} = \sigma(h^T a(p_u \odot q_i + W \begin{bmatrix} p_u \\ q_i \end{bmatrix} + b))\]

…(11)

然而,共享GMF和MLP的embedding会限制混合模型的效果。例如,它意味着,GMF和MLP必须使用相同size的embeddings;对于那些两个模型的最优embedding size不同的数据集,这种解决方法对于获取最优ensemble会失败。

图3

为了提供对于混合模型的更多灵活性,我们允许GMF和MLP来学习单独的embeddings,并通过将它们最后的hidden layer进行拼接来将两模型进行组合。图3展示了我们的解法,可以公式化为:

\[\phi^{GMF} = p_u^G \odot q_i^G \\\ \phi^{MLP} = a_L(W_L^T (a_{L-1} (... a_2(W_2^T \begin{bmatrix} p_u^M \\ q_i^M \end{bmatrix} + b_2)...)) + b_L) \\\ \hat{y}_{ui} = \sigma(h^T \begin{bmatrix} \phi^{GMF} \\ \phi^{MLP} \end{bmatrix}\]

…(12)

其中,\(p_u^G\)和\(p_u^M\)可以表示成GMF和MLP部分的user embedding;而\(q_i^G\)和\(q_i^M\)可以表示是item embeddings。如前所述,我们会使用ReLU作为MLP layers的激活。该模型会组合MF的线性的DNN的非线性来建模user-item的隐结构。我们将该模型称为“NeuMF”,即Neural Matrix Factorization的简称。该模型对于每个模型参数的导数可以通过标准的BP算法进行计算,由于篇幅限制这里忽略不讲。

3.4.1 预训练

由于NeuMF的目标函数的non-convexity特性,基于梯度的最优化方法只能找到局部最优解。因此初始化对于模型收敛和效果来说扮演着重要角色。由于NeuMF是GMF和MLP的ensemble,我们建议使用预训练好的GMF和MLP模型来初始化NeuMF。

我们首先使用随机初始化训练GMF和MLP,直到收敛。接着使用它们的模型参数作为NeuMF各自部分的初始化。output layer上的唯一缺点是,我们会拼接两个模型的权重:

\[h \leftarrow \begin{bmatrix} \alpha h^{GMF} \\ (1-\alpha)h^{MLP} \end{bmatrix}\]

…(13)

其中,\(h^{GMF}\)和\(h^{MLP}\)表示预训练好的GMF和MLP模型的h向量,\(\alpha\)是超参数,它决定义两个预训练模型间的trade-off。

为了从头到尾训练GMF和MLP,我们采用Adam。Adam方法比vanilla SGD收敛更快。在将预训练参数feed给NeuMF后,我们使用vanilla SGD进行最优化,而非Adam。这是因为Adam需要保存momentum信息来更新参数。而我们只使用预训练模型参数来初始化NeuMF,必须放弃momentum信息,momentum-based方法并不适合进一步的NeuMF的最优化。

4.实验

实验的目的是为了回答以下的研究问题:

  • RQ1: 我们的NCF方法效果是否比state-of-art的隐式协同过滤方法效果要好?
  • RQ2: 我们的最优化框架(负采样的log loss)是否适合推荐任务?
  • RQ3: 更深layers的hidden units是否对学习user-item interaction数据更有用?

4.1

参考

https://www.comp.nus.edu.sg/~xiangnan/papers/ncf.pdf

CTPN(Connectionist Text Proposal Network)由Zhi Tian等人提出。

总览

CTPN可以在卷积特征图(convolutional feature maps)中直接检测在精密尺度(fine-scale)的text proposals序列中的文本行(text line)。它开发了一个垂直锚点机制(vertical anchor mechanism),可以联合预测关于每个固定宽度proposal的位置(location)和文本/非文本分值(text/none-text score)。序列化的proposals被连接到一个RNN上,无缝地与卷积网络相接,产生一个end-to-end的训练模型。这使得CTPN可以探索丰富的图像文本信息,可以检测相当模糊的文本。CTPN可以在多尺度(multi-scale)和多语言文本(multi-language text)环境下可靠工作,无需进一步后序处理(post-processing):这与自底向上的方法不同(它们通常需要多步后置过滤(post filtering))。在ICDAR 2013和2015 becnmarks上分别取得0.88和0.61的F-measure值,比最近的较好结果有很大的提升。CTPN的计算效率是0.14s/image,它使用了very deep VGG16 model.

一、介绍

在自然图片中读取文本最近在CV界获得广泛关注。这是由于许多实际应用,比如:图片OCR,多语言翻译,图片检索,等等。它包含了两个子任务:文本检测、文本识别。CTPN主要工作集中在文本检测任务上,它比识别更具挑战。文本模式的大量变种,以及高度混杂的背景对于精准文本定位构成巨大挑战。

当前文本检测的主要方法大多数使用了自底向上的pipeline。它们通常从低级字符(low-level character)或笔画(stroke)的检测开始,通常按照一定数量的子阶段:非文本组件过滤(non-text component filtering)、文本行构造(text line construction)和文本行验证(text line verification)。这种多步的自底向上的方法很复杂,并且健壮性和可靠性差。它们的性能很严重地依赖字符检测的结果、以及连接组件的方法、或者滑动窗口的方法。这些方法通常会探索低级特征(基于SWT,MSER,或者HoG)来将候选文本从背景中区分出来。然而,它们并不健壮,需要通过独立标识私有的笔画或字符,没有文本信息。例如,人们标识一个字符序列比标识单个字符更自信,特别是当一个字符很模糊时。这种限制通常会在字符检测上产生大量非文本组件,从而在下一步中处理它们造成主要难题。再者,这些错误的检测很容易在自底向上的pipeline上按顺序累积。为了解决这些难题,CTPN采用强的deep features来在卷积图中直接检测文本信息。另外还开发了文本锚点机制,可以精准预测在精准尺度上的文本位置。接着,提出了一个in-network recurrent架构来将这些fine-scale text proposals按顺序相连接,并将它们编码成富文本信息。

近几年,CNN在通用目标检测上有优势。state-of-art的方法是Faster Region-CNN(R-CNN)系统,其中RPN( Region Proposal Network)可以直接从卷积特征图中生成高质量的未知类别目标proposals。接着RPN proposals可以被feed到一个Fast R-CNN模型上以进一步分类(classification)和提炼(refinement),从而在通用目标检测上产生state-of-art的效果。然而,很难将这些通用目标检测系统直接应用到文本场景检测中,这种情况下通常需要一个更高的位置准确率。在通用目标检测中,每个object都具有一个定义良好的边界,而在文本中也存在这样的边界,因为一个文本行或词由一定数目的独立字符或笔画构成。对于目标检测,一个典型的正确检测的定义是松散的,比如:在检测表面的边界框和ground truth重叠(overlap)> 0.5(PASCAL standard),因为人们可以很容易地从主要部件上识别一个object。相反地,读取完整文本是一个细粒度的识别任务,它的一个正确检测必须覆盖文本行或词的完整区域。因此,文本检测通常需要一个更精准的定位,来产生一个不同的评估标准,比如:text benchmarks中常用的Wolf’s standard。

在CTPN中,会通过扩展RPN结构来进行精准文本行定位。并提出了许多技术开发手段来将generic object detection模型优雅地移植来解决文本上的难题。另外进一步提出了一个in-network recurrent机制,可以在卷积图中直接检测文本序列,避免通过一个额外的CNN检测模型来进行后置处理。

1.1

CTPN的主要架构见图1.

图1: (a) CTPN的结构. 我们通过VGG16模型的最后一层的卷积图(conv5)紧密地滑动一个3x3的空间窗口。在每行中的序列窗口通过一个Bi-LSTM进行递归连接,其中每个窗口的卷积特征(3x3xC)被用于BLSTM的256D输入(包含两个128D的LSTMs)。RNN layer被连接到一个512D的FC-layer上,后面跟着output layer,它会联合预测text/non-text scores,y坐标以及k个锚点的side-refinement offsets。 (b) CTPN输出预列化的固定宽度的fine-scale text proposals。每个box的颜色表示了text/non-text score。只有正分值的boxes才会被展示。

2.相关工作

  • 文本检测:
  • 目标检测:

略,详见paper

3.Connectionist Text Proposal Network

CTPN包括了三个主要部分:

  • 在fine-scale proposals中检测文本
  • 对text proposals进行recurrent连接(recurrent connectionist text proposals)
  • 边缘细化(side-refinement)

3.1 Detecting Text in Fine-scale Proposals

与RPN相类似,CTPN本质上是一个完全卷积网络(fully convolutional network):它允许一个任意size的输入图片。它会通过密集地在卷积特征图(convolutional feature maps)上滑动一个小窗口,并输出一串fine-scale(例如:16-pixel的宽度)的text proposals,如图1(b)所示。

这里采用了一个非常深的16-layer vggNet (VGG16)作为示例来描述 CTPN,它很容易应用于其它的deep模型。CTPN的结构如图1(a)所示。我们使用了一个小的空间窗口(spatial window),3x3,来滑动最后的卷积层中的feature maps(例如:VGG16中的conv5)。conv5的feature maps的size由输入图片的size决定,其中总的stride和receptive field由网络结构来确定。在卷积层中使用一个共享卷积计算的滑动窗口,可以减少基于该方法的计算量。

总之,滑动窗口法采用了多尺度窗口(multi-scale windows)来检测不同size的目标,其中一个固定size的window scale对应于相同size的目标。在faster R-CNN中,提出了一个高效的锚点回归机制,它允许RPN来使用单尺度窗口来检测多尺度目标。单尺度窗口的核心是:通过使用一定数量的锚点(anchors),能预测在一个宽范围尺度和尺度比例(aspect ratios)上的目标。我们希望将这种有效的锚点机制扩展到文本任务上。然而,文本与通用目标十分不同,它必须有一个定义良好的闭合边界和中心,可以从一部分来推测整个目标。它可能包含了多级别的组件:比如笔画,字符,词,文本行和文本区域,它们相互间很容易区分。文本检测是在词或文本行级别定义的,因而,通过将它定义成单个目标,它可以很容易地做出不正确的检测,例如:检测一个词的某部分。因此,直接预测一个文本行或词的位置很难或者不可靠,使得它很难达到一个满意的准确率。图2展示了一个示例,其中RPN直接训练来定位图片中的文本行。

我们寻找文本的唯一特性是,能够很好地泛化成在所有级别上的文本组件。我们观察到,RPN的词检测(word detection)很难精准预测词的水平边缘(horizontal sides),因为一个词中的每个字符是孤立或者分离的,这使得发现一个词的起点和终点容易混淆。很明显,一个文本行是一个序列,它是文本与通用目标之间的主要区别。很自然地将一个文本行考虑成一个fine-scale text proposals的序列,其中每个proposal通常表示成一个文本行的一小部分,例如,一个16-pixel宽的文本片段(text piece)。每个proposal可以包含单个或多个笔画,一个字符的一部分,单个或多个字符,等。我们相信,通过将它的水平位置固定(很难进行预测),可以更精准地预测每个proposal的垂直位置。对比RPN(它只要预测一个目标的4个坐标),这减少了搜索空间。我们开发了一个垂直锚点机制,它可以同时预测一个文本/非文本分值,以及每个fine-scale proposal的y轴位置。对比识别一个独立的字符(很容易混淆),检测一个通用固定宽度的text proposal更可靠。再者,检测在固定宽度的text proposals序列中的一个文本行,可以在多尺度和多尺度比例下可靠运行。

最后,我们按以下方式设计了fine-scale text proposal。我们的检测器(detector)会密集地(densely)检测在conv5中的每个空间位置(spatial location)。一个text proposal被定义成:具有一个16 pixels的固定宽度(在输入图片上)。这等同于将该detector密集地通过conv5 maps,其中,总的stride是完整的16 pixels。接着,我们设计了k个垂直锚点来为每个proposal预测y坐标。k个锚点具有相同的水平位置,它们都有16 pixels的宽度,但它们的水平位置以k个不同的高度进行区分。在我们的实验中,我们为每个proposal使用了10个锚点,k=10, 它们的高度从11到273个pixels不等(每次除以0.7)。显式的水平坐标通过高度和一个proposal边界框的y轴中心来进行衡量。我们根据每个锚点的边界位置,各自计算了相对预测的水平坐标(v):

\(v_c = (c_y - c_y^a)/h^a, v_h = log(h/h^a)\) …(1)

\(v_c^* = (c_y^* - c_y^a)/h^a, v_h^* = log(h^*/h^a)\) …(2)

其中,

  • \(v={v_c, v_h}\)和 \(v^* = {v_c^*, v_h^*}\)分别是相对预测坐标与ground true坐标。
  • \(c_y^a\)和\(h^a\)是中心(y轴)和锚点的高度,它们可以从一个输入图片中被预计算好。
  • \(c_y\)和h是预测的y轴坐标,\(c_y^*\)和\(h^*\)是ground truth坐标。因此,每个预测的text proposal具有一个size=hx16的边界,如图1(b)和图2(右)所示。通常,一个text proposal会大大小于有效可接受field(228x228)。

检测过程如下。给定一个输入图片,我们具有\(W \times H \times C\)的conv5 features maps(通过使用VGG16模型得到),其中C是feature maps或channels的数目,\(W \times H\)是空间位置(spatial arrangement)。当我们的检测器通过一个3x3的窗口通过conv5进行密集滑动时,每个滑动窗口会采用一个\(3 \times 3 \times C\)的卷积特征,来产生预测。对于每个预测,水平位置(x坐标)和k-anchor位置是固定的,它们可以通过将conv5上的空间窗口位置映射到输入图片上来预先计算好。我们的detector会为k个anchors在每个窗口位置输出text/non-text score和预测的y坐标(v)。检测到的text proposals从那些具有text/non-text score > 0.7的锚点上生成(没有最大限制)。通过设计垂直锚点和fine-scale检测策略,我们的检测器可以通过使用单个尺度的图片来处理多个尺度和比例范围的文本行。这进一步减小了计算量,同时还能精准预测文本行的位置。对比RPN或Faster R-CNN系统,我们的fine-scale检测提供了更详细的监督式信息,可以很自然地产生一个更精准的检测。

3.2 Recurrent Connectionist Text Proposals

为了提升位置精度,我们将一个文本行分割成一个fine-scale text proposals序列,然后各自对它们每一个进行预测。很明显地,如果独立地将它们看成单个孤立的proposal是不健壮的。这会在一些非文本目标上(它们与文本模式具有相类似结构:比如,窗,砖,叶子等)产生许多错误的检测。也可以丢弃一些包含弱文本信息的模糊模式。在图3(top)上的一些示例。文本具有很强的连续字符,其中连续的上下文信息对于做出可靠决策来说很重要。可以通过RNN来编码文本信息进行文字识别进行验证。一些paper的结果展示出,连续上下文信息可以极大地促进在裁减不好的词图片上(cropped word images)的识别任务。

受该工作的启发,我们相信该上下文信息对于我们的检测任务很重要。我们的检测器可以探索这些重要的上下文信息来做出可靠决策。再者,我们的目标是为了在卷积层直接编码该信息,产生一个优雅无缝的关于fine-scale text proposals的in-network连接。RNN可以循环地使用它的hidden layer编码该信息。出于该目的,我们提出设计一个在conv5之上的RNN layer,它采用每个窗口的卷积特征作为连续输入,循环更新在hidden layer中的内部state:\(H_t\)。

\(H_t = \phi(H_{t-1}, X_t), t=1,2,...,W\) …(3)

其中,\(X_t \in R^{3 \times 3 \times C}\)是来自第t个滑动窗口的输入的conv5 feature。滑动窗口会从左到右密集地移动,为每个row产生t=1,2,…,W的连续特征。W是conv5的宽度。\(H_t\)是recurrent internal state,可以从当前输入(\(X_t\))和先前在\(H_{t-1}\)中编码的state联合计算得到。该recurrence的计算使用一个非线性函数\(\phi\),它定义了recurrent模型的准确形式。对于我们的RNN layer,我们采用LSTM的结构。LSTM的提出是为了解决梯度消失问题,通过引入三个额外的乘法门:input gate, forget gate和output gate。我们进一步扩展RNN layer,通过使用一个bi-directional LSTM,它允许双向编码recurrent上下文,因而, connectionist receipt field可以覆盖整个图片宽度,比如:228 x width。我们为每个LSTM使用了一个128D的hidden layer,来采用一个256D的RNN hidden layer,\(H_t \in R^{256}\)。

\(H_t\)的内部state被映射到下一个FC layer,以及output layer上用于计算第t个proposal的预测。因此,我们的与RNN layer集合的方式是优雅的,可以产生一个有效的模型,可以进行end-to-end训练,无需额外开销。RNN连接的高效性如图3所示。很明显,它减小了错误检测,同时,可以恢复许多缺失的text proposals(它们包含了非常弱的文本信息)。

图3: 上面三个:不使用RNN的CTPN。下面三个:使用RNN连接的CTPN

3.3 Side-refinement

fine-scale text proposals可以通过CTPN进行准确检测。文本行构建很简单,通过将那些text/no-text score > 0.7的连续的text proposals相连接即可。文本行的构建如下。首先,为一个proposal \(B_i\)定义一个邻居(\(B_j\)):\(B_j -> B_i\),其中:

  • (i) \(B_j\)在水平距离上离\(B_i\)最近
  • (ii) 该距离小于50 pixels
  • (iii) 它们的垂直重叠(vertical overlap) > 0.7

另外,如果\(B_j -> B_i\)和\(B_i -> B_j\),会将两个proposals被聚集成一个pair。接着,一个文本行会通过连续将具有相同proposal的pairs来进行连接来构建。

图4: 红色box:使用side-refinement的CTPN;黄色虚色的box:不使用side-refinement的CTPN。fine-scale proposal box的颜色表示一个text/non-text score

fine-scale detection和RNN连接可以预测在垂直方向上的累积位置。在水平方向上,图片被划分成一串16-pixel宽的proposals序列。当在两个水平侧( horizontal sides)的text proposals不能准确被一个ground truth文本行区域覆盖时,或者一些side proposals被丢弃时(例如:具有一个较低的text score),这会导致一个不精准的定位,如图4所示。这种不准确在通用目标检测中不是很严格,但在文本检测中不能忽视,尤其是对于那些小尺度文本行或词。为了解决该问题,我们提供了一个side-refinement方法,可以准确地为每个anchor/proposal估计在水平左侧和水平右侧的offset(被称为side-anchor或side-proposal)。与y轴坐标的预测相似,我们计算了相对offset:

\(o = (x_{side} - c_x^a) / w^a, o^{*} = (x_{side}^{*} - c_x^a) / w^a\)…(4)

其中,\(x_{side}\)是相对于当前锚点最近水平侧(比如:左或右侧)的x预测坐标。\(x_{side}^{*}\)是ground truth侧在x轴坐标,通过BT 边界框和锚点位置预先计算好。\(c_x^a\)是在x轴的锚点中心。\(w^a\)是锚点宽度,它是固定的,\(w^a=16\)。当将一个检测到的fine-scale text proposals序列连接成一个文本行时,该side-proposals被定义成start proposals和end proposals。在图4中的一些检测样本通过side-refinement进行提升。 side-refinement可以进一步提升位置准确率,在SWT的Multi-Lingual datasets上产生2%的效果提升。注意,side-refinement的offset可以通过我们的模型同时进行预测,如图1所示。它不需要一个额外的后置处理step。

3.4 模型输出和Loss functions

CTPN有三个outputs,它们会一起连接到最后的FC layer上,如图1(a)所示。三个outputs同时预测:text/non-text scores(s)、垂直坐标(等式(2)中的\(v={v_c, v_h}\) )、side-refinement offset (o)。我们探索了k个anchors来在conv5中的每个空间位置上预测它们,在各自的output layer上产生2k, 2k和k个参数。

我们采用了多任务学习来联合优化模型参数。我们引入了三个loss functions:\(L_s^{cl}, L_v^{re}, l_o^{re}\),会各自计算text/non-text score、坐标以及side-refinement的error。有了这些,我们会根据faster R-CNN中的多任务loss,最小化一个关于一第图片的总目标函数(L):

\(L(s_i, v_j, o_k) = \frac{1}{N_s} \sum_{i} L_s^{cl}(s_i, s_i^{*}) + \frac{\lambda_1}{N_v} \sum_j L_v^{re}(v_j, v_j^{*}) + \frac{\lambda_2}{N_o} \sum_k L_o^{re}(o_k, o_k^{*})\) ……(5)

其中,每个anchor是一个训练样本,i是minimatch中的一个anchor的索引。\(s_i\)是anchor i为一个真实文本的预测概率。\(s_i^{*} = {0, 1}\)是ground truth。j是一个关于y坐标回归中合法anchors集合的anchor索引,定义如下。一个合法的anchor是一个已经定义的positive anchor(\(s_j^*=1\)),或者具有一个与ground truth的text proposal具有Intersection-over-Union(IoU) > 0.5 的重合度。\(v_j\)和\(v_j^*\)是第j个anchor相关的y坐标的prediction和ground truth。k是关于一个side-anchor的索引,side-anchor被定义成在距离ground truth文本行限定框左侧或右侧的水平距离(例如:32-pixel)内的一个anchors集合。\(o_k\)和\(o_k^{*}\)分别是在第k个anchor相关的在x轴上的predicted offsets 和ground truth offsets。\(L_v^{re}\)和\(L_o^{re}\)是regression loss。我们会根据之前的工作,通过使用L1 function进行平滑来计算它们。\(\lambda_1\)和\(\lambda_2\)是用于平衡不同任务的loss weights,期望设置为1.0和2.0。\(N_s, N_v, N_o\)是归一化参数,分别表示通过\(L_s^{cl}, L_v^{re}, L_o^{re}\)的总anchors数。

3.5 训练和实现细节

CTPN通过标准的BP和SGD来进行end-to-end的训练。与RPN相似,训练样本是anchors,它们的位置可以通过在输入图片中的位置进行预计算得到,因而每个anchor的labels可以从相应的BT box计算得到。

Training Labels:对于text/none-text分类,会分配一个二分类label:positive(文本)、negative(非文本)anchor。它们通过计算BT bounding box(通过anchor位置进行划分)的IoU overlap得到。一个positive anchor被定义为:

  • i. 一个具有一个与任意GB box有IoU>0.7的重合度(overlap)的anchor
  • ii. 一个anchor具有一个与GT box的最高IoU重合度的anchor

通过条件(ii)的定义,即使一个非常小的文本模式也可以分配一个positive anchor。这对于检测小尺度的文本模式很重要,这也是CTPN的一个核心优点。这与通用目标检测很不同。negative anchors被定义成与所有GT boxes具有IoU<0.5重合度的anchors。y坐标回归(\(v^{*}\))的training labels以及offset regression (\(o^*\))分别通过等式(2)和(4)定义。

训练数据:在训练过程中,每个minibatch样本都从单个图片中随机收集。每个mini-batch的anchors数目固定在\(N_s=128\),正负样本的比例在1:1. 如果一个mini-batch的正样本小于64个,会用负样本进行补齐。我们的模型训练了3000张自然图片,包含229张来自ICDAR 2013训练集的图片。我们收集了其它图片并进行人工标注上相应的文本行的bounding boxes。所有这些自收集的训练样本在所有的benchmarks的任意测试图片没有重合。输入图片将它的short side设置为600进行训练,来保持它原始的比例尺。

实现细节:我们根据标准惯例,探索了极深的VGG16模型在ImageNet上的预训练。我们使用高斯分布为(0, 0.01)的随机权重来为new layers(例如:RNN和output layers)进行初始化。模型通过固定前两个convolutional layers的参数来进行end-to-end训练。我们使用0.9的momentum和0.0005的weight decay。learning rate在前16k次迭代设置为0.001, 在之后的4K次迭代使用0.0001的learning rate。我们的模型使用Caffe框架进行实现。

评测

略,详见paper。

参考

我们来看下tensorflow的rnn_cell.DropoutWrapper的实现原理:《A Theoretically Grounded Application of Dropout in Recurrent Neural Networks》,在rnn上使用dropout。

摘要

RNN是深度学习许多研究的前研。这些模型的主要难点是容易overfit,直接在recurrent layers上应用dropout会失败。在Bayesian建模和深度学习的交叉研究上,提供了一种通用深度学习技术(比如:dropout)的Bayesian解释。在approximate Bayesian inference上的dropout基础,提供了一种理论扩展,并提供了在RNN模型上使用dropout的见解。我们在LSTM和GRU模型中基于dropout技术来使用这种新的变分推断(variantional inference),并将它应用于语言建模和语义分析任务上。新的方法要好于已存在的技术,并达到最好的效果。

1.介绍

RNN是基于序列的模型,是NLP、语言生成、视频处理、以及许多其它任务上的关键。模型的输入是一个符号序列,在每个timestep上,会将一个RNN unit应用于单个symbol,该网络的输出会使用来自之前的time step的信息。RNN很强,但很容易overfit。由于在RNN模型中缺乏正则化,使得它很难处理小数据,为了避免overfitting,研究者们通常会使用:early-stopping、或者小模型。

Dropout是深度网络中很流行的正则技术,其中在训练期间network units会被随机masked(dropped),但该技术从未在RNNs上成功应用过。经验表明:添加到recurrent layers上的噪声(在RNN units间的connections)会因序列过长而被放大,从而盖过信号本身。因而,一些研究得出结论:该技术只能在RNN的inputs和outputs上使用[4,7,10]。但这种方法在我们的实验中仍会导致overfitting。

最近在Bayesian和深度学习的交叉研究的最新结果提供了:通过Bayesian视角来解释常见的deep learning技术[11-16]。深度学习的Baeysian视度将这些新技术引入到该领域,比如:从深度学习网络中获得原则不确定估计(principled uncertainty estimates)。例如,Gal and Ghahramani展示了dropout可以被解释成一个Bayesian NN的后验的变分近似。这种变化近似分布是两个具有较小方差的高斯分布的混合,其中一个Gaussian的均值固定为0. 在approximate Bayesian inference中的dropout的基础扩展了理论,提供了新的视角来在RNN模型上使用这些技术。

这里我们关注常见的RNN模型(LSTM, GRU),并将它们解释成概率模型,比如:RNN的网络权重看成是随机变量,并定义了likelihood函数。我们接着在这些概率Bayesian模型上执行近似变化推断(我们称之为:Variational RNNs)。使用高斯混合的在权重的后验分布上的近似,会产生一个可跟踪的最优化目标函数。对该objective最优化等同于在各自RNNs上执行一个新的dropout变种。

在新的dropout variant中,我们会在每个timestep上对inputs、outputs、recurrent layers(在每个time step上drop相同的network units)重复相同的dropout mask。与已经存在的专有(ad-hoc)技术相比,在每个timestep上,对inputs、outputs各自采用不同的dropout masks抽样(在recurrent connections上不使用dropout,因为在这些connections上使用不同的masks会导致很差的效果)。我们的方法和与现有技术的关系如图1所示。当使用离散输入(比如:words)时,我们也会在word embeddings上放置一个分布。在word-based模型中的dropout接着会随机drop掉句子中的word types,并被解释成:对于该任务,强制该模型不依赖于单个words。

图1 dropout技术。(左):标准dropout (右): Bayesian解释的dropout. 每个方块表示一个RNN unit,水平键头表示时间依存关系(recurrent connections)。垂直键头表示每个RNN unit的input和output。带颜色的连接(connections)表示dropped-out inputs;不同颜色表示不同的dropout masks。虚线表示没有dropout的标准connections。当前技术(naive dropout, 左)在不同time steps上使用不同的masks,而在recurrent layers上没有dropout。提出的技术(Variational RNN, 右)在每个timestep上使用相同的dropout mask,包括recurrent layers

我们接着研究了相关的文献和资料,将我们的Variational RNN的近似推断进行公式化,产生提出的dropout变种。实验结果在随后给出。

2.相关研究

3.背景

我们会回顾下Bayesian神经网络和近似变分推断的背景知识。基于这些思想,在下一节我们提出了在probabilistic RNN中的近似推断,它会产生一个dropout的新变种。

3.1 Bayesian神经网络

给定:

  • 训练输入:\(X = \lbrace x_1, \cdots, x_N\rbrace\)
  • 相应的输出:\(Y = \lbrace y_1, \cdots, y_N\rbrace\)

在Bayesian(parametrics) regression中,我们希望推断一个函数\(y=f^w(x)\)(用于生成我们的outputs的可能性)的参数w。什么样的参数可能会生成我们的数据?根据Bayesian方法,我们想将一些先验分布放置在参数空间上:\(p(w)\)。该分布表示了先验,表示哪些参数可能会生成我们的数据。我们进一步需要定义一个likelihood分布\(p(y \mid x, w)\)。对于分类任务,我们会假设一个softmax likelihood:

\[p(y=d \mid x,w) = Categorical(\frac{exp(f_d^w(x))} { \sum\limits_{d'} exp(f_{d'}^w(x))})\]

或者一个关于regression的高斯似然。给定一个数据集X,Y,我们接着寻找在参数空间上的一个后验:\(p(w \mid X,Y)\)。该分布会捕获多个函数参数生成我们所观察到的数据的可能性。有了它,我们可以为一个新的input point \(x^*\)通过下式连续积分来预测一个output:

\[p(y^* | x^*, X, Y) = \int p(y^*|x^*, w) p(w|X,Y) dw\]

…(1)

定义在函数参数集合上的分布的一种方式是:在一个神经网络的权重上放置一个先验分布,生成一个Bayesian NN。对于layer i给定权重矩阵\(W_i\)以及bias vectors \(b_i\),我们经常在该权重矩阵上放置标准矩阵高斯先验分布,\(p(W_i)=N(0,I)\),并出于简洁性经常为bias vectors的假设一个点估计(point estimate)。

3.2 Bayesian NN中的近似变分推断

我们感兴趣的是,发现权重矩阵的分布(参数化我们的参数)来生成我们的数据。这也是在给定我们的观察 \(X,Y: p(w \mid X, Y)\)在权重上的后验。该后验在总体上是不可跟踪的,我们会使用变分推断来近似它。我们需要定义一个近似变分分布\(q(w)\),接着最小化在近似分布和完整后验间的KL divergence:

\[KL(q(w) || p(w|X,Y)) \propto \int q(w) log p(Y|X,w)dw + KL(q(w)||p(w)) \\ = -\sum\limits_1^N \int q(w) log p(y_i | f^w(x_i))dw + KL(q(w)||p(w))\]

…(2)

我们接着将该近似变分推断扩展到probabilistic RNNs上,并使用一个\(q(w)\)分布,它会产生在RNNs上的一个dropout新变种。

4.RNN上的变分推断

在本节中,出于概念简洁性,我们将关注在简单RNN模型上。LSTM和GRU与它相类似。给定长度为T的输入序列:\(x=[x_1, \cdots, x_T]\),一个简单的RNN通过对函数\(f_h\)重复使用来形成。这会在每个timestep t上生成一个hidden state \(h_t\):

\[h_t = f_h(x_h, h_{t-1}) = \sigma(x_t W_h + h_{t-1} U_h + b_h)\]

\(\sigma\)为非线性函数。该模型可以定义成:\(f_y(h_T) = h_T W_y + b_y\)。我们将该RNN看成是一个概率模型,将参数\(w = \lbrace W_h,U_h,b_h,W_y,b_y \rbrace\)看成是随机变量(遵循正态先验分布)。为了使在w上的依赖更清晰些,我们将\(f_y\)重写成\(f_y^w\),同理\(f_h^w\)。我们定义了我们的概率模型的likelihood。在随机变量w的后验是相当复杂的,我们使用变分推断以及近似分布\(q(w)\)来近似它。

在等式(2)中对每个sum term进行evaluating,我们可以得到:

\[\int q(w) log p(y|f_y^w(h_T)) dw = \int q(w) log p(y|f_y^w (f_h^w(X_T, h_{T-1}))) dw \\ = \int q(w) log p(y | f_y^w (f_h^w(x_T, f_h^w( \cdots f_h^w(x_1,h_0) \cdots )))) dw\]

其中:\(h_0 = 0\)。我们使用Monte Carlo(MC)积分、并使用单个样本,将它近似为:

\[\approx p(y | f_y^{\hat{w}} (f_h^{\hat{w}} (x_T, f_h^{\hat{w}}( \cdots f_h^{\hat{w}}(x_1,h_0) \cdots )))), \ \ \ \hat{w} \sim q(w)\]

会在每个sum term上产生一个无偏估计。

该estimator可以插入到等式(2)中,来获得最小的objective:

\[L \approx -\sum\limits_{i=1}^N log p(y_i | f_y^{\hat{w}_i} f_h^{\hat{w}_i}(x_{i,T}, f_h^{\hat{w}_i}(x_{i,1},h_0) \cdots )))) + KL(q(w) || p(w))\]

…(3)

注意:对于每个序列\(x_i\),我们会抽样一个新的实现\(\hat{w}_i = \lbrace \hat{W}_h^i, \hat{U}_h^i, \hat{b}_h^i, \hat{W}_y^i, \hat{b}_y^i \rbrace\),在序列\(x_i = [x_{i,1}, \cdots, x_{i,T}]\)中的每个symbol会通过函数\(f_h^{\hat{w}_i}\)进行传递,并且在每个timestep \(t \leq T\)上使用相同的weight实现 \(\hat{W}_h^i, \hat{U}_h^i, \hat{b}_h^i\)。

根据[17],我们定义了我们的近似分布来对权重矩阵和在w中的行进行因式分解(factorise)。对于每个权重矩阵的行\(w_k\),近似分布为

\[q(w_k) = p N(w_k; 0, \sigma^2 I) + (1-p) N(w_k; m_k, \sigma^2 I)\]

其中:

  • \(m_k\)是变分参数(row vector)
  • p为(dropout probability),事先给定
  • \(\sigma^2\)较小

我们在\(m_k\)上最优化;这些对应于在标准视图中RNN的权重矩阵。等式(3)的KL可以被近似成在变分参数\(m_k\)上的\(L_2\)正则。

样本\(\hat{w} \sim q(w)\),评估模型的output \(f_y^{\hat{w}}(\cdot)\)对应于在forward pass期间在每个权重矩阵W上的行进行随机零化(masking)——例如:执行dropout。我们的目标函数L等同于标准RNN。在我们的RNN setting中,对于一个序列input,每个权重矩阵行会被随机masked一次,很重要的是:在所有time steps上会使用相同的mask

预测可以被近似成:即会将每个layer的均值(mean)的传播给下一layer(被称为标准的dropout approximation),或者通过等式(1)中q(w)的后验进行近似:

\[p(y^* | x^*, X, Y) \approx \int p(y^*|x^*, w) q(w) d(w) \approx \frac{1}{K} \sum\limits_{k=1}^K p(y^* | x^*, \hat{w}_k)\]

…(4)

以及\(\hat{w}_k \sim q(w)\),例如,通过在test time时执行dropout并对结果求平均(MC dropout)。

4.1 在RNNs中dropout的实现与关系

实现我们的近似推断等同于以这种方式在RNNs中实现dropout:在每个timestep上drop掉相同的network units,随机drop掉:inputs、outputs、recurrent connections。对比起已经存在的技术:在不同的timesteps上drop掉不同的network units、在recurrent connections上不使用dropout(见图1)。

特定RNN模型,比如:LSTMs和GRUs,在RNN units上使用不同的gates。例如:LSTM使用4个gates来定义:”input”、”forget”、“output”、”input modulation”.

\[\underline{i} = sigm(h_{t-1} U_i + x_t W_i) \\ \underline{f} = sigm(h_{t-1} U_f + x_t W_f) \\ \underline{o} = sigm(h_{t-1} U_o + x_t W_o) \\ \underline{g} = sigm(h_{t-1} U_g + x_t W_g) \\ c_t = \underline{f} \circ c_{t-1} + \underline{i} \circ \underline{g} \\ h_t = \underline{o} \circ tanh(c_t)\]

其中:

  • \(w = \lbrace W_i, U_i, W_f, U_f, W_o, U_o, W_g, U_g\rbrace\)为权重矩阵
  • \(\circ\)为element-wise product

这里,内部state \(c_t\)(被称为cell)被求和式的更新。

该模型可以被重新参数化为:

\[\begin{pmatrix} \underline{i} \\ \underline{f} \\ \underline{o} \\ \underline{g} \end{pmatrix} = \begin{pmatrix} sigm \\ sigm \\ sigm \\ tanh \end{pmatrix} ( \begin{pmatrix} x_t \\ h_{t-1} \end{pmatrix} ) \cdot W\]

…(6)

其中:\(w = \lbrace W \rbrace\),W是一个2K x 4K的矩阵(K是\(x_t\)的维度)。我们将该参数命名为:tied-weights LSTM(对比于等式(5)中的untied-weights LSTM)

尽管这两个参数会产生相同的deterministic模型,它们会产生不同的近似分布\(q(w)\)。有了第一个参数,对于不同gates可以使用不同的dropout masks(即使当使用相同input \(x_t\)时)。这是因为,近似分布会放在在矩阵上而非inputs上:我们会drop掉一个权重矩阵W中特定的行,并将它应用在\(w_t\)上;在另一矩阵\(W'\)上drop掉不同的行,并应用到\(x_t\)上。第二个参数,我们会在单个矩阵W上放置一个分布。这会产生一个更快的forward-pass,但是会轻微减弱实验的效果。

在更具体的项上,我们会重写我们的dropout变种,使用第二个参数(等式(6)):

\[\begin{pmatrix} \underline{i} \\ \underline{f} \\ \underline{o} \\ \underline{g} \end{pmatrix} = \begin{pmatrix} sigm \\ sigm \\ sigm \\ tanh \end{pmatrix} ( \begin{pmatrix} x_t \circ z_x \\ h_{t-1} \circ z_h \end{pmatrix} \cdot W)\]

…(7)

其中,\(z_x, z_h\)会在所有time steps上随机mask(与等式(5)的参数相似)。

作为比较,Zaremba[4]的dropout变种(rnndropout)会将等式(7)中的\(z_x\)替代成时间独立的(time-dependent) \(z_x^t\),它会在每个time step上重新再抽样(其中:\(z_h\)被移除,recurrent connection \(h_{t-1}\)不会被drop掉):

\[\begin{pmatrix} \underline{i} \\ \underline{f} \\ \underline{o} \\ \underline{g} \end{pmatrix} = \begin{pmatrix} sigm \\ sigm \\ sigm \\ tanh \end{pmatrix} ( \begin{pmatrix} x_t \circ z_x^t \\ h_{t-1} \end{pmatrix} \cdot W)\]

另外,Moon[20]的dropout变种则将等式(5)进行变化,会采用internal cell:

\[c_t = c_t \circ z_c\]

其中,在所有time steps上会使用相同的mask \(z_c\)。注意,不同于[20],通过将dropout看成是一个在权重上的operation,我们的技术可以很容易扩展到RNNs和GRUs上。

4.2 Word Embeddings Dropout

在具有连续输入的数据集中,我们经常将dropout应用到input layer上——例如:input vector本身。这等价于在weight matrix上放置一个分布,它跟着input,并能近似对它求积分(该matrix是可优化的,否则会有overfitting的倾向)

但对于离散输入的模型(比如:words,每个word会被映射到一个连续的vector: word embedding中)却很少这样做。有了word embeddings,input可以看成是word embedding或者是一个“one-hot” encoding。one-hot编码的vector与一个embedding matrix \(W_E \in R^{V \times D}\) 的乘积就给出了一个word embedding。好奇的是,该parameter layer是在大多数语言应用中最大的layer,但它经常不会正则化。因为embedding matrix的优化可能会导致overfitting,因此希望将dropout应用到one-hot encoded vectors。这事实上等同于在输入句子上随机drop掉words。可以解释成:对于它的output,模型不依赖于单个词。

注意,在开始前,我们会将矩阵\(W_E \in R^{V \times D}\)的行随机设置为0. 因为我们会在每个time step上重复相同的mask,我们会在整个序列上drop掉相同的words——例如,我们随机drop掉word types,而非word tokens(例如:句子“the dog and the cat”可能会变为:“- dog and - cat”或者“the - and the cat”,但不会是“- dog and the cat”)。一种可能无效的实现是,需要对V的Bernoullli随机变量进行抽样,其中V可能很大。这可以通过对长度为T的序列,至多有T个embeddings被drop的方式来解决(其它drop掉的embeddings不会对模型output有影响)。对于\(T \ll V\),最有效的方式是,首先将words映射到word embeddings上,接着基于它们的word-type将word embedding进行zero-out。

5.评估

略。

#6.DropoutWrapper

这里再说一下tensorflow中的tf.nn.rnn_cell.DropoutWrapper。里面有一个比较重要的参数:variational_recurrent(缺省为False)。

如果设置为True,它就会在每个step上使用相同的dropout mask,如上面的paper描述。如果设置为False,则会在每个timestep上设置一个不同的dropout mask。

注意,缺省情况下(除排提供一个定制的dropout_state_filter),经过DropoutWrapper 的memory state(LSTMStateTuple中的component c)不会被更改。该行为在上述文章中有描述。

参考