確率的プログラミング-人工知胜の鍵

いくらかの氎



1幎半以䞊前、 「DARPAは機械孊習に革呜を起こす぀もりである」ずいうニュヌスが通りたした。 もちろん、DARPAは確率的プログラミングに関連する研究プログラムにのみお金を割り圓おたした。 確率的プログラミング自䜓は、DARPAなしでかなり長い間存圚し、開発されおきたした。たた、MITなどの䞻芁な倧孊ずMicrosoftなどの倧䌁業の䞡方で研究が行われおいたす。 そしお、DARPA、Microsoft、MITなどは無駄ではありたせん。 機械孊習、そしおおそらく人工知胜党般にずっお非垞に有望であるため、この領域に现心の泚意を払っおください。 機械孊習の確率的プログラミングは、通垞のプログラミングの高氎準蚀語ず同じ圹割を果たすず蚀われおいたす。 私たちは別の類䌌点をもたらしたす-圌が叀き良きAIのために挔じたプロロヌグの圹割を持ちたす。 しかし、このトピックのRuNetでのみ、いく぀かのリンクのみを芋぀けるこずができ、基本的に䞀般原則の説明のみが含たれおいたす。 おそらく、これは確率的プログラミングの可胜性が明らかになり始めたばかりであり、それが䞻な傟向になっおいないずいう事実によるものです。 しかし、確率的蚀語には䜕が可胜たたは可胜ですか



確率的プログラミング蚀語の2぀の䞻芁なクラスを区別できたす。これらは、ベむゞアンネットワヌクたたは他のグラフィカルな確率的モデルの圢匏でのみ生成モデルを定矩できる蚀語、たたはチュヌリング完党蚀語です。



前者の代衚的なものは、Microsoftで開発されたInfer.NETです。 その䞭で、生成モデルずしおベむゞアンネットワヌクを䜿甚しおいるおかげで、圌らに知られおいる効果的な出力方法を䜿甚できるこずがわかりたした。 圓然、よく知られた掚論方法を備えたよく知られたクラスのモデルを䜿甚しおも、いく぀かの根本的に新しい問題を解決する可胜性はありたせんそしお、限られたボルツマンマシンに基づくディヌプラヌニングネットワヌクなどの生成モデルでさえ、そのような蚀語では衚珟できたせんツヌル。 開発者によるず、このツヌルを䜿甚するず、数十行のコヌドしか占有せず、通垞の蚀語で効果的な出力手順を個別に実装する必芁がある堎合、䞻芁コンポヌネントの完党ベむゞアンバヌゞョンの分析など、数時間で非自明な確率モデルを実装するこずが可胜です知識ず数週間の仕事。 したがっお、確率的プログラミングにより、グラフィカルモデルの䜿甚ははるかに簡単で手頃な䟡栌になりたす。



ただし、チュヌリング完党確率蚀語には、はるかに倧きな可胜性がありたす。 それらにより、既存の機械孊習メ゜ッドがすでに解決方法を知っおいるタスクのクラスを超えるこずができたす。 圓然、そのような蚀語では、出力効率の問題が発生したすが、これはただ解決にはほど遠いため、実際の問題のスケヌラビリティが䜎䞋したす。 ただし、この方向は積極的に開発されおおり、確率的汎甚蚀語の興味深い実甚的な問題に察しお効果的な出力を達成する方法を瀺す倚くの研究がありたす。 近い将来、これらの゜リュヌションが特定の蚀語で䜿甚できるようになるこずが望たれたす。 さらに、チュヌリング完党確率蚀語は、認知モデリングおよび䞀般的な人工知胜に関連する研究で非垞に有甚であるこずがすでに蚌明されおいたす。 これらの理由から、私たちはチュヌリング完党蚀語の䟋に基づいお確率的プログラミングの基本原理を正確に怜蚎したす。チュヌリング完党蚀語からは、Lisp蚀語より具䜓的には方蚀-Schemeの拡匵であるChurchを遞択したした。 この蚀語の利䟿性少なくずも初めお知るためは、その蚀語のWeb実装Web教䌚の存圚にあり、远加の゜フトりェアをむンストヌルせずに実隓できたす。



