论文地址:用RNN书写及识别汉字
摘要
目前识别汉字的通常方法是使用CNN模型,而识别在线(online)汉字时,CNN需要将在线手写轨迹转换成像图像一样的表示。文章提出RNN框架,结合LSTM和GRU。包括识别模型和生成模型(即自动生成手写体汉字),基于端到端,直接处理序列结构,不需要像转换成图像表示,也不需要任何特定领域的知识。生成模型中,使用了字符嵌入的条件生成模型。用的库是ICDAR-2013.
- 注:识别汉字最重要的领域知识包括: 字符形状正则化,方向分解特征映射
1.介绍
自动手写体识别已经研究了很久,但是自动书写并没有得到很好的研究,知道最近,基于RNN的生成序列技术得到发展.
汉字识别两类主流方法
- online:在线识别,记录和分析笔尖运动轨迹,识别语言信息
- offline:离线识别,对字符(灰度或二进制)图像进行分析和分类
卷积的先验知识,使得CNN 成为图片识别的强有力工具,因为离线字符被表示为图像,因此CNN自然而然的被应用于离线识别。而将CNN用于在线识别的话,就需要将手写轨迹转换成为图像一样的表示,譬如AMAP,the path signature maps, the directional feature maps.
文章提到一些生成工具:NADE , variational auto-encoder , DRAW. 为了更好地模拟生成过程,GAN(生成对抗网络)被用来同时训练一个生成器来捕获数据分布,以及一个鉴别器来区分min-max优化框架中的真实样本和生成的样本。
DCGAN,LAPGAN都可以用于生成汉字,但是他们忽略了手写轨迹(时间顺序,及轨迹)。
文章提出一种基于RNN的条件生成模型,而且利用字符嵌入来训练生成模型。
2.在线手写汉字的表示
-
书写的动态过程可以用变长序列表示
其中 x i , y i x_i, y_i xi,yi表示笔的移动, s i s_i si表示点 i i i属于哪一划, 书写顺序也得到保存。 -
预处理
移除多余的点
如图所示,文章假设 s i = s i − 1 = s i + 1 s_i=s_{i-1}=s_{i+1} si=si−1=si+1,移除的两个条件是
(6)式用到了余弦相似性
其中超参数
T
d
i
s
t
=
0.01
×
m
a
x
{
H
,
W
}
T_{dist}=0.01\times max\lbrace H, W\rbrace
Tdist=0.01×max{H,W}(
H
H
H为高度,
W
W
W为宽度),
T
c
o
s
=
0.99
T_{cos} = 0.99
Tcos=0.99
坐标标准化过程
投影(4)式;计算平均值(5)式;计算偏差(6)式;计算标准差(7)式;得到新值(8)式
Ω
\Omega
Ω代表所有直线的集合,这些直线连接两个连续点(即为同一划)
标准化后x-y轴上的偏差也得到规范化。
3.识别模型:RNN端到端的识别
六维表示:
Δ
x
i
=
x
i
+
1
−
x
i
\Delta x_i = x_{i+1}-x_i
Δxi=xi+1−xi,
Δ
y
i
=
y
i
+
1
−
y
i
\Delta y_i = y_{i+1}-y_i
Δyi=yi+1−yi.指示函数Ⅱ(等式成立取1,否则取0)此处
[
0
,
1
]
[0,1]
[0,1]表示pen-up,
[
1
,
0
]
[1,0]
[1,0]表示pen-down
为了方便表示用
[
x
1
,
x
2
,
.
.
.
,
x
k
]
[x_1,x_2, ..., x_k]
[x1,x2,...,xk]代替
[
L
1
,
L
2
,
.
.
.
,
L
n
−
1
]
[L_1,L_2,..., L_{n-1}]
[L1,L2,...,Ln−1] ;值得注意的是
x
i
x_i
xi代表的是6维向量
RNN模型中,输入序列为
[
x
1
,
x
2
,
.
.
.
,
x
k
]
[x_1,x_2, ..., x_k]
[x1,x2,...,xk],每一个时间步都产生一个隐含态,得到
[
h
1
,
h
2
,
.
.
.
,
h
k
]
[h_1,h_2, ..., h_k]
[h1,h2,...,hk]。计算方式是
h
t
=
f
{
x
t
,
h
t
−
1
}
h_t = f\lbrace x_t,h_{t-1}\rbrace
ht=f{xt,ht−1};
f
f
f为递归变换函数
输出序列
[
y
1
,
y
2
,
.
.
.
,
y
k
]
[y_1,y_2, ..., y_k]
[y1,y2,...,yk]由
y
t
=
g
(
h
t
)
y_t = g(h_t)
yt=g(ht)得到
论文分别介绍了LSTM与GRU
long Short Term Memory
Gated Recurrent Unit
Stacked and Bidirectional RNN (图三有体现)
图中可以看出RNN模型是堆叠双向的。从左至右
[
x
1
,
x
2
,
.
.
.
,
x
k
]
[x_1, x_2,...,x_k]
[x1,x2,...,xk]输入正向循环层得到
[
h
1
,
h
2
,
.
.
.
,
h
k
]
[h_1, h_2,...,h_k]
[h1,h2,...,hk].同时
[
x
k
,
x
k
−
1
,
.
.
.
,
x
1
]
[x_k, x_{k-1},...,x_1]
[xk,xk−1,...,x1]输入反向循环层得到
[
h
1
′
,
h
2
′
,
.
.
.
,
h
k
′
]
[h'_1, h'_2,...,h'_k]
[h1′,h2′,...,hk′], 为了做最后的分类,组合所有的隐含状态从而获得输入序列的固定长度表示(Fixed Length Feature):
用于输入fully connected layer 和 softmax layer, 做最后的分类。
图三中也可看出在池化层和全连接层,均采用了dropout策略。
测试程序的两种策略
- 直接将序列输入RNN去分类
- 用sequential dropout得到子序列,然后融合这些子序列的分类结果来做基于集合的决策
成功的关键
规范化以及大量的训练数据
初始化及优化
初始化相关的值,文章中用的优化方法是Adam(基于低阶矩的自适应估计)
4 识别汉字实验
测试数据库使用的是ICDAR-2013,训练数据库是CASIA(包括OLHWDB1.0和OLHWDB1.1) ;训练数据有2,693,183 个;测试数据有 224,590 个。字符类数为3755(一级汉字个数).
预处理之后,每个字符的序列长度为50。从图三可以看出使用dropout可以提高泛化能力,在池化层和全连接层dropout概率设置为0.1。 优化算法Adam抽取1000个小批量样本,学习率初始化为0.001,当训练数据的花销和准确率不在提高时,学习率减小通过*0.3.每一轮过后,将训练数据重新打乱并选取不一样的小批量样本。实验环境为Theano,使用平台为NVIDIA Titan-X 12G GPU。
Table1 几种网络的比较
从图中可以看出
- NET2比1好,NET4比3好,NET4最好,NET5,6与4较接近。
- LSTM通常有较高的训练集准确率,但不一定有更高的测试准确率。这可能表明GRU能更好的避免过拟合。
- 从内存消耗,训练时间以及测试速度得出结论GRU比LSTM好
当recurrent层往三层以上再增加时,性能不会在提升。
可能的原因是: - 循环单元在每个时间步都保持activations, 使得RNN模型已经足够深,堆叠更多层不会带来额外的鉴别能力
- 增加stacked recurrent层,训练和测试时间都在增加。
Table 2 从随机dropout生成的子序列中测试基于集成决策的准确率
-当子序列达到30时,比全序列好。
与其他方法的比较
集成NET1–NET6,准确率可以达到98.15%,最高。
生成模型:自动书写汉字
生成模型的目的在于学习
P
(
y
∣
x
)
P(y|x)
P(y∣x),另一方面,生成模型的目的是学习
P
(
x
)
,
P
(
x
∣
y
)
P(x),P(x|y)
P(x),P(x∣y). 通过对序列分布建模,生成模型能用来书写汉字。
条件生成RNN模型
为了模拟笔迹序列的分布,采用了生成RNN模型。
考虑到汉字数量庞大,将结合RNN模型对字符嵌入进行训练。
生成模型基于GRU,
Gaussian mixture model 用于笔向建模
下一笔方向
d
t
+
1
d_{t+1}
dt+1的概率密度为
SoftMax model 用于笔的状态建模
训练过程,书写过程
书写汉字实验
生成模型中,字符嵌入的维数是500. 低维(式子25,26中)要转换为高维。GRU中的隐含层为1000。输出向量是300维(式子31)
用Adam进行训练。学习率设置为0.001, 小批量样本数为500.
训练过程说明
图6 到了第50轮的时候,能容易地被人识别。使用Adam,60轮就收敛了。
与传统的具有动量的随机梯度下降法(SGD)相比,Adam优化算法在生成RNN模型中的表现要好得多。
质量分析
图9a表明对于大多数类来说真实样本和生成样本的识别率差不多,但是有一些特殊的类表示出较大的差异。经过分析可以看出,这些字符通常来自易混淆类,在这些例子中,生成模型不能捕捉到那些微小但重要的细节,从而精确地绘制出特定的字符,因此与真实样本相比,生成的字符的准确性大大降低。
故为了改善生成字符的质量,作者说将更加注意相似/混淆的字符类。
解决办法
- 修改损失函数
- 将注意机制和记忆机制与生成RNN模型相结合,使模型能够在书写过程中动态记忆并聚焦于特定字符的关键区域
结论及期望
- 将条件生成RNN模型与字符嵌入联合训练,使模型能够正确地写入上千个不同的字符。采用高斯混合模型对书写方向进行建模,保证了书写风格的多样性。
- 生成RNN模型可以通过对三种离散的pen-states进行建模,自动决定何时以及如何完成绘制过程
- 一个有趣的未来方向是利用所提出的方法作为构建块的草书手写中文文本的合成。
其他知识点
-
A
⨀
B
A \bigodot B
A⨀B ; A 和 B 的逐元素乘积(Hadamard 乘积)
- 超参数(hyper-parameters ):是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。
未明白部分
- The RNN computes activations for each timestep which makes them extremely deep and can lead to vanishing or exploding gradients [29]. The choice of the recurrent computation f can have a big impact on the success of RNN because the spectrum of its Jacobian controls whether gradients tend to propagate well (or vanish or explode)