1.论文主要思想:
用卷积网络做图片分类问题的时候,无法对sequence类型的图片做处理,比如一串电话号码这样的图片集。对于这种sequence数据,我们有一个很好的工具,recurrent neural network,所以我们能不能将cnn处理图片的能力和rnn处理序列的能力结合在一起处理一些日常生活中的手写体,或者是说标示牌这些图片,然后提取出里面的字符呢?
这就是这篇论文所叙述的东西。
2.pipeline:
2.1 main advantages:
- It has unconstrained length of sequence,也就是说不限制输入的长度,任何长度都可以
- It can be jointly trained with a loss function,cnn和rnn可以一起处理,训练,不用分开
2.2 Network Architecture:
2.2.1 feature sequence extraction
传统方法是将图片整个提取特征,但是这种办法就使得需要固定维度的输入,所以这里采取滑动卷积核的方式,可以自适应到任何长度的输入
2.2.2 sequence labeling
传统的LSTM如左图所示,改进只有LSTM输入图像特征向量,然后采用双向的顺序来训练rnn,这是因为图片周围的信息都是有用的,所以不能只考虑一边,而要考虑双侧
LSTM is directional, however, in the image-based sequence, contexts from both sides are very useful and comlementary for each other.
2.2.3 transcription
transcription is to find the label sequence with the highest probability conditioned on the per-frame predictions.
这一步的最终目的是想通过训练后的网络,输出正确的label的概率最大
2.2.3.1 probability of label sequence
关键的一步是如何将rnn的输出转换成在label序列上的条件概率分布
Temporal Classification
首先给出一种sequence到sequence的模型的输入和输出类型:
input: $X=R^m$ 是m维的实值向量,目标空间 Z=L 就是所有的目标序列,S为样本空间,包含着很多个(x, z)这种序列对,每个$x = (x_1, x_2, \dots, x_T)$,每个$z = (z_1, z_2, \dots, z_U)$,一般U<T,输入的序列每个点代表着一个信息,所以得到的输出最多只能和输入的信息一样多,不能超过输入的信息
TC的目的是训练一个分类器h,$h: X \rightarrow Z$,使得每给一个sequence输入,可以得到一个sequence输出
下面如何定义loss函数就很重要了:
Label error rate:
S' 表示的一个测试集,h(x)就是输入x,得到的输出结果,z表示目标序列,ED表示h(x)要经过调整得到z的步数
这是一种很自然的度量方式
Connectionist Temporal Classification
CTC网络多了一层输出,softmax layer。如果真实的label用L表示,输出结果是是一个比|L|长的序列,前|L|个元素表示相应位置是L中的元素的概率,多的元素表示是空白或者说没有Label的概率,总的概率就是这些概率求和
输入x是一个长为T的序列,rnn定义 $N_w: R^m \rightarrow R^n$,
$y = N_w(x)$,$y_k^t$ 表示在t的位置是label k的概率,这个概率定义在所有的可能label加上一个blank上面,也就是0到9这10个数字加一个空格,一共是11种可能,这个概率空间用$L'^T$表示
然后在序列$\pi$上面定义一个函数B,将序列B映射为label,比如将“--hh-e-l-ll-oo--”通过去重,去空格,映射到“hello”
2.3 Network Training
$X = { I_i, L_i}_i$,其中$I_i$表示输入图片,$L_i$表示真实的label
就是最小化这个函数,可以用backpropogation的方法