neurális programindukció és programszintézisberenyi/lectures2018/nnprogind.pdf · program...
TRANSCRIPT
GPU Lab
D. Berényi
Modern Tudományos ProgramozásWigner FK
20 November 2018
Neurális programindukció és programszintézis
GPU Lab
D. Berényi
Motiváció
A neurális hálózatok alpajaiknál fogva nem képesek arra, hogy egzakt szabályokat figyelembe vegyenek
Ellenben nagyon jól tanulnak példákból.
Kérdés, lehet-e mégis olyan rendszerek építőköveikénthasználni őket, ahol vannak jól definiált szabályszerűségek, amiket tiszteletben kell tartani, ugyanakkor szükség van a tanulási és flexibilitási tulajdonságaikra.
GPU Lab
D. Berényi
Motiváció
Konkrét példa:
Szeretnénk programokat előállítani.
A programkód egy ASCII szövegfájl, ha elég sok létező kódon betanítunk pl.
egy RNN-t, akkor generálhatunk új kódokat
Példa: link
Kérdés:
Ki garantálja, hogy a szöveg értelmes kód?
Hogy lefordul-e?
Hogy értelmes dolgot csinál-e?
GPU Lab
D. Berényi
Motiváció
Példa: linkBetanítunk egy hálót a Linux forráskódján (474 MB)
Kérdés:Ki garantálja, hogy a szöveg értelmes kód?
Hogy lefordul-e?
Hogy értelmes dolgot csinál-e?
/** Increment the size file of the new incorrect UI_FILTER group information* of the size generatively.*/static int indicate_policy(void){int error;if (fd == MARN_EPT) {if (ss->segment < mem_total)unblock_graph_and_set_blocked();
elseret = 1;
goto bail;}for (i = 0; i < blocks; i++) {seq = buf[i++];bpf = bd->bd.next + i * search;if (fd) { current = blocked; }
}rw->name = "Getjbbregs";regs->new = blocks[(BPF_STATS << info->historidac)];return segtable;
}
GPU Lab
D. Berényi
Motiváció
Mit nyernénk, ha lenne egy ilyen rendszer?
Sokszor könnyebb egy programra elvárt működési példákat és megkötéseket mondani, mint teljes specifikációt
Ha ez működik, akkor akár a programírást is automatizálni lehet...
GPU Lab
D. Berényi
Különbségek a Deep Learninghez képest
Az egyik legfontosabb eltérés a Deep Learninghez képest,hogy itt az állapot tér nem folytonos.
Ennek messzemenő következményei vannak:az általánosítás nem simán „interpoláció”
Nyelvfeldolgozásban működik a beágyazás, de ilyen esetekben kevésbé:túl kicsi a probléma dimenziója.A konnekcionista megközelítés nem működik.
Sok szimbolikus feladat általában nem differenciálhatóak,a tanítás is nehéz...
GPU Lab
D. Berényi
Fogalmak
Programszintézis során konkrétan előállítunk egy programot egy adott nyelven
Programindukció során a program implicit marad a rendszerben, ami előállítja, csak futtatni tudjuk különböző bemenetekre, és kapunk kimeneteket
GPU Lab
D. Berényi
Fogalmak
Programszintézis:
• Ezt nehezebb megcsinálni, de a végeredmény könnyebben interpretálható, vizsgálható
Programindukció:
• Ezt könnyebb megvalósítani, de nehezen vizsgálható, pl. helyesség, garanciák szempontjából
GPU Lab
D. Berényi
Szimbolikus megközelítés
A nyelv építőkockáiból komponálunk össze programokat, és nézzük, hogy az elvárt bemenet-kimenet párokat és egyéb kényszereket teljesítik-e.
Legtöbbször valamilyen leszűkített
program téren teljes keresést hajtanak
végre.
Pl.: SMT megoldók
(Satisfiability Modulo Theories)amik alatt nyelv specifikus megoldók (pl. SAT solverek,
lineáris aritmetiksi solverek, stb. dolgoznak)
GPU Lab
D. Berényi
Rekurrens megközelítés
A rekurrens hálózatokat sok féle képpen próbálták alkalmazni ezekre a problémákra.
Az elképzelés alapja, hogy a belső memóriában felépíthet a modell akár hosszú távú összefüggéseket is a feladatról.
GPU Lab
D. Berényi
Rekurrens megközelítés
Kérdés: hogy igazodik el a rendszer, hogy mikor, mi a fontos, releváns információ a memóriából?
„Attention” (link):a bemenet, memória melyik része mennyire fontos az adott kimenet előállításához, ezt lépésről lépésre építi fel (2 féle módszer).
GPU Lab
D. Berényi
Rekurrens megközelítés
Kérdés: hogy igazodik el a rendszer, hogy mikor, mi a fontos, releváns információ a memóriából?
Ptr-Net megközelítés (link):a bemenet elemei felett egy valószínűségi eloszlást vesz fel a rendszer, miután a teljes bemenetet látta.
GPU Lab
D. Berényi
Rekurrens megközelítés
Kérdés: hogy igazodik el a rendszer, hogy mikor, mi a fontos, releváns információ a memóriából?
Több megközelítés is külső memória használatát vizsgálja
• Neural Turing Machine (link)
• Differentiable Neural Computer (link)
A közös bennük, hogy az RNN csak vezérlő, írási-olvasási utasításokat ad a memória felé, de nehezen taníthatóak.
Igazából ezek Turing Teljes modellek.
GPU Lab
D. Berényi
Rekurrens megközelítés
Mindkettő csak kb. ugyan akkora méretű adatok feldolgozására működik, mint amennyi a bemenet volt (sokkal nagyobbra nem), azaz limitált az általánosítás.
GPU Lab
D. Berényi
Rekurrens megközelítés
• Neural Programmer (link)
• Neural RAM (link)
Az RNN nem csak írás-olvasási parancsokat ad a memóriának, hanem választhat (softmax, tanulható súlyokkal) néhány alapművelet közül, amelyeket komponálhat, akár sokszor is.
Az RNN maga döntheti el,mikor állítsa le a futást,a bemenet méretétől függetlenül.
A programlogika az RNN belső állapotábanvan reprezentálva
GPU Lab
D. Berényi
Rekurrens megközelítés
• Neural Programmer-Interpreter (link)
Itt már függvény hívások is léteznek (ilyenkor az RNN vezérlő belső állapota nullázódik), a hívó oldalról kap bemenetet. Visszatéréskor az előző belső állapot visszaállítódik.
Itt információ beágyazása (reprezentációja)az egyes függvények szintjén is történik, nem csak az RNN vezérlő belső állapotában.
Hátránya, hogy a tanításhoz teljes stack-traceket használtak, amik ritkán állnak rendelkezésre.
GPU Lab
D. Berényi
Rekurrens megközelítés
• Neural Program Lattices (link)
Az előző nehézkes tanítását próbálja ellensúlyozni: ennek a tanításához nem kellenek stack-trace-k.
Itt a tanítás elemi utasítások sorozata,és a rendszer maga tanulja megfüggvényekbe szervezni őket.
Ezzel az NPI szintje elérhető.
GPU Lab
D. Berényi
Rekurrens megközelítés
Milyen feladatokat tudnak ezek a rendszerek megoldani?
• Alap aritmetikapl.: összeadás
• Lista műveletek [kis elemszámra ~<50]pl.: másolás, permutálás, megfordítás
• ebből a rendezés a legizgalmasabb,milyen eljárást választ a rendszer?
• Kombinatorikus optimalizációpl.: legrövidebb út, utazó ügynök probléma kis méretű gráfokon
• Szemantikus lekérdezések értelmezése természetes nyelvi kérdésekből, és megvalósításuk
GPU Lab
D. Berényi
Rekurrens megközelítés
Néhány trükk, amivel próbálkoztak a kutatók:
• Az „attention” struktúrálása(nem csak egyes elemek, hanem csoportok között is)
• Memória hierarchikus szervezése
• Rekurzió megvalósítása (link), bizonyítható helyesség
• Mohó algoritmusok – részleges megoldások kezelése,pl. reinforcement learning-el.
GPU Lab
D. Berényi
Rekurrens megközelítés
• Rekurzió megvalósítása (link), általánosítás!
GPU Lab
D. Berényi
Rekurrens megközelítés
• A rekurrens megközelítések jelenlegi legnagyobb problémájának az általánosítás mértéke tűnik.
• Sokszor a tanítottnál nagyobb problémákra nem működik megfelelően a rendszer
GPU Lab
D. Berényi
Programszintézis
GPU Lab
D. Berényi
Programszintézis
FlashFill (link)
Microsoft Excel:string manipulációs kifejezések szintetizálása példák alapján
(Megtámogatva sok heurisztikával…)
GPU Lab
D. Berényi
Programszintézis
• FlashExtract (link)Kevés példa alapján mezők kiválasztása szövegből, táblázatból, weboldalról.
• FlashMeta (link)Megpróbálja a példákból levezetni algebrailag, hogy milyen művelet eredményeként állhattak elő, így nagyon hatékonyan meg lehet mondani, milyen műveletek, milyen sorrendben kellenek a szintézis során
Linkek:
Video
paper
Eredmény:
30 perc python fejlesztés helyett 30 másodperc szintézis
(911 hívások nyers text adatából mezők kigyűjtése)
GPU Lab
D. Berényi
Programszintézis
A FlashFill továbbfejlesztései a
• RobustFill (link)• Mi van, ha elgépelések vannak a példákban?
• Neuro-Symbolic Program Synthesis (R3NN)(link)• Absztrakt Szintaxis Fa (AST) reprezentáció
• Abstract Syntax Networks (link)• Általános célú programozási nyelvre kódszintézis, kölcsönösen
rekurzív modulokkal megvalósítva
GPU Lab
D. Berényi
Programszintézis
Neurális program nem-differenciálható gépen (link)
• Reinforcement learning alapú tanítás
• Cél: parser létrehozása: szövegből AST-be, úgy, hogy nem ismerjük a nyelvet.
• Az RNN rész a Parser gépen végrehajtandó utasításokat próbálja meg megtanulni, megjósolni
Eredmények: meg tud tanulni olyan
parsereket, amik komplexitása ekvivalens
50-100 sor python kóddal és sokkal
nagyobb bemenetekre is működnek, mint
amin tanították őket.
GPU Lab
D. Berényi
Programszintézis
DeepCoder (link)
• Megpróbál olyan szintű programozási feladatokat megoldani, mint a programozási versenyeken a legegyszerűbbek
• Három összetevő• Megfelelő DSL (Domain Specific Language)• Keresési technikák: hogyan szűrjünk a program-jelöltek között?• Rangsorolás: ha több megoldás is van, mi alapján választunk
• A leglényegesebb probléma:• Ha egyszerű a DSL és/vagy kevés megkötés van,
akkor át lehet képezni egy SMT megoldóra• Ellenben ha túl tág a DSL és/vagy túl sok a megkötés, egyszerűbb
lehet teljes enumerációt csinálni
GPU Lab
D. Berényi
Programszintézis
DeepCoder (link)
A rendszer „neurális” része azért felelős, hogy amikor a szintézis során meg akarjuk
jósolni, ki akarjuk terjeszteni a függvények terét, akkor melyik függvényt próbáljuk
meg alkalmazni a példák információi alapján.
GPU Lab
D. Berényi
Programszintézis
DeepCoder (link)
Nyelvtan:
• Alapműveletek számokon (pl.: (+1), (*3), (>0), (%2==0))
• Lista műveletek(head, last, take, drop, access, reverse, sort, min, max, sum)
• Magasabb rendű függvények(map, filter, count, zipWith, Scanl)
GPU Lab
D. Berényi
Programszintézis
DeepCoder (link)
Érdemes megfigyelni, hogy a neurális hálóval támogatott Depth First Search (DFS) és
Enumeráció a leggyorsabb
GPU Lab
D. Berényi
Programszintézis
Reprezentatív példák kiválasztásának problémája (link)
• Az SMT alapú megoldók kevés példára jól működnek, de túl sok példa nagyon lelassítja őket.• Melyik példákat válasszuk ki?
GPU Lab
D. Berényi
Programszintézis
Differentiable Inductive Logic
Logic Programming:if-then szabályok: 𝑏 ← 𝑎1…𝑎𝑛, ha 𝑎1…𝑎𝑛 kifejezések igazak, akkor 𝑏 is igaz.
Kifejezések: n-áris predikátumok 𝑝(𝑡1…𝑡𝑛)
„ground rule”: ha már minden változót konstansokra redukáltunk egy if-then szabályban.
Egy Inductive Logic Programming feladat 3 elemből áll:B: „ground rule”-k halmaza
P: pozitív példák, amiket a megtanulandó programnak meg kell jósolnia
N: negatív példák, amiket a megtanulandó programnak ki kell zárnia
32
Előadás
GPU Lab
D. Berényi
Programszintézis
Differentiable Inductive Logic
A megoldás egy if-then ítélet halmaz.
Ez nem triviális: rekurzió is kell,és új predikátumot kell konstruálni
Ez átalakítható egy SAT problémára.Nyelvi keret: (a megtanulandó intenzionális predikátum, extenzionális predikátumok, aritások, konstansok)
ILP Nyelvtan:szabály sablon: egzisztenciális változók száma, lehet-e intenzionális predikátum az ítéletben?
Program sablon: segéd predikátumok, aritások, predikátumok szabály sablonai (2 db), láncolási limit
33
GPU Lab
D. Berényi
Programszintézis
Differentiable Inductive Logic
Ha az igaz hamis értékeket átalakítjuk az [0, 1]intervallumra és minden műveletet folytonossal helyettesítünk, akkor a gradiens módszerrel lehet optimalizálni.
„ground rule”-ok halmazából [0, 1]^n vektor lesz, minden if-then clause súlyt kap (mátrix a 2 template irányában: mennyire valószínű, hogy az adott clause pár jól definiálja a predikátumot).
A megfelelő költségfüggvénnyel egy bináris osztályozót tanítunk, ami a megfelelő igaz-hamis címkét adja a tanító halmazon.
34
Példa: fizzbuzz megoldása külön a fizzből, majd külön a
buzzból összerakva
GPU Lab
D. Berényi
Programszintézis
Differentiable Inductive Logic
35
GPU Lab
D. Berényi
Programszintézis
Differentiable Inductive Logic
A rendszer egyik előnye, hogy rosszul cimkézett adaton sem romlik el azonnal!
36
GPU Lab
D. Berényi
Programszintézis
Question Asking as Program Generation
Torpedó játék:3 hajó ismeretlen méretűek és pozíciójúak.
Ha pár lépést tett a játék, fel lehet tenni egytetszőleges kérdést, aminek eredménye: bool | size | color | location
Egyszerű nyelvtan: színek, méretek, =, <, >, lambda, map, setKöltség függvény: 𝐸 𝑥 = σ𝑖 𝜃𝑖𝑓𝑖(𝑥), ahol x a kérdés, f egy tulajdonság.
A kérdés valószínűsége: 𝑝 𝑥; 𝜃 =𝑒−𝐸 𝑥
σ𝑥∈𝑋 𝑒−𝐸 𝑥
Tulajdonságok: információ tartalom (mennyi információt nyer a kérdéssel az adott szituációban), rövidség (ne legyen helyiérték kódolás), és hogy hivatkozik-e a táblára☺
37
GPU Lab
D. Berényi
Programszintézis
Question Asking as Program Generation
Torpedó játék:
• Tanítás: emberi játékosok kérdéseinek jóslása
• Új kérdések generálása!
38
GPU Lab
D. Berényi
Problémák
Tanítási adatok:
• Példa feladatok és megvalósításukból nem állnak rendelkezésre nagy adatbázisok
• A végső rendszer teljesítménye új, nem látott feladatokon nagyon függ az adatok minőségétől
• Vagy nagyon sok bemenet-kimenet párt kell mutatnunk
GPU Lab
D. Berényi
Alternatív alkalmazások
Program hiányzó paramétereinek jóslása (link)
Programhibákra javítások jóslása (link)
Programok tesztelése (Fuzzing), de hogyan érdemes random bemeneteket előállítani? (link) (use-case: az Edge böngésző PDF parsere)
Hasonló, csak byte szinten (link)
Programnyelvek közötti fordítás, kihasználva a nyelvtant (link)
GPU Lab
D. Berényi
Alternatív alkalmazások
Grafikai kifejezések inferálása kézzel rajzolt képekből (link)
• Nyelv LaTeX részhalmaza
• DSLKézi:
Inferált LaTeX:Nyelvtan:
GPU Lab
D. Berényi
Alternatív alkalmazások
Grafikai kifejezések inferálása kézzel rajzolt képekből (link)
GPU Lab
D. Berényi
Alternatív alkalmazások
Képek előállítása programmal (link)
Ha van egy DSL-ünk a grafikai műveletekre, azt is tudjuk adott célra betanítani
Linkek:
Video
Cikk
Nem differenciálható
elem!
GAN rendszer: Az ágens zajt, vagy képet kap benetül és képet állít elő egy DSL-en keresztül. A diszkriminátornak el kell döntenie, hogy a kép generált, vagy nem. Nincs címkézés, az ágens tanítása reinforcement alapú: jutalomként a diszkriminátor kimenetét kapja meg.
GPU Lab
D. Berényi
Alternatív alkalmazások
GPU Lab
D. Berényi
Programszintézis
Összefoglalva az látszik körvonalazódni, hogy új eszközeink vannak születőben programok (formális rendszerekben felírt
kifejezések) előállítására és manipulációjára:
• A programokat felbontjuk egyszerű DSL primitívekre
• A keresési módszereket gyorsítjuk neurális hálókkal (heurisztika)
• Rangsorolunk (kimenetek tulajdonságai, komplexitás alapján)
GPU Lab
D. Berényi
Kitekintés
• Curry-Howard korrespondencia
• A programszintézis egyben bizonyításszintézis is
Logika Programozás
Tétel Típus
Bizonyítás Típusellenőrzés (fordítás)
Implikáció Függvény típus
És-kapcsolat Szorzat típus (~tuple, struct)
Vagy-kapcsolat Összegtípus
Igaz Egység típus
Hamis „Bottom” típus (nincs példánya)
GPU Lab
D. Berényi
Kitekintés
Interaktív bizonyítás segédek (mint pl. Coq)
Taktikák alapján végeznek bizonyításokat, interaktívan: a felhasználó választja ki, hogy hogyan bontja fel a problémát, milyen taktikákat alkalmaz, esetleg új, vagy speciális taktikákat ír.
• Reflektivitás (𝑥 = 𝑥)
• Alkalmazás (implikációs hipotézisek láncolása:
• Behelyesttesítés (szubsztitúció)
• Átírás (pl.: 𝑓 𝑥 = 𝑓 𝑦 ∧ 𝑓 𝑦 = 𝑓 𝑧 → 𝑓 𝑥 = 𝑓 𝑧)
• Egyszerűsítés
• Vágás (átmeneti hipotézis beszúrása)
• Inverzió (hipotézis extra előfeltételeinek felfedése)
• Indukció
Coq taktikák: linkLemma modus_ponens:forall p q : Prop, (p -> q) -> p -> q.Proof.intros.apply H.assumption.Qed.1 subgoalp : Propq : PropH : p -> qH0 : p------------------q
GPU Lab
D. Berényi
Kitekintés
• GamePad (link)• Coq-hoz taktika jósló rendszer
neurális alapokon
GPU Lab
D. Berényi
Kitekintés
• Lehetséges-e kitalálni, megjósolni, hogy mik lehetnek az érdekes tételek?
GPU Lab
D. Berényi
Irodalom:
• Recent Advances in Neural Program Synthesis
• NAMPI (2018)