Projektowanie programu fenotropowego

15

Niedawno natknąłem się na pomysł Jarona Laniera o nazwie „programowanie fenotropowe”.

Chodzi o to, aby używać interfejsów „powierzchniowych” zamiast interfejsów jednopunktowych w programach komputerowych wykorzystujących statystyki do wykrywania drobnych błędów, które zwykle powodowałyby katastrofalny „klasyczny” program.

Dwuliniowy opis znajduje się tutaj:

Według Jarona „prawdziwa różnica między obecną ideą oprogramowania, która polega na przestrzeganiu protokołu, a ideą [omawia], rozpoznawanie wzorców, ma związek z rodzajami błędów, które tworzymy”, a jeśli „nie „nie znajdziemy innego sposobu myślenia i tworzenia oprogramowania, nie będziemy pisać programów większych niż około 10 milionów linii kodu, bez względu na to, jak szybko staną się nasze procesory”.

Nieco dłuższe wyjaśnienie jest tutaj . I jeszcze dłuższe wyjaśnienie jest tutaj .

Tak więc pytanie, spoglądając poza oczywiste konotacje robota-mrocznego władcy, które ludzie zwykle dostrzegają, jak właściwie zaprojektować i napisać „program fenotropowy”?

przysł
źródło
1
Bez obrazy, ale artykuły, które łączyłeś, są bardzo niejasne i naiwne. Czy możesz być bardziej precyzyjny na temat tego, co rozumiesz phenotropic program?
Simon Bergot,
Czytaj jeszcze dłuższą. Opisuje to szczegółowo.
adv
4
Myślę, że jedynym sposobem na to jest określenie „programu fenotropowego”. W takim przypadku odpowiedź staje się oparta na opinii. Zanim zapytasz, jak napisać „program fenotropowy”, zapytaj, co to jest „program fenotropowy”.
Euforyczny
1
@ Simon: Pytanie w zasadzie polega na tym samym pytaniu, więc nie wiem, czy twoja prośba jest możliwa bez tego, że OP sam odpowie na pytanie.
Robert Harvey
1
Temat pokrewny (rozważ autora tekstu): mail-archive.com/[email protected]/msg03808.html
Thiago Silva

Odpowiedzi:

23

Lanier wynalazł 50-centowe słowo, próbując rzucić sieć wokół określonego zestawu pomysłów opisujących model obliczeniowy do tworzenia programów komputerowych o określonych cechach identyfikacyjnych.

Słowo oznacza:

Mechanizm interakcji komponentów, który wykorzystuje rozpoznawanie wzorców lub sztuczne rozpoznawanie zamiast wywoływania funkcji lub przekazywania wiadomości.

Pomysł pochodzi głównie z biologii. Twoje oko łączy się ze światem nie poprzez funkcję podobną See(byte[] coneData), ale poprzez powierzchnię zwaną siatkówką. To nie jest trywialne rozróżnienie; komputer musi skanować wszystkie bajty coneDatajeden po drugim, podczas gdy mózg przetwarza wszystkie te dane wejściowe jednocześnie.

wprowadź opis zdjęcia tutaj

Lanier twierdzi, że ten ostatni interfejs jest bardziej odporny na uszkodzenia, którym jest (pojedynczy wsunięty bit coneDatamoże uszkodzić cały system). Twierdzi, że umożliwia dopasowanie wzorca i wiele innych funkcji, które zwykle są trudne dla komputerów, co robi.

Kwintesencyjnym mechanizmem „fenotropowym” w systemie komputerowym byłaby sztuczna sieć neuronowa (ANN). Jako wejście przyjmuje „powierzchnię”, a nie zdefiniowany interfejs. Istnieją inne techniki uzyskiwania pewnej miary rozpoznawania wzorców, ale sieć neuronowa jest tą, która jest najbardziej zbliżona do biologii. Wykonanie ANN jest łatwe; wykonanie zadania, które ma wykonywać niezawodnie, jest trudne z kilku powodów:

  1. Jak wyglądają „powierzchnie” wejściowe i wyjściowe? Czy są stabilne, czy różnią się wielkością w czasie?
  2. Jak uzyskać prawidłową strukturę sieci?
  3. Jak trenujesz sieć?
  4. Jak uzyskać odpowiednią charakterystykę wydajności?

Jeśli chcesz rozstać się z biologią, możesz zrezygnować z modelu biologicznego (który próbuje symulować działanie rzeczywistych neuronów biologicznych) i zbudować sieć, która jest ściślej powiązana z rzeczywistymi „neuronami” cyfrowego systemu komputerowego (logika bramy). Sieci te nazywane są Adaptive Logic Networks (ALN). Ich działanie polega na tworzeniu szeregu funkcji liniowych przybliżających krzywą. Proces wygląda mniej więcej tak:

