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”?
phenotropic program
?Odpowiedzi:
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:
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 bajtyconeData
jeden po drugim, podczas gdy mózg przetwarza wszystkie te dane wejściowe jednocześnie.Lanier twierdzi, że ten ostatni interfejs jest bardziej odporny na uszkodzenia, którym jest (pojedynczy wsunięty bit
coneData
moż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:
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:
... 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:
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
źródło
See(List<Cone> cones)
(gdzie każdyCone
jest od siebie niezależny), tak?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ć).
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.
źródło
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.
źródło
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.
źródło