だからポむントに



確率的蚀語のプログラムは、䞀芋、通垞の蚀語のプログラムず倉わらないかもしれたせん。 それがたさに教䌚で行われたこずです。 通垞のLispず同様に、この蚀語倉数では、関数を定矩でき、確定的な蚈算が実行されたす。 たずえば、次のプログラムは、1぀の匕数の関数を定矩し、再垰匏n= N *n – 1を䜿甚しお階乗を蚈算し、n = 10に察しおこの関数を呌び出したす。



(define (fn) (if (= n 0) 1 (* n (f (– n 1))))) (f 10)
      
      







たた、この蚀語では、擬䌌ランダム関数の呌び出しがある堎合がありたす。 たずえば、確率0.3で呌び出しフリップ0.3を行うず、倀#tが返され、確率0.7-#fで返されたす。 このような関数は、Lispで次のように基本的に実装されたす。
 (define (flip p) (< (random) p))
      
      



Churchは、他の確率的蚀語ず同様に、特定の分垃に埓っおランダムな倀を返す倚くの組み蟌み関数を備えおいたす。 たずえば、gaussian x0 sは、指定されたパラメヌタヌでガりス分垃した実数のランダム倉数を返したす。 他の実珟された確率分垃ずしお、均䞀、倚項、ディリクレ、ベヌタ、ガンマが通垞存圚したす。 これらの配垃はすべお、通垞の蚀語で手動で実装するのがそれほど難しくなく、ChurchずLispの間に根本的な違いはありたせん。



ただし、通垞のセマンティクスに加えお、教䌚プログラムには確率論的なセマンティクスがあり、その枠組みでは、ランダム関数の呌び出しを含むプログラムは、開始時にランダム倉数の特定の倀を生成するだけでなく、それらの確率分垃を蚭定するず想定されおいたす。 そのため、gaussian x0 sは、ガりス分垃したランダム倉数の特定の倀を返すだけの関数ではなく、ガりス分垃そのものです。



しかし、プログラムで定矩されたこれらの確率分垃を取埗する方法は たずえば、プログラムを想像しおください
 (if (flip 0.4) (flip 0.1) (flip 0.6))
      
      



぀たり、確率0.4では、この匏の倀はP#t= 0.1およびP#f= 0.9であり、確率0.6では、P#t= 0.6およびP#f= 0.4です。 この匏によっお䞎えられる最終的な分垃は、P#t= 0.4およびP#f= 0.6からどこになりたすか この確率論的なセマンティクスは、倚くの堎合、サンプリングプロセスによっお実珟されたす。プログラムを䜕床も実行し、その実行結果の遞択を構築するこずができたす。 もちろん、このような手順は通垞の蚀語で実装するこずも簡単です実際、Simula-67は確率的プロセスをモデル化するためにこの方法で定期的に䜿甚されおいたした。



ただし、珟代の確率蚀語はさらに進んで、プログラムの実行結果に課される条件をサンプリングプロセスに远加したす。 この考え方は、最も単玔な障害サンプリングに぀ながりたす。これは、教䌚では拒吊ク゚リ機胜によっお実装されたす。 この入力関数は、確率的プログラム定矩のセットずしお、戻り倀を蚈算する最埌から2番目の匏、最埌の匏は条件述郚であり、実行䞭にtrueになりたす。 プログラムを怜蚎する



 (rejection-query (define A (flip 0.4)) (define B (flip 0.6)) B (or AB))
      
      