wprowadź opis zdjęcia tutaj

... gdzie oś X reprezentuje dane wejściowe do ALN, a oś Y reprezentuje dane wyjściowe. Teraz wyobraź sobie liczbę funkcji liniowych rozszerzających się w miarę potrzeb, aby poprawić dokładność, i wyobraź sobie, że proces zachodzi w n dowolnych wymiarach, zaimplementowanych całkowicie z bramkami logicznymi AND i OR, i masz pewne pojęcie o tym, jak wygląda ALN.

ALN mają pewne, bardzo interesujące cechy:

  1. Są dość łatwe do wyszkolenia,
  2. Są bardzo przewidywalne, tzn. Niewielkie zmiany nakładu nie powodują dzikich wahań produkcji,
  3. Są błyskawiczne, ponieważ są zbudowane w kształcie drzewa logicznego i działają podobnie jak wyszukiwanie binarne.
  4. Ich wewnętrzna architektura ewoluuje naturalnie w wyniku zestawu treningowego

Tak więc program fenotropowy wyglądałby mniej więcej tak; miałby „powierzchnię” wejściową, przewidywalną architekturę i zachowanie oraz byłby tolerancyjny dla hałaśliwych sygnałów wejściowych.

Dalsza lektura
Wprowadzenie do Adaptive Logic Networks z aplikacją do badania oceny ryzyka
„Object Oriented” vs. „Message Oriented” Alana Kay

Robert Harvey
źródło
1
Popraw mnie, jeśli się mylę, ale wejście „powierzchniowe” brzmi jak zbiór - niezależnych (lub w większości niezależnych) komponentów. Na przykład, mogłoby to wyglądać tak See(List<Cone> cones)(gdzie każdy Conejest od siebie niezależny), tak?
FrustratedWithFormsDesigner
1
@Frustrated Możesz oczywiście symulować powierzchnię za pomocą tablicy bajtów, ale wróć do definicji Laniera, która zastępuje przekazywanie wiadomości i wywoływanie funkcji rozpoznaniem i rozpoznawaniem wzorców. Jest to związane z opisanym tutaj problemem skalowalności . Odporność na uszkodzenia jest również częścią równania. Pomyśl o „inteligentniejszych interfejsach”.
Robert Harvey
3
Re: „bardziej odporny na uszkodzenia”. Czy Lanier widział kiedyś złudzenia optyczne? Czy kiedykolwiek badał psychologię mózgu. Mózg ZAWSZE będzie starał się zrozumieć sens tego, co mówią mu dane wejściowe, BRAK WZGLĘDU NA NIEWŁAŚCIWE WNIOSKI. Sposób działania mózgu jest wyjątkowo wadliwy. Tak więc, o ile nie ma znaczenia, czy program działa dość często, tak jak typowy człowiek, przypuszczam, że model, o którym mowa, jest w porządku. Jednak przez większość czasu ludzie oczekują, że komputery będą poprawne. Trudno będzie sprzedać samochód sterowany komputerowo, który przez większość czasu pozwala uniknąć wypadków.
Dunk
2
@Dunk: ... ale nadal legalne jest budowanie i sprzedaż samochodów dla kierowców, którzy w większości przypadków unikają wypadków.
Doc Brown
2
@Dunk nie chodzi o obecność błędów - w przeciwnym razie wybralibyśmy klasyczną ścieżkę matematyczną, aby wszystko udowodnić. Chodzi o 1: zakres wpływu awarii (wszechświat nie ulega awarii, jeśli pomylę królika z gorylem - w rzeczywistości nadal funkcjonuję jako istota ludzka, podobnie jak mój mózg i syn), 2 : jednostki fizyczne / biologiczne w pomieszczeniu muszą się zregenerować, zapewnić informacje zwrotne i alternatywne sondy, które „utrzymują działanie - nawet w nieoptymalny sposób”; i 3: pomysł, że te cechy są dla nas przekonujące, aby chcieć ich w naszych sztucznych systemach
Thiago Silva
1

Myślę, że jesteśmy na samym początku jednego z kroków, które należy podjąć, aby się tam dostać, a mianowicie gromadzenia dużej ilości danych w formatach, które można analizować. Internet, wyszukiwania w Google, Fitbit (każdy krok, każdy krok, który wykonasz, będę cię obserwował), FourSquare, lokalizacja geograficzna smartfona, posty na Facebooku i dane pytań SO. Nie jesteśmy w pobliżu ilości danych zmysłowych, które przeciętny człowiek gromadzi przez całe życie, ale zbliżamy się.

