Dana Angluin用于学习常规集的算法是否有改进


33

Dana Angluin在1987年的开创性论文中提出了一种多项式时间算法,用于从成员资格查询和理论查询(拟议DFA的反例)中学习DFA。

她表明,如果您尝试学习具有个状态的最小DFA ,而最大的countexample的长度为m,那么您需要进行O (m n 2)个成员资格查询,最多需要进行n − 1个理论查询。nmO(mn2)n−1

学习常规集所需的查询数量是否有了重大改进?


参考文献和相关问题


希望@DominikFreydenberger在将来的某个时候掉队。他会知道。
— 拉斐尔

2
我怀疑@LevReyzin也知道答案……这就是为什么我最初考虑在cstheory上提问,但是我想我应该帮助发展这个新网站。
— Artem Kaznatcheev 2012年

不能回答这个问题,但可能仍会有所帮助:[ citeulike.org/user/erelsegal-halevi/article/9275508学习常规语言的通用内核]
— Erel Segal-Halevi 2012年

感谢您提供@Erel链接,但我不明白它的关系。Kontorovich的通用内核无法有效计算,并且学习模型没有反例。
— Artem Kaznatcheev

Answers:


15

在 对cstheory.SE的回答中,列夫·雷津(Lev Reyzin)指导我了解罗伯特· 沙皮尔(Robert Schapire)的论点,该论点改进了5.4.5节中对成员资格查询的限制。反例查询的数量保持不变。在反例查询之后,Schapire使用的算法有所不同。O(n2+nlog⁡m)


改进草图

在最高级别,Schapire力从Angluin的算法有额外的条件,对于一个封闭的(小号,ē ,牛逼)和各s ^ 1,S ^ 2 ∈ 小号,如果小号1 ≠ 小号2则[R o w (s 1)≠ r o w (s 2)。这保证了| S |(S,E,T)(S,E,T)s1,s2∈Ss1≠s2row(s1)≠row(s2)也使得一致性Angluin算法的性能容易的去满足。为了确保这一点,他必须以不同的方式处理反例的结果。|S|≤n

给定一个反,Angluin简单地添加ž及其所有前缀小号。Schapire通过向E添加单个元素e来做一些更细微的事情。在Angluin的意义上,这个新的e将使(S ,E ,T )不被关闭,并且通过在S上引入至少一个新字符串,同时保持所有行都不同来进行更新以使其闭合。e的条件是:zzSeEe(S,E,T)Se

∃s,s′∈S,a∈Σs.trow(s)=row(s′a)ando(δ(q0,se))≠o(δ(q0,s′ae))

其中是输出函数,q 0是初始状态,δ是真正的“未知” DFA的更新规则。。换句话说,ē必须作为一个见证未来区分小号从小号'一个。oq0δess′a

为了弄清楚这个从ž我们做一个二进制搜索找出一个子[R 我这样ž = p 我[R 我和0 ≤ | p 我| = 我< | z | 使得我们的被推测机器的行为基于一个输入字符而有所不同。更具体地说,我们让小号我是对应于状态字符串按照我们猜想机达到p 我。我们使用二进制搜索(这是日志mezriz=piri0≤|pi|=i<|z|sipilog⁡m来找到一个使得o (δ (q 0,s k r k))≠ o (δ (q 0,s k + 1 r k + 1)。换句话说,r k + 1区分两个指出我们猜想的机器发现等,因而满足该条件Ë,所以我们把它添加到Ë。ko(δ(q0,skrk))≠o(δ(q0,sk+1rk+1)rk+1eE


5

我不知道我的答案是否仍然有用。最近,已经描述了一种新算法的实现,该算法称为“观察包”,或者在某些情况下由Falk Howar实现。该算法类似于L *,但使用Rivest-Shapire或其他方法(请参见Steffen和Isberner)进行句柄反例分解;它使用一种数据结构,一个鉴别树(一个二叉树)来有效地进行“筛选”,即插入一个新状态的A转换(其中A是字母的每个符号),直到没有封闭为止。该算法有两个版本:根据是否将分解中建立的后缀添加到每个组件中(在该组件中添加后缀的比例),OneGlobally和OneLocally(算法的比率是,组件中的所有前缀都等于短前缀,并根据找到的后缀表示目标中的相同状态稍后,在一个新的反例中,发现了一个新的后缀,该后缀区分出同一组件的至少2个前缀(这导致该组件分成两个组件)。使用OneLocally,成员资格查询要少得多,但是当目标DFA较大时,等效查询的数量会急剧增加。而是,OneGlobally的成员资格查询数始终小于L *(但大于OneLocally),并且等效查询的数量与L *类似 后来有了一个新的反例,发现了一个新后缀,该后缀可以区分同一组件的至少2个前缀。这导致该组件分成两个组件)。使用OneLocally,成员资格查询要少得多,但是当目标DFA较大时,等效查询的数量会急剧增加。而是,OneGlobally的成员资格查询数始终小于L *(但大于OneLocally),并且等效查询的数量与L *类似 后来有了一个新的反例,发现了一个新后缀,该后缀可以区分同一组件的至少2个前缀。这导致该组件分成两个组件)。使用OneLocally,成员资格查询要少得多,但是当目标DFA较大时,等效查询的数量会急剧增加。而是,OneGlobally的成员资格查询数始终小于L *(但大于OneLocally),并且等效查询的数量与L *类似

我知道也存在另一种算法:TTT算法也比观察包更好,但我对此并不了解.TTT算法应该是最新技术


感谢您的回答!您有关于Howar算法和TTT的论文参考吗?
— Artem Kaznatcheev

这个用于观察包的链接Howar 和这个用于TTT算法的链接TTT 您可以在LearLib中找到实现(观察包在那儿称为歧视树)
— Umbert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.