最近研究模型学习,其中最经典的算法应该是Angluins L*算法,发现中文的资料实在太少,所以弄一个简单点的教程来说明这个算法。
这个算法的目标:构造DFA或者Mealy automate,使之同一个Black system吻合。这个算法假定了一个“teacher”的角色,他是先知,知道这
个黑盒SUL的一切。在构造过程中我们可以问老师二种类型的问题。一是称为membership query成员查询, 对于构造Mealy automate来说就是输入
某个字串,SUL输出什么?(对于DFA来说,对应于回答这个字串是否被SUL接受,如果接受输出1,否则为0);第二种称为equivalence query(等
价查询),即目前构造的DFA或者Mealy自动机和SUL是否等价,如果等价,则Teacher回答yes,否则也返回一个反例字串,来说明他们的不同。
说这个算法前,我先说说我对“Teacher”的理解,默认构造Mealy自动机,举例:一台电视机,把他当做SUL,则你的按键操作(输入)都能得
到一个可见的显示效果(输出),所以成员查询是很简单的就能实现;而对于等价查询,只要穷举所有的按键操作的组合,如果都符合,则等价,回答
yes,否则就把对应的不同的按键组合返回出去就可以了。所以Teacher这个角色是可行的。【这个算法唯一值得商榷的地方就是他的普适性,这个黑
盒子首先要能用DFA或者mealy自动机来表示】
为了清晰的说明算法精髓,我先介绍一下几个概念,
一是OT表(
observation table),OT表是算法的中间产物,最后算法生成的OT表将直接对
应于SUL。OT表行坐标row分二大区域,一个是构造的Mealy自动机的状态S区域,另外一个是SUI,这里的I是指输入基本字的集合(即电视机的单个按
键),我们称其为辅助行区域
SUI;而OT表的纵坐标为E,一般就是指基本字的集合,一般为一个字串的后缀;而OT表的内容就是由行r和列e加起来的
字串w所对应的SUL的输出T(w),这个通过成员查询可以很方便的求出。
二是关于算法中的二个特别重要的性质,所谓一致性和闭包性,所谓闭包性形
象的理解就是辅助行区域T(
SUI)在T(S)中,否则就在S域中添加
SUI中不包含在原S域中对应的行标签及其所有前缀;所谓一致性就是指如果S域中二个
行标签如果对应的值相同,则其加入同一个基本字a作为后缀,其值也要相同,否则为了区别这两个状态,需要在E中添加这aUe。所谓
Angluins L*算
法就是不断的通过询问的方式来更新OT表,使其得到一致性和闭包性并被SUL接受为止。下图为
Angluins L*算法的主体框架图:【初始化的时候,S
为空,辅助表为
SUI,
E一般取I即输入集合】
下面用一个例子来说算法的运行过程:第一步初始化表OT,如下图,其中的A、B为通过成员查询SUL的输出
然后检查这个OT表的一致性和闭包性,明显都满足,现在就要构造对应的模型了M(S,E,T),具体的构造过程很简单,S域的每一个行标签对应为一个状
态【辅助区域可以完全不看了】,然后直接看对应的E区域的列标签(即基本字)所得到的值(即该基本字所对应的输出)
构造好了后,就问Teacher,我这个对否,结果Teacher返回说,不对,字串bba,SUL输出是C,而你输出是A;这个时候,算法就将
bba这个字串
及其所有前缀添加进OT表的S域,当然同时要需要更新辅助域,规则就是SUI即可然后重新经过成员查询得到OT表的值,如下图所示:
这个时候明显可以看到,T(SUI)都包含于T(S),所以是闭包的,但是检查一致性的时候发现,在S域T(
ε)和T(b)都一样是A B,可是其加上同一个后缀
b,这个时候T(b)和T(bb)不同,一个是A B,一个是C B,所以不满足一致性,则需要在E中添加bUe即ba【??按照定义,应该还有bb呀?我的理解是
一次只能添加一个,可以是ba,也可以是bb】,然后通过成员查询,得到OT表中所有的值:
明显可以看出该OT表即一致又闭包,这个时候就可以生成模型M(S E T)了,构造方法前面说明了,如下图【其中bba和b可以合成一个状态q1】
通过询问Teacher,M和SUL是否等价,得到yes回答,则将上图作为SUL的等价模型。
今天简单的介绍一下这个针对黑盒系统的模型学习的算法,可以说这个算法是模型学习的老祖宗,许多后面的算法都是在这个算法的基础上改进优化
而来。