Zacznij kategoryzować miliony zdjęć ptaków i zbieraj opinie od ludzi, którzy mówią, że to nie ptak, i możesz zacząć tworzyć algorytm. Stamtąd można uzyskać bardziej niewyraźne wrażenie (nazwałbym to modelem, ale jest to zbyt dokładne w stosunku do tego, co próbujemy kodować).

class Birdish

Skąd pies tak wiele wie o właścicielu? Ponieważ bardzo ją obserwuje. Pies słuchał samochodów wjeżdżających na podjazd i korelujących to z tym, że właściciel otwierając przednie drzwi wydaje się, że pies rozpoznaje samochód po jego dźwięku. Moglibyśmy to zrobić, ale nie widzimy powodu, aby się tym zajmować. I to jest złe w obecnym oprogramowaniu, nie zwraca uwagi na to, co robi użytkownik. Po prostu czeka, aż użytkownik zrobi to, czego oczekuje od niego dział IT.

Coś tak prostego, jak ustawienie budzika, można by zrobić poprzez małą obserwację / analizę moich obecnych nawyków. Zrezygnowaliśmy z ustawiania timerów magnetowidu, zanim technologia została zastąpiona cyfrową. Czy byłoby tak szybko, gdybyśmy mogli połączyć przewodnik telewizyjny z magnetowidem? Oglądałem ten sam program telewizyjny 4 tygodnie z rzędu w tym samym czasie, ale tego piątego nawet nie włączyłem. Oczywiście chcę to nagrać. Nie możesz powiedzieć, że spóźniam się z pracą i piszę ten post, a dzięki mojej typowej podróży nie dotrę na czas do domu? Masz dane, zrób matematykę.

Zbieraj coraz więcej danych, a następnie możesz wymyślić lepsze sposoby ich analizy, rozpoznawania i ukrywania. Wykraczamy poza to, co można wprowadzić tylko z klawiatury za pomocą naszych aparatów telefonicznych i wkrótce aparatów ze szkłem oka. To dopiero początek.

JeffO
źródło
1

Oto zestaw slajdów do definiowania probabilistycznego języka programowania w Scali .

Jest to pierwszy porządny przykład implementacji niektórych podstawowych komponentów systemu, który proponuje Jaron Lanier.

Nowa Aleksandria
źródło
To wygląda bardzo ładnie. Być może zajmę się projektowaniem biblioteki dla Javy, która działa podobnie.
adv
@ adv jak byśmy to znaleźli, jeśli tak?
Nowa Aleksandria
1
Zamieszczę link do repozytorium github, kiedy zacznę go tworzyć.
adv
-1

Myśl, którą ostatnio miałem:

Jeśli użyłeś pomysłów na wysokim poziomie, takich jak Może Monad Haskella, aby zawrzeć wywołania procedury zdalnej w innych systemach. Wysyłasz zapytanie do serwera. Ale nic nie wraca (serwer jest zepsuty). Lub wraca obietnica (serwer jest zajęty), a twoje programy kontynuują pracę z wartościami None lub Promised. To coś w rodzaju tolerancji na uszkodzenia, której szuka Lanier.

Być może istnieją sposoby na zawarcie innych ewentualności. Na przykład połączenia zdalne, które wracają z przybliżeniem, które z czasem jest coraz bardziej udoskonalane przez negocjacje w tle. to znaczy. to, co powraca, to coś w rodzaju obietnicy, ale nie tylko „trzymaj się tego i pracuj nad tym, a wkrótce pojawi się odpowiednia wartość”, ale „dalej trzymaj się tego i pracuj z tym, a wkrótce pojawi się lepsze przybliżenie”. (I znowu i jeszcze raz). Byłoby to w stanie ukryć wiele błędów przed programistą, podobnie jak protokoły sieciowe ukrywają przed programatorem wiele awarii sieci na niskim poziomie.

interstar
źródło
Jak to odpowiada na zadane pytanie?
komara
Jeśli dobrze rozumiem, programowanie fenotropowe jest sposobem na programowanie dużych (często z wieloma komputerami), solidnych systemów. Problem polega na tym, że wszystkie biologiczne metafory sprawiają, że niejasne i trudne do przełożenia na praktyczne terminy programowania. Sugeruję tutaj, że pewne konstrukcje programistyczne, które nie są niejasne (np. Monady, Obietnice itp.), Mogą być sposobem na uczynienie niektórych z tych pomysłów Laniera konkretnymi i praktycznie progamowalnymi.)
międzygwiezdny