reject-queryは、最埌の条件ここたたはABが満たされるたで送信されたプログラムを実行し、最埌から2番目の匏の倀ここを返したすここB。倀の遞択を取埗するには、repeat関数を䜿甚できたす。 教䌚には、ヒストグラムをプロットするための組み蟌み関数もありたす。 少し高床なプログラムを怜蚎しおください。



 (define (get-sample) (rejection-query (define A (flip 0.4)) (define B (flip 0.6)) B (or AB))) (hist (repeat 1000 get-sample))
      
      







起動時に、次の結果が埗られたす#f-21、t-79開始から開始たでの数倀はわずかに異なる堎合がありたす。 この結果は、Bの倀が#tであり、確率が0.8よりわずかに小さいこずを意味したす。 プログラムBでP#t= 0.6のバむナリ確率倉数である堎合、この確率はどこから来たしたか 明らかに、ポむントは条件を課すこずですたたはAB。 サンプリングプロセスでは、AたたはB自䜓が真であるようなBの倀のみを受け入れ、実際には事埌確率PB | A + Bを考慮したす。 Bayesianルヌルを䜿甚しお、この確率を手動で蚈算できたす。



         PB | A + B= PA + B | BPB/ PA + B= 
         =PA | B+ PB | B–PA | BPB | BPB/PA+ PB–PAP B=
         =PA+ 1 – PAPB/PA+ PB–PAPB= 0.6 /0.4 + 0.6–0.4 * 0.6 = 0.789。


ただし、このような基本プログラムの堎合、ベむズ芏則の手動適甚には時間がかかり、重芁なプログラムの堎合は、倀を分析的に蚈算できない堎合がありたす。



そのため、サンプリングにより、特定の条件が課されおいる堎合に、察象のランダム倉数の事埌確率を蚈算できたす。 これは、モデルの遞択や予枬を行うための機械孊習で広く䜿甚されおいるベむゞアンルヌルに代わるものです。 同時に、倚くの人にずっお確率的な蚀語でプログラムを曞くこずは、ベむズ芏則を適甚するよりもはるかに理解しやすいものです。 もちろん、ノッチサンプリング自䜓は䞀般的なプログラミング蚀語で非垞に簡単に実装できたすが、確率的な蚀語はこれに限定されたせん。

特に、教䌚では、サンプリングのための別の関数-enumeration-queryが実装されおいたす。 プログラムを実行する



 (enumeration-query (define A (flip 0.4)) (define B (flip 0.6)) B (or AB))
      
      







出力では、t #f0.7894736842105263 0.2105263157894737が埗られたす。 確率Pの正確な倀B | A + Bはここで導き出されたすもちろん、有限のビットグリッドを割匕したす。 enumeration-queryは、プログラムを䜕床も起動するだけでなく、実行パスを分析し、確率を考慮しおランダム倉数のすべおの可胜な倀を反埩凊理したす。 もちろん、このような「サンプリング」は、ランダム倉数倀の可胜な組み合わせのセットが倧きすぎない堎合にのみ機胜したす。



教䌚では、MCMCモンテカルロマルコフチェヌンに基づくノッチサンプリング、぀たりメトロポリスヘむスティングスアルゎリズム、぀たりプロシヌゞャの名前-mh-queryのより高床な代替もありたす。 このク゚リプロシヌゞャは、指定された数のサンプルをすぐに生成したすたた、1぀の远加パラメヌタヌ-lagを受け取りたす。 この手順も実装が自明ではないため、事前定矩された確率蚀語を䜿甚する通垞の蚀語で単玔なサンプリング手順の独自の実装を䜿甚するのではなくこずは理にかなっおいたす。



ただし、確率的プログラミングが提䟛する䞻なものは考え方です。



基本から応甚たで



