如何为在线手写识别的HMM模型创建参数?

问题描述

我对隐马尔可夫模型缺乏经验。如果我想为在线手写识别创建HMM模型(这意味着用户在设备上实时绘制的字母手写识别而不是识别字母图像),参数模型如何?像是什么:

  • 隐藏状态
  • 观察,
  • 初始状态概率,
  • 状态转移概率
  • 排放概率?

我现在可能拥有的观察结果是{x,y,timestamp}的数组,它是我通过用户在平板电脑上的手指运动记录的每个点。

系统一次只会记录/训练/识别一个号码。这意味着我有10个(0到9)状态????还是10个分类结果??在this之类的各种网站上,我发现隐藏状态通常以“序列”的形式出现,而不是像这样的单个状态。那么在这种情况下,状态是什么?

解决方法

HMM可很好地与时态数据配合使用,但可能不适用于此问题。

您已经确定,观测 {x,y,时间戳}本质上是暂时的。因此,最好将其转换为HMM的排放,同时保留数字作为HMM的状态

  • 明确地,如果将数字(0到9)编码为隐藏状态,则对于100 x 100的“图像”,发射可以是10000个可能的像素坐标之一。
  • 该模型预测每个时间戳(在线)上的数字状态。输出是非唯一像素位置。这很麻烦,但并非不可能编码(您将拥有一个巨大的发射矩阵)。
  • 起始数字的初始状态概率可以是均匀分布(1/10)。更巧妙地,您可以调用本福德定律来估计出现在文本中的数字的频率,并相应地分配起始概率。
  • 状态转换和发射概率非常棘手。一种策略是使用 Baum-Welch (期望最大化的一种变体)算法训练HMM,以迭代方式和不可知论地估计过渡和发射矩阵的参数。训练数据将是已知数字,并且像素位置会随时间记录。

用另一种方式解决这个问题不太自然,因为缺乏时间适应性,但并非不可能。

  • 您还可以使10000个可能的状态与像素对齐,同时具有10个发射(0-9)。
  • 但是,最常用的HMM算法的运行时间与状态数呈二次关系(即,最可能有效的隐藏状态的维特比算法运行 O(n_emissions * n_states ^ 2))。您有动机将隐藏状态的数量保持在较低水平。

未经请求的建议

也许您正在寻找的是卡尔曼滤波器,这可能是一种使用这种时间序列格式开发这种在线数字识别(看起来最有效的CNN之外)的更优雅的方法。

如果您的发射是多变量(即x,y)且独立的,则您可能还需要查看结构化的感知器。在这里,我认为x,y坐标应相互关联,并应得到尊重。