Bayesian Program Synthesis (BPS, bayesowska synteza programów) to zaawansowana technika sztucznej inteligencji, której celem jest automatyczne generowanie programów komputerowych na podstawie specyfikacji lub danych, z wykorzystaniem metod statystyki bayesowskiej. W przeciwieństwie do klasycznego programowania czy konwencjonalnego uczenia maszynowego, BPS jawnie uwzględnia niepewność i strukturę probabilistyczną w procesie syntezy programów. Tworzenie programów traktowane jest tu jako problem wnioskowania probabilistycznego – poszukuje się najbardziej prawdopodobnych programów w bardzo rozległej przestrzeni, biorąc pod uwagę obserwowane dane i wiedzę a priori. BPS odróżnia się od metod deterministycznych możliwością wykorzystania elastyczności i odporności wnioskowania bayesowskiego, co umożliwia generowanie programów adaptacyjnych oraz naturalną integrację uczenia przyrostowego.
BPS działa zazwyczaj poprzez zdefiniowanie probabilistycznej gramatyki lub przestrzeni poszukiwań programów, określenie bayesowskich priorytetów dla struktury lub parametrów tych programów i wykorzystanie algorytmów wnioskowania do efektywnej eksploracji tej przestrzeni. Umożliwia to automatyczne generowanie złożonych modeli probabilistycznych lub odkrywanie algorytmów dostosowanych do konkretnego zadania.
Zastosowania i przykłady
BPS znajduje zastosowanie m.in. w automatycznym generowaniu modeli do analizy danych, automatyzacji modelowania statystycznego, ekstrakcji wiedzy ze strukturalnych i niestrukturalnych danych oraz w syntezie planów eksperymentów lub strategii sterowania w robotyce. Przykładem może być automatyczne odkrywanie modeli wyjaśniających w danych naukowych czy generowanie optymalnych skryptów przetwarzania w procesach data science.
W przemyśle BPS przyspiesza rozwój spersonalizowanego oprogramowania, automatyzuje złożone zadania modelowania oraz optymalizuje procesy poprzez generowanie adaptacyjnych strategii.
Główne narzędzia programistyczne, biblioteki i frameworki
Do kluczowych narzędzi i frameworków należą: Gen (MIT) – elastyczny język programowania probabilistycznego obsługujący BPS, Anglican (oparty na Clojure), Pyro (PyTorch), Stan oraz Edward (TensorFlow) – choć głównie skupione na wnioskowaniu probabilistycznym, mogą być adaptowane do wybranych zadań BPS. W zaawansowanych badaniach wykorzystuje się także Bayesian Program Learning (BPL) oraz różne probabilistyczne języki programowania.
Ostatnie osiągnięcia i trendy
Ostatnie postępy dotyczą zwiększenia wydajności algorytmów wnioskowania oraz integracji BPS z modelami głębokiego uczenia, łącząc podejścia symboliczne i statystyczne. Rośnie zainteresowanie interpretowalnością i weryfikowalnością generowanych programów oraz automatyzacją złożonych zadań w data science i AI. Trendy obejmują popularyzację narzędzi BPS w przemyśle oraz ich wykorzystanie jako kluczowego elementu systemów autonomicznych i adaptacyjnych.