BLUE*アルゴリズム
                  西尾泰和




13年4月14日日曜日
論文紹介

       • Marc Sebban, et. al. “BLUE*: a Blue-Fringe
          Procedure for Learning DFA with Noisy Data”
       • http://labh-curien.univ-st-etienne.fr/~janodet/
          pub/tjs04.pdf
       • ノイズを含む信号列から状態遷移図を推定
          →それが何の役に立つの?



13年4月14日日曜日
論文紹介
   • Thomas Arts and Simon Thompson, “From Test Cases
      to FSMs: Augmented Test-driven Development and
      Property Inference”
   • http://www.cs.kent.ac.uk/pubs/2010/3041/content.pdf
   • ユニットテストの結果からシステム内部の状態遷
      移図を推定し、シナリオテストの自動生成&テス
      トの不足の指摘をする


13年4月14日日曜日
FSM?DFA?

        • FSM: Finite-State Machine: 有限状態機械
        • DFA: Deterministic Finite Automaton:
              決定性有限オートマトン

        • 前のスライドでは「状態遷移図」と呼んだ

13年4月14日日曜日
DFAの推定

         • 入力:
              受理される信号列の集合
              受理されない信号列の集合

         • 出力:
              DFA



13年4月14日日曜日
 
BLUE*の流れ




         • まずイメージを共有するために
              BLUE*の流れを追って見る




13年4月14日日曜日
 
BLUE*の流れ


                     入力データ


         • e_plus = ['ac', 'abc', 'abbc']
         • e_minus = ['b', 'c']



13年4月14日日曜日
 
BLUE*の流れ


     PTA(Prefix Tree Acceptor)




                 • e_plus = ['ac', 'abc', 'abbc']
                 • e_minus = ['b', 'c']
13年4月14日日曜日
 
BLUE*の流れ




              端から徐々に
              赤い部分が
               広がる




13年4月14日日曜日
 
BLUE*の流れ




              2と3をマージ!




13年4月14日日曜日
 
BLUE*の流れ




              2と5をマージ!



              2と6をマージ!



              できあがり!

13年4月14日日曜日
 
DFAの推定


                  既存手法

         • RPNI(Oncina&Garcia, 1992)
         • EDSM(Lang et al., 1998)
         • 多項式時間でDFAを構築できる
         • 入力列にノイズが入ることを想定してい
              ない→むりやりフィット→過学習



13年4月14日日曜日
 
DFAの推定


                      RPNI*
         • Sebban & Janodet, 2003
         • RPNIに確率を持ち込む
         • 分類を間違える確率が状態のマージの前
              (p1)と後(p2)で変わらないことを検定

         • p1, p2の真の値はわからない。
              教師データから推定: p1^, p2^


13年4月14日日曜日
 
DFAの推定: RPNI*


              正規分布で近似
    • p2^ - p1^の分布を正規分布で近似
    • N(p2 - p1, sqrt(2 * p^ q^ / N))
      where p^ = (p1^ + p2^) / 2, q^ = 1 - p^
      Nは教師データの総数

    • T = p2^ - p1^がこの分布の(1 - α)-percentile Zαを
      超えるなら、危険率αで仮説p1 = p2は棄却される


13年4月14日日曜日
 
DFAの推定: RPNI*


                RPNI*の改良
    • RPNI*はRPNIよりもノイズのあるデータからの学
      習がよくなった。

    • しかし、大きなDFAを少ないデータから学習する
      ことは不得手。

    • そういうデータでの最近の勝者がとった戦略:
      ・マージを可能な限り遅延させる
      ・複数の選択肢の中で一番よいものを行う
      →これを真似してみよう!
13年4月14日日曜日
 
DFAの推定: BLUE*


     PTA(Prefix Tree Acceptor)




                 • e_plus = ['ac', 'abc', 'abbc']
                 • e_minus = ['b', 'c']
13年4月14日日曜日
 
DFAの推定: BLUE*


              BLUE*の1ステップ




    • promotion: blueをredに変える   どちらかをやる
    • merging: blueをredに合成する
13年4月14日日曜日
 
DFAの推定: BLUE*


              BLUE*の1ステップ
    • すべてのblueとredの組み合わせについて
        「マージ可能かどうか」を判断(前述の検定)

    • mergeできないblueがあるならその中から
        「一番良いpromotion」を行う

    • なければ「一番良いマージ」を行う
                「一番良い」の定義は?