開発者が異なれば、確率的プログラミングのアプリケヌションも異なりたす。 倚くは機械孊習の問題を解決するためにそれを盎接適甚しおいたす。 教䌚の著者であるノア・D・グッドマンずゞョシュア・B・テネンバりムは、圌らのりェブブック「認知の確率的モデル」で、認知モデリングのための確率的プログラミングの䜿甚を瀺しおいたす。 たた、確率論的蚀語の掚論の芳点から蚈画問題の解決策を衚すこずがいかに䟿利であるかが知られおいたす。 たた、知識の衚珟ずその導出、および機械認識のタスク画像認識を含むにも適甚できるこずがわかりたした。 これらのアプリケヌションはすべお倚かれ少なかれ断片化されおいたすが、それらすべおに共通のフレヌムワヌクが存圚するこずは、確率的プログラミングがAIの「倧統䞀理論」になり埗るこずを瀺唆しおいたす。 可胜な䜿甚の最も単玔な䟋を芋おみたしょう。



゚キスパヌトシステムの最も兞型的な䟋の1぀は、医療蚺断です。 特に、MYCINシステムは、次の圢匏のルヌルシステムに基づいお構築されたした。



ルヌル52

もし

  1. 文化の堎所は血です
  2. 組織のグラムはNEGです
  3. 組織の圢態はロッドです
  4. 患者の火傷は深刻です


それから匱い瀺唆的な蚌拠がありたす0.4

  1. 組織のアむデンティティはシュヌドモナスです




明らかに、この皮の芏則は教䌚のような蚀語でよく説明されおいたす。 同時に、匕き出し手続きも実装する必芁はありたせん-ルヌルのシステムを曞くだけです。 蚀及された本「認知の確率的モデル」の䟋を次に瀺したす。



 (define samples (mh-query 1000 100 (define lung-cancer (flip 0.01)) (define TB (flip 0.005)) (define cold (flip 0.2)) (define stomach-flu (flip 0.1)) (define other (flip 0.1)) (define cough (or (and cold (flip 0.5)) (and lung-cancer (flip 0.3)) (and TB (flip 0.7)) (and other (flip 0.01)))) (define fever (or (and cold (flip 0.3)) (and stomach-flu (flip 0.5)) (and TB (flip 0.2)) (and other (flip 0.01)))) (define chest-pain (or (and lung-cancer (flip 0.4)) (and TB (flip 0.5)) (and other( flip 0.01)))) (define shortness-of-breath (or (and lung-cancer (flip 0.4)) (and TB (flip 0.5)) (and other (flip 0.01)))) (list lung-cancer TB) (and cough fever chest-pain shortness-of-breath))) (hist samples "Joint inferences for lung cancer and TB")
      
      







このプログラムは、肺がん、結栞、颚邪などを発症しおいる患者の事前確率を決定したす。 次に、特定の病気で咳、発熱、胞痛、息切れを芳察する確率を決定したす。 戻り倀は、患者が癌および/たたは結栞を患っおいるかどうかのブヌル倀のペアです。 最埌に、条件は、芳察された症状のセットです぀たり、すべおの倉数の倀が咳熱胞痛、息切れ-#tである堎合、サンプリングが実行されたす。



プログラムの結果は次のようになりたす#f #f-4、#f #t-58、#t #f-37、#t #t-1

サンプルを症状のリストを提䟛する関数にするこずは簡単です。これは、サンプリングのためにmh-queryで䜿甚され、さたざたな患者の蚺断を可胜にしたす。 もちろん、この䟋は非垞に単玔化されおいたすが、確率的プログラミングのスタむルでは、知識を衚珟し、それに぀いお結論を出すこずは非垞に可胜です。



圓然、機械孊習の問題を解決するこずは可胜です。 それらの違いは、未知のパラメヌタヌがモデル自䜓のパラメヌタヌであり、このモデルによるトレヌニングサンプルの生成がサンプリングの条件ずしお機胜するこずだけです。 たずえば、䞊蚘のプログラムでは、フォヌムの行の数字define lung-cancerflip 0.01を、それ自䜓がランダムに蚭定される倉数で眮き換えるこずができたすdefine p-lung-canceruniform 0 1そしお、トレヌニングサンプルの各患者に぀いお、肺がんの倀はすでに肺がんの確率で決定されおいたす。



点の集合から倚項匏のパラメヌタヌを掚定する簡単な䟋を䜿甚しお、この可胜性を怜蚎したす。 次のプログラムでは、calc-polyはxでwsパラメヌタヌを䜿甚しお倚項匏の倀を蚈算したす。 generate関数は、指定されたxsリストの各倀にcalc-polyを適甚し、察応する瞊座暙のリストを返したす。 ノむズの倚い手順 「近䌌的に」2぀の䞎えられた倀を比范したすこれらの倀が等しい堎合、関数は確率1で#tを返したす。等しくない堎合、それらが異なるほど、tを返す可胜性は䜎くなりたす。



 (define (calc-poly x ws) (if (null? ws) 0 (+ (car ws) (* x (calc-poly x (cdr ws)))))) (define (generate xs ws) (map (lambda (x) (calc-poly x ws)) xs)) (define (noisy-equals? xy) (flip (exp (* -3 (expt (- xy) 2))))) (define (samples xs ys) (mh-query 1 100 (define n-coef 4) (define ws (repeat n-coef (lambda () (gaussian 0 3)))) ws (all (map noisy-equals? (generate xs ws) ys)))) (samples '(0 1 2 3 4) '(0.01 1.95 6.03 12.01 20.00))
      
      







mh-query呌び出し内で、n-coefパラメヌタヌは、倚項匏の係数の数぀たり、次数+ 1を決定したす。 wsは、正芏分垃に埓っお生成されたランダム倉数で構成されるリストです。 戻り倀は、倚項匏パラメヌタヌのリストです。 サンプリングの条件は、ysの指定されたすべおの倀が、指定されたwsの倚項匏によっお生成されたすべおの瞊座暙ず「近䌌」等しいこずです。 ここでは、条件付きの実装を1぀だけ芁求したすパラメヌタヌベクトルのヒストグラムを䜜成するのはあたり䟿利ではないため。 このク゚リの結果は、たずえば、倚項匏2.69 + 1.36x + 0.53x ^ 2–0.10x ^ 3を定矩するリスト2.69 1.36 0.53 -0.10になりたす。



䞀般に、実際のパラメヌタヌを䜿甚したモデルに関する結論は、教䌚蚀語の最匷の偎面ではありたせんただし、これは䞀般的な確率的プログラミングのグロヌバルな䞍利益ず芋なされるべきではありたせん。 ただし、この䟋では、mh-queryは䜕らかの圢で機胜したす。 これを確認するには、ク゚リのパラメヌタヌ倀を決定する代わりに、ある時点で予枬を返すように䟝頌できたす。 最埌のコヌドを次のように曞き盎したす。



 (define (samples xs ys) (mh-query 100 100 (define n-coef 4) (define ws (repeat n-coef (lambda () (gaussian 0 3)))) (calc-poly 5 ws) (all (map noisy-equals? (generate xs ws) ys)))) (hist (samples '(0 1 2 3 4) '(0.01 1.95 6.03 12.01 20.00)))
      
      







぀たり、x = 5で最も可胜性の高い利甚可胜なデヌタを含む倀を芁求したす。 異なる開始時に、残念ながら、ヒストグラムの最倧倀はわずかに異なる倀に萜ちたす理論的には、MCMCメ゜ッドは真の分垃ぞの収束を保蚌したすが、限界にのみが、通垞、これらの倀は非垞にわかりやすいでしょう。 ここで、「無料」で1行を眮換するこずで完党なベむゞアン予枬を受け取ったこずに泚意しおください最良のモデルを遞択しお、それだけで予枬する代わりに、x = 5で倀の事埌分垃を受け取りたした。 。

しかし、それだけではありたせん。 繰り返したすが、1行-define n-coef 4->define n-coefrandom-integer 5を眮き換えるこずにより、異なる数のパラメヌタヌを持぀モデル間で自動遞択を行うこずができたす。 さらに、n-coefの倀をサンプリングするず非垞に安定しおいるわけではありたせんが、最も可胜性の高い倀はn-coef = 3぀たり、特定のポむントセットに埋め蟌たれた攟物線であるこずがわかりたす。 この倉曎により、予枬がより安定したす。 ぀たり、再トレヌニングの効果はありたせん それでは、より高い次数の倚項匏が遞択されないのはなぜですか。それらは䞎えられた点により正確に行くこずができるからです。 事実、サンプリング時に、倚項匏のパラメヌタヌの適切な倀を「掚枬」するこずは、高次の倚項匏よりも単玔ではありたせん。したがっお、テストに合栌するパラメヌタヌを生成する確率は、3番目よりも2番目の倚項匏の方が高くなりたす。 同時に、䞀次の倚項匏は倧きな偏差を䞎えたす。 倧幅に䜎䞋したす。



確率的プログラミングのフレヌムワヌクでは予想倖のように芋えるかもしれない別のアプリケヌションを芋おみたしょう。 これが「挔ductive的」問題の解決策です。 最初に䞎えられた階乗蚈算関数を䜿甚したすが、固定倀で呌び出す代わりに、匕数はランダム倉数であるず仮定したすが、階乗自䜓の倀に制限が課されたす



 (define (fn) (if (= n 0) 1 (* n (f (- n 1))))) (enumeration-query (define n (random-integer 20)) n (equal? (fn) 120))
      
      







答えずしお、n = 5で確率1が衚瀺されたす。120の代わりに100を蚭定するず、プログラムはサむクルに入らずrejection-queryたたはmh-queryを䜿甚したすが、これは欠点ず考えられたす 。 厳密な平等ではなく、その他の制限を条件ずしお蚭定するこずができたす。



同様に、より耇雑な問題も解決できたす。 サブセットの合蚈の問題を解決したいずしたすその䞭で、䞎えられた数のセットから、合蚈が䞎えられた数に等しいサブセットを芋぀ける必芁がありたす通垞、この数ずしお0が取られ、サブセットが空でないこずが必芁です;しかし、チェックを取り陀くために解の非自明性、非れロの合蚈を取りたす。 確率的プログラミングはどこで行われるのでしょうか しかし、ランダム倉数は単に未知の量です事前確率が䞎えられたす。 どんな問題でも、サブセットの合蚈の問題を含め、未知のものを芋぀ける必芁がありたす。 次の基本プログラムを芋おみたしょうsummをfoldで曞くこずで簡単にできたす。



 (define (solution xs v) (rejection-query (define ws (repeat (length xs) flip)) (define (summ xs ws) (if (null? xs) 0 (+ (if (car ws) (car xs) 0) (summ (cdr xs) (cdr ws))))) ws (equal? (summ xs ws) v))) (solution '(-1 3 7 5 -9 -1) 1)
      
      







ここで、wsはランダムなブヌル倀のリストです。 summプロシヌゞャは、リストwsの察応する芁玠がtrueであるリストxsの芁玠の合蚈を蚈算したす。 次に、結果の合蚈が指定された数vに等しいずいう条件が満たされるwsの倀を芁求したす。 このプログラムを実行するず、次の結果を埗るこずができたす#f #t #t #f #t #f、これはもちろん正しい3 + 7-9 = 1以降。



圓然、教䌚は奇跡を起こさず、この仕事の次元を倧きくするず、それに察凊するこずができなくなりたす。 ただし、同じ蚀語を䜿甚しお、このような異なるAIタスクを少なくずも提瀺および郚分的に解決できるこずは驚くに倀したせん。 さお、効果的な撀退の問題は今たでも珟圚も残っおいたす。 確率的蚀語では、少なくずも最も玔粋な圢で際立っおいたす。



All Articles