13年4月14日日曜日
一番よいpromotion

     • blueは他のどのredとmergeしても
         有意にエラー率が増える場合に
         「mergeできない」と考えてpromoteされる。

     • しかし「本当はmergeすべきなのにされな
         い」が起こりうる(第一種の過誤)

     • この確率が最も小さいものを選ぶ
13年4月14日日曜日
一番よいmerging
         • 「本当はmergeすべきでないのにする」
              確率が最も小さいもの(第二種の過誤)

         • P(マージ | p2 - p1 > 0)
         • これを直接計算するのは大変、そこで
              δ > 0を導入して P(マージ | p2 - p1 = δ)
              を計算する。Pを最小とするようなred-
              blue対はδに関係なく決まる

13年4月14日日曜日
tweak

         • この尺度でマージ対象を選ぶと頂点数の
              あまり減らないマージが多くなる傾向

         • 安全だが、面白くない
         • そこで「マージによって減る頂点の数」
              で割ったものを代わりに使う

                それをやっても結果がδに影響されないとは言い切れない…
                                            
13年4月14日日曜日
 
abを負例に追加


                          2と3のマージ
                       →abはマージ前は
                         非受理だったが
                         マージ後は受理


                      ↓abは教師データに
                         含まれていない
              • e_plus = ['ac', 'abc', 'abbc']
              • e_minus = ['b', 'c']
13年4月14日日曜日
 
abを負例に追加


              abを負例に追加


                     2,3がマージ
                    されなくなる




13年4月14日日曜日
 
abを負例に追加




                            1と5をマージ




                            4と6がマージ



     注: promotionの図を省略しているため青同士でマージされたように見える
                                            
13年4月14日日曜日
シナリオテストとの対応
               • e_plus = ['ac', 'abc', 'abbc']
               • e_minus = ['b', 'c']
      • 例えば
          a: ファイルオープン b: 書き込み c: クローズ
          と読み替えてみる

      • e_minus = ['b', 'c'] # いきなり書き込みやク
          ローズをしたらエラー、というテスト

13年4月14日日曜日
「開いて書き込んで、クローズしない」は
              エラーではない、という解釈


                正しい?正しくない?
               それは人間が決めること


              正しくない→テストケースを追加
13年4月14日日曜日
形式的仕様記述との比較

              形式的仕様記述    BLUE*

モデルの表現力         高い       FSMだけ
                人間が     テストケース
    記述コスト
               全部記述     から学習

    学習コスト       高い        低い

13年4月14日日曜日

BLUE*アルゴリズム

  • 1.
    BLUE*アルゴリズム 西尾泰和 13年4月14日日曜日
  • 2.
    論文紹介 • Marc Sebban, et. al. “BLUE*: a Blue-Fringe Procedure for Learning DFA with Noisy Data” • http://labh-curien.univ-st-etienne.fr/~janodet/ pub/tjs04.pdf • ノイズを含む信号列から状態遷移図を推定 →それが何の役に立つの? 13年4月14日日曜日
  • 3.
    論文紹介 • Thomas Arts and Simon Thompson, “From Test Cases to FSMs: Augmented Test-driven Development and Property Inference” • http://www.cs.kent.ac.uk/pubs/2010/3041/content.pdf • ユニットテストの結果からシステム内部の状態遷 移図を推定し、シナリオテストの自動生成&テス トの不足の指摘をする 13年4月14日日曜日
  • 4.
    FSM?DFA? • FSM: Finite-State Machine: 有限状態機械 • DFA: Deterministic Finite Automaton: 決定性有限オートマトン • 前のスライドでは「状態遷移図」と呼んだ 13年4月14日日曜日
  • 5.
    DFAの推定 • 入力: 受理される信号列の集合 受理されない信号列の集合 • 出力: DFA 13年4月14日日曜日
  • 6.
      BLUE*の流れ • まずイメージを共有するために BLUE*の流れを追って見る 13年4月14日日曜日
  • 7.
      BLUE*の流れ 入力データ • e_plus = ['ac', 'abc', 'abbc'] • e_minus = ['b', 'c'] 13年4月14日日曜日
  • 8.
      BLUE*の流れ PTA(Prefix Tree Acceptor) • e_plus = ['ac', 'abc', 'abbc'] • e_minus = ['b', 'c'] 13年4月14日日曜日
  • 9.
      BLUE*の流れ 端から徐々に 赤い部分が 広がる 13年4月14日日曜日
  • 10.
      BLUE*の流れ 2と3をマージ! 13年4月14日日曜日
  • 11.
      BLUE*の流れ 2と5をマージ! 2と6をマージ! できあがり! 13年4月14日日曜日
  • 12.
      DFAの推定 既存手法 • RPNI(Oncina&Garcia, 1992) • EDSM(Lang et al., 1998) • 多項式時間でDFAを構築できる • 入力列にノイズが入ることを想定してい ない→むりやりフィット→過学習 13年4月14日日曜日
  • 13.
      DFAの推定 RPNI* • Sebban & Janodet, 2003 • RPNIに確率を持ち込む • 分類を間違える確率が状態のマージの前 (p1)と後(p2)で変わらないことを検定 • p1, p2の真の値はわからない。 教師データから推定: p1^, p2^ 13年4月14日日曜日
  • 14.
      DFAの推定: RPNI* 正規分布で近似 • p2^ - p1^の分布を正規分布で近似 • N(p2 - p1, sqrt(2 * p^ q^ / N)) where p^ = (p1^ + p2^) / 2, q^ = 1 - p^ Nは教師データの総数 • T = p2^ - p1^がこの分布の(1 - α)-percentile Zαを 超えるなら、危険率αで仮説p1 = p2は棄却される 13年4月14日日曜日
  • 15.
      DFAの推定: RPNI* RPNI*の改良 • RPNI*はRPNIよりもノイズのあるデータからの学 習がよくなった。 • しかし、大きなDFAを少ないデータから学習する ことは不得手。 • そういうデータでの最近の勝者がとった戦略: ・マージを可能な限り遅延させる ・複数の選択肢の中で一番よいものを行う →これを真似してみよう! 13年4月14日日曜日
  • 16.
      DFAの推定: BLUE* PTA(Prefix Tree Acceptor) • e_plus = ['ac', 'abc', 'abbc'] • e_minus = ['b', 'c'] 13年4月14日日曜日
  • 17.
      DFAの推定: BLUE* BLUE*の1ステップ • promotion: blueをredに変える どちらかをやる • merging: blueをredに合成する 13年4月14日日曜日
  • 18.
      DFAの推定: BLUE* BLUE*の1ステップ • すべてのblueとredの組み合わせについて 「マージ可能かどうか」を判断(前述の検定) • mergeできないblueがあるならその中から 「一番良いpromotion」を行う • なければ「一番良いマージ」を行う 「一番良い」の定義は? 13年4月14日日曜日
  • 19.
    一番よいpromotion • blueは他のどのredとmergeしても 有意にエラー率が増える場合に 「mergeできない」と考えてpromoteされる。 • しかし「本当はmergeすべきなのにされな い」が起こりうる(第一種の過誤) • この確率が最も小さいものを選ぶ 13年4月14日日曜日
  • 20.
    一番よいmerging • 「本当はmergeすべきでないのにする」 確率が最も小さいもの(第二種の過誤) • P(マージ | p2 - p1 > 0) • これを直接計算するのは大変、そこで δ > 0を導入して P(マージ | p2 - p1 = δ) を計算する。Pを最小とするようなred- blue対はδに関係なく決まる 13年4月14日日曜日
  • 21.
    tweak • この尺度でマージ対象を選ぶと頂点数の あまり減らないマージが多くなる傾向 • 安全だが、面白くない • そこで「マージによって減る頂点の数」 で割ったものを代わりに使う それをやっても結果がδに影響されないとは言い切れない…   13年4月14日日曜日
  • 22.
      abを負例に追加 2と3のマージ →abはマージ前は 非受理だったが マージ後は受理 ↓abは教師データに 含まれていない • e_plus = ['ac', 'abc', 'abbc'] • e_minus = ['b', 'c'] 13年4月14日日曜日
  • 23.
      abを負例に追加 abを負例に追加 2,3がマージ されなくなる 13年4月14日日曜日
  • 24.
      abを負例に追加 1と5をマージ 4と6がマージ 注: promotionの図を省略しているため青同士でマージされたように見える   13年4月14日日曜日
  • 25.
    シナリオテストとの対応 • e_plus = ['ac', 'abc', 'abbc'] • e_minus = ['b', 'c'] • 例えば a: ファイルオープン b: 書き込み c: クローズ と読み替えてみる • e_minus = ['b', 'c'] # いきなり書き込みやク ローズをしたらエラー、というテスト 13年4月14日日曜日
  • 26.
    「開いて書き込んで、クローズしない」は エラーではない、という解釈 正しい?正しくない? それは人間が決めること 正しくない→テストケースを追加 13年4月14日日曜日
  • 27.
    形式的仕様記述との比較 形式的仕様記述 BLUE* モデルの表現力 高い FSMだけ 人間が テストケース 記述コスト 全部記述 から学習 学習コスト 高い 低い 13年4月14日日曜日