Gniotsa nie łamiotsa i nie tylko – dlaczego lepiej mniej ale lepiej ? + kilka nowości.

Tak się składa,że moje wysiłki w realnym świecie nie za bardzo dają sensowne rezultaty.W naturalny sposób ogranicza to moją możliwość – i chęć do blogowania.Ale póki co,co prawda później niż zwykle ukazuje się ten – kolejny – wpis. Przypuszczalnie kolejne wpisy będą ukazywać się tylko i wyłącznie w weekendy.

Dzisiaj dość ogólnikowo i krótko.O prostych rzeczach.Prostych,ale solidnych.

Do takich rzeczy pasuje potoczne określenie (będące podobno formą rusycyzmu) „gniotsa nie łamiotsa” oznaczającego toporne wytwory (często rodem z komunistycznych czy rosyjskich – ale nie tylko biur projektowych) które przetrwać potrafią lata przy naprawdę niedbałym użytkowaniu.

W naszym życiu spotykamy się często z urządzeniami i narzędziami.I tak się składa,że te najbardziej skomplikowane – szczególnie jeśli należą do tańszych – „lubią” nawalić częściej. Pomimo tego,że planowe postarzanie produktów ma miejsce i jest nieuczciwą działalnością producenta zmierzającą do tego,by produkt nie przetrwał dużo dłużej niż zakłada gwarancja – wiele rzeczy „lubi” nawalić ot tak. Oczywiście procesory komputerów i niektóre zaawansowane technologicznie produkty które lepiej przetestowano nawalają na szczęście z naszej perspektywy (ale w istocie to też korekcja błędów). Ale skąd problemy z rzeczami skomplikowanymi i trwałość rozwiązań prostych ? Oprócz typowych cech materiałowych (im mniejszy element tym bardziej podatny np. na zjawiska termodynamiczne związane z otoczeniem) mamy tu po prostu do czynienia z prawdopodobieństwem i kompleksowością naprawy. Jedna spośród setek części spełniających wiele funkcji po prostu częściej może nawalić.I naprawienie czegoś takiego jest siłą rzeczy bardziej czasochłonnym problemem.

A zatem proste „toporne” i „archaiczne” rozwiązania są bardziej odporne nie tylko ze względu na brak planowego postarzania – ale i prostotę naprawy i fakt,że mniej rzeczy może się w takim czymś zepsuć.Po prostu.

Ponadto dochodzimy do stosunkowo kapitalnej kwestii technicznej.Nadmiarowość i modułowość. Robot łatwo może się zepsuć jeśli nawali jeden z jego siłowników – i jest wtedy bezradny. A człowiek czy zwierzę ? Mówiąc o człowieku czy zwierzęciu że jest prosty w budowie to bzdura – ale każdy żywy organizm jest pokazem triumfu modułowości i nadmiarowości nad „wszechstronnymi” i „zintegrowanymi” rozwiązaniami.Rozwiązanie takie jak modułowość jest już od dawna świadomie i nieświadomie stosowane:

Nawet nasze komputery.W zasadzie trwałe łączenie ich komponentów pewnie nie byłoby problemem dla producenta.Ale po co ? I kto by się dzisiaj zgodził na wlutowany na stałe procesor,pamięć i nawet dysk poza prostymi miniaturowymi tanimi narzędziami ?

Tak więc modułowość, nadmiarowość i prostota modułów (oraz ich wymiany) jest wyznacznikiem tego,do czego powinien dążyć inżynier. Takie podejście nie jest oczywiście dobre zawsze – ale wystarczająco dobre,by o nim przypomnieć.Co czynię.

A teraz nowości.

Bezpieczeństwo:

  • Venom albo CVE 2015-3456 (po co nazwa,skoro tak piękna liczba ?) i możliwy atak na maszyny wirtualne – o ile na jakiejś maszynie wirtualnej użytkownik ma roota. A wszystko przez qemu i zostawiony w podatnych programach kod kontrolera dyskietek…

Arxiv: kryptografia i bezpieczeństwo:

Sztuczna Inteligencja:

Sieci Neuronowe:

Inżynieria Oprogramowania:

Inżynieria Materiałowa i Nanotechnologia:

Inne:

Cryptome:

Reklamy

Setny wpis, czyli nie przeceniajmy liczb i naszych przyzwyczajeń

Tak się składa że po podliczeniu wychodzi co wychodzi. Ten wpis ma numer 100. Jubileusz ? No niezupełnie.

Dzisiaj chciałbym napisać,jak wiele zależy od percepcji matematyki.I zaręczam,że nie będzie to takie nudne. Wróćmy jednak do liczby sto.

Przez Rzymian oznaczana jako C. W praktyce jest to liczba 102. Ale skąd 10 ? Popatrzmy na ręce.Mamy 10 palców. (No chyba że ktoś stracił,albo ma polidaktylię) Stąd ten system liczbowy. Ale cyfra 100 nie jest taka nadzwyczajna. Majowie używali systemu 20-tkowego. Ale co ciekawe – w wielu kulturach szczególną rolę spełnia również liczba 12.System dwunastkowy stosowany był m.in. przez Celtów. U Sumerów podstawą systemu liczbowego była z kolei liczba 60 (5*12).

Co ciekawe dość interesujące właściwości pod względem matematycznym ma system szóstkowy. Komputery korzystają z kolei z systemu dwójkowego. Za interesujący można uznać również system Fibonacciego (zaleta: kompresja i w systemie Fibonacciego nigdy dwie jedynki nie występują na kolejnych miejscach, możemy zatem kolejne dwie jedynki uznać za dodatkowy symbol końca liczby),system silniowy i resztowy. Co najciekawsze – wszystkie te systemy należą do systemów pozycyjnych. Istnieją też systemy addytywne w których istnieje dużo więcej dodawanych do siebie symboli.

Przykładem systemu addytywnego jest Rzymski. XL=40, LX=60 : gdzie X=10 L=50. W praktyce jednak pozycja jak widać i przyjęta konwencja odczytywania liczby – czy również innego ZNAKU i tu ma znaczenie.

Nas,Europejczyków nauczono czytać od lewej do prawej.Nie jest to jednak jedyne rozwiązanie. Alfabet Arabski i pismo chińskie tradycyjnie odczytywało się od prawej do lewej.Choć Chińczycy preferowali zapis pionowy. Oznacza to,że konwencje mogą być mylące. Weźmy liczbę dwójkową poniżej:

1011

1110

1001

0001

Jak to teraz odczytać – zakładając,że mamy liczbę 16-bitową:

Od lewej do prawej czytając od góry: 1011 1110 1001 0001

od prawej do lewej czytając od góry: 1101 0111 1001 1000

czytając od góry i kierując się od lewej do prawej: 1110 0100 1100 1011

czytając od góry i kierując się od lewej do prawej:  1011 1100 0100 1110

cztery możliwosci. Kolejne 4 jeśli czytać od dołu (co nie było wspominane). Plus kolejne 4 możliwości gdyby to odczytywać na skos biorąc liczby ze stworzonej macierzy (a co gdy macierzy nie ma) od góry i od dołu.

Co ciekawe problem nawet z zapisem liczb dwójkowych miał miejsce też w informatyce i był powiązany z istnieniem architektur little endian i big endian. A to są tylko liczby dwójkowe.Pomyślcie ile możliwości jest jeśli użyjemy bardziej skomplikowanych systemów liczbowych albo znaków językowych. W najlepszym wypadku można mówić o łamigłówce.

W dodatku,jeśli chodzi o język system alfabetyczny nie jest jedynym możliwym rozwiązaniem. Choćby języki japoński i koreański mają pismo oparte na systemie sylabicznym. Znane są też pismo ideograficzne (hieroglify starożytnego egiptu), ideograficzno-sylabiczne (choćby dzisiejsze pismo chińskie) itd.

To,że posiadamy przyzwyczajenie do patrzenia na liczby i znaki wg. wyuczonych konwencji, wcale nie znaczy,że są to jedyne słuszne spojrzenia na świat.

Problem w tym,że kwestia ta przekłada się choćby z matematyki na fizykę.Uczono nas,że suma kątów w trójkącie wynosi 180 stopni ? Bzdura – jeśli mamy do czynienia z geometrią hiperboliczną albo eliptyczną. Bo świat nie kończy się na geometriach Euklidesowych.Teoria względności do opisu czasoprzestrzeni używa raczej geometrii hiperbolicznej.

Lecz są to tylko opisy i konwencje. Fizycy szukają jak świętego graala „Teorii wszystkiego” i wydaje im się,że są o krok od jej znalezienia. Lecz wygląda to raczej na kolejne wyprawy w poszukiwaniu „kamienia filozoficznego”. Tak naprawdę bowiem nie możemy mieć (wygodnej) pewności,że wiemy wszystko.Możemy mieć tylko coraz doskonalsze i coraz bardziej prawdopodobne modele. Lecz jaki model jest dobry ? Cechy dobrego modelu omówili Hawking i Mlodinow w książce „Wielki Projekt”:

  1. Elegancki
  2. Zawiera niewiele elementów wprowadzonych arbitralnie i wymagających dopasowania
  3. Zgadza się z wszystkimi wynikami obserwacji i je wyjaśnia
  4. Daje szczegółowe przewidywania wyników przyszłych obserwacji które mogą go obalić (sfalsyfikować), jeśli nie zostaną potwierdzone.

Zasadniczo, należy jednak pamiętać, że słabością każdego modelu jest punkt 3 i 4. Zawarcie wszystkich wyników obserwacji w modelu nie zawsze się udaje,a wysunięcie na podstawie modelu jednoznacznych prognoz też nie jest zawsze użyteczne.

W dodatku nie tylko nasze modele bywają wadliwe.Nasze zmysły i przyrządy – też. Oczy podlegają złudzeniom optycznym. W przypadku zaś urządzeń mamy do czynienia z błędami pomiarowymi. Co więcej zasada nieoznaczoności raczej jednoznacznie sugeruje,że dokonywanie dowolnie dokładnych pomiarów może być niemożliwe.

W dotychczasowej historii nauki było zwykle tak,że po czasie okazywało się,że wszelkie niedoskonałe modele mają swoje zakresy zastosowania. Zaś ludzki umysł, jako z natury niedoskonałe narzędzie powstałe w procesie ewolucji ma swoje ograniczenia – choć dziś nadal jest wspanialszy,od wszystkich naszych dotychczasowych maszyn. W istocie zatem – choć to irytujace, należało by przyjąć,że nie wszystko wiemy.To niepokojące. Nic dziwnego,że ludzie uciekają przed widmem niewiedzy w objęcia religii. Rzecz jednak w tym,że choć geny i nasza natura każą nam szukać perfekcyjnych rozwiązań, to w istocie możemy realizować tylko coraz lepsze rozwiązania. Nigdy nie będziemy perfekcyjnie bezpieczni,szczęśliwi itd. Nigdy nie opracujemy perfekcyjnych rozwiązań.Ale nie jest tak źle i nie ma po co panikować.Możemy wypracować rozwiązania wystarczające dla danych warunków i tworzyć coraz lepsze.

Oznaczenia numeryczne stopów aluminium przerabianych plastycznie – podstawy

Po dostępnych dla mnie informacjach dotyczących zapytań osób które trafiały na mego bloga wnioskuję,że jednak artykuł o oznaczeniach stali okazał się być może użyteczny.Pora więc pójść za ciosem.Dziś oznaczenia stopów aluminium czyli glinu.

Osoby których to raczej nie zainteresuje jako nagrodę pocieszenia podam ciekawostkę – czy wiecie,że ten metal był w XIX wieku droższy od złota,ze względu na koszty wytwarzania,pomimo faktu,że jest to jeden z najpopularniejszych w skorupie ziemskiej pierwiastek ? W tym kontekście trzeba być ostrożnym z inwestowaniem w metale które występują na księżycu i planetoidach.Kiedyś platyna może być DUŻO tańsza,nie jest więc bezpieczną inwestycją długoterminową.I tak, są już plany komercyjne (gorzej z ich realizacją -ale na razie).

Przejdźmy jednak do norm. Oznaczenia numeryczne stopów aluminium przerabianych plastycznie reguluje norma PN-EN 573-1:2004.

Typowa nazwa stopu zaczyna się od tekstu:

PN EN AW-XYZZ #

gdzie:

PN EN – norma

A-Aluminium

W-przerabiane plastycznie

XYZZ – to 4 cyfry.

# – litera oznaczenia,czasem z numerem specyfikującym

Numeracja jest następująca:

Cyfra X (pierwsza) oznacza typ stopu:

  • 1 (seria1000) – stopy Al o wysokiej czystości (rzędu >99%)
  • 2 (seria 2000) – stopy z Miedzią (Cu)
  • 3 (seria 3000) – stopy z Manganem (Mn)
  • 4 (seria 4000) – stopy z Krzemem (Si)
  • 5 (seria 5000) – stopy z Magnezem (Mg)
  • 6 (seria 6000) – stopy z Magnezem i Krzemem
  • 7 (seria 7000) – stopy z Cynkiem (Zn)
  • 8 (seria 8000) – stopy z Innymi pierwiastkami niż powyższe
  • 9 (seria 9000) – W zasadzie oznaczenie rezerwowe

Cyfra Y (druga) – jest powiązana z czystością lub odmianą stopu

Cyfry XX (trzecia i czwarta) – mają ograniczone znaczenie:

  • W przypadku serii 1000 – dotyczą określenia czystości np:

1245 – stop o zawartości 99,45% Al

  • W przypadku pozostałych – praktycznie bez znaczenia poza faktem,że jeśli są identyczne w różnych stopach to są to stopy różnej generacji, przy czym te z wyższą liczbą to te bardziej udoskonalone.Np. 7075 i 7475 – 7475 jest nowszy.

UWAGA: kolejne cyfry typu 1003,1004,1005 – to są ZUPEŁNIE INNE STOPY.

# – oznaczenia literowe:

  • F – stopy nie poddawane żadnym procesom umocnienia
  • O – stopy w stanie wyżarzonym
  • H – stopy umacniane odkształceniowo
  • T – stopy poddawane obróbce cieplnej (poza wyżarzeniem) lub cieplno-plastycznej

WAŻNE: Przy niektórych literach są dalsze znaki,określające jakim dokładniej procesom poddaje się stop.

Osobom zainteresowanym większą ilością dokładniejszych informacji polecam skorzystanie z pism i norm fachowych oraz poleconej poniżej książki.

We wpisie wykorzystano i przetworzono treść załącznika książki „Nowoczesne Stopy Aluminium do Przeróbki Plastycznej” wydanej przez wydawnictwa AGH, której autorem jest prof.dr hab.inż. Stanisław Dymek. Osobom zainteresowanym większą ilością informacji na temat stopów aluminium przerabianych plastycznie gorąco polecam jej ewentualny zakup.

Kwestia skali

Co prawda, prawa fizyki są uniwersalne we wszechświecie,co jednak nie zmienia faktu,że nasze „zdroworozsądkowe” spojrzenie na świat nie jest tak do końca zgodne ze stanem faktycznym.Wydaje nam się,że tak jest,ale w istocie to bzdura. W tym wpisie spróbuję wyjaśnić dlaczego.

Człowiek.Przeciętnie jakieś 1,5-2 m wzrostu. Z ilu komórek się może składać ? Najpewniej z wielu trylionów. (1012) – ale jak z tym jest,to nawet naukowcy nie są w stanie ocenić w sposób jednoznaczny. A cóż to jest jeden metr w porównaniu z rozmiarem galaktyki czy zmierzoną w laboratorium długością Plancka ? Prawa fizyki są te same,ale rozmiary są różne,więc przy różnych rozmiarach różne kombinacje praw mogą dać zupełnie inne efekty.

W wielu horrorach klasy B głównymi antagonistami są gigantyczne owady pożerające ludzi. Jest tylko pewien problem,który każdy,kto nie spał na lekcjach biologii (o ile były dobrze prowadzone) powinien zauważyć. Układ oddechowy owadów to coś,co w naszej skali nie miałoby prawa działać tak dobrze,jak działa w ich skali.

Każdy organizm wraz ze zwiększeniem rozmiaru zwiększa masę i w pewnym momencie zasady na których ewolucja zbudowała dany organizm przestają być wystarczające. Wielkie,kilkunastocentymetrowe pająki naprawdę są bardzo różne ewolucyjnie i strukturalnie od swoich mniejszych kuzynów.

A co to daje w praktyce ? Bardzo dużo.Ludzki organizm pod wpływem zbyt wielkich przyspieszeń może paść ofiarą zawału lub krwotoków,a ludzki płód w próżni nie będzie miał łatwego i normalnego rozwoju – to ważne rzeczy,ale wciąż drobiazgi.Ponieważ nasze narzędzia też podlegają efektowi skali. Efektowi który dużo łatwiej będzie przedstawić na przykładzie mikroświata. Z tego co wiem studenci uczący się nanotechnologii w naszym kraju mogą mieć przedmiot znany jako fizyka zjawisk mezoskopowych. Mile widziana jest również mechanika kwantowa. No ale  – czym się one tak różnią od fizyki Newtona ? Podobnie jak teoria względności – szeregiem zaskakujących zjawisk z którymi nie spotykamy się w naszej skali tak często.

Zacznijmy od tego,jak się różni od naszej powszechnie spotykanej fizyki fizyka w rozmiarach mniejszych od milimetra a nawet mikrometra.W takich skalach np:

  • Znaczenia nabierać zaczynają ruchy termiczne cząstek,np. ruchy Browna.
  • Lepkość zaczyna dawać dużo bardziej znaczące efekty niż w naszej skali.
  • Znaczenia nabiera też wpływ dyfuzji.
  • Mechanika płynów i zjawiska chemiczne odgrywają większą rolę.
  • itd

W skali nano jest jeszcze dziwniej:

O ile jeszcze można od biedy jakoś zaakceptować owady (czy nawet niektóre zwierzęta) „chodzące po wodzie”,  o tyle zjawiska kwantowe wg. których światło jest i falą  i cząsteczką czy fakt,że cząsteczka może „przechodzić przez ściany” nas zdumiewa.Ale świadczy to tylko o tym,że nie jesteśmy przystosowani do tych skal,a nie że dzieją się tam „cuda”. Byłoby wręcz śmiesznie naiwnym zakładać,że oto „zdroworozsądkowe” podejście z naszej skali jest rozsądne w innych skalach.Po prostu. Tym niemniej nasze podejście – chcąc nie chcąc – jest na to skazane.

Czy jednak kwestia skali jest istotna tylko tutaj ? Ależ nie. Istotne jest z tej perspektywy przyjrzenie się bliżej rozwiązaniom stosującym np bardziej rozwinięte sieci neuronowe. Pod pewnymi względami zachowują się one jak elementy ludzkiego i zwierzęcego mózgu – ale pod pewnymi nie,są bowiem ich znacznie uproszczoną wersją.

Nawet stosunkowo proste podejście do kwestii skali jakim był czołg Car okazało się gigantyczna klęską.W czasie prób czołg utkwił w błocie.

Również w przypadku tokamaków mamy problem z utrzymaniem plazmy wewnątrz.  Dlaczego nie ma takich problemów ze Słońcem ? Olbrzymia masa Słońca jest związana z olbrzymią grawitacją, która utrzymuje tą plazmę w miejscu.

Dlaczego jednak piszę o tym ? Wydaje mi się,że podejście do różnych skal i łączenia rozwiązań występujących w różnych skalach wciąż jest stosunkowo mało kreatywne i wiele można jeszcze zrobić.

Narzędzia sztucznej inteligencji – ogólne i uproszczone spojrzenie

Nie jest łatwo opracowywać tak szeroki temat nie będąc specjalistą,a jednocześnie wskazać zarys problemu w możliwie poprawny i interesujący.  Mam nadzieję,że niniejszy artykuł może aspirować do roli prostego wprowadzenia do przykładowej istotnej części zagadnień, związanych z tematyką narzędzi sztucznej inteligencji. Zwracam też uwagę,że z konieczności (oraz ze względu na moją ograniczoną wiedzę) w niniejszym artykule nie zostały zaprezentowane dokładne szczegóły algorytmiczne,a szczególnie – nie został dokładnie omówiony problem reprezentacji i dokładne kwestie związane z uczeniem systemów SI.

Przede wszystkim – dobrym pytaniem na początek jest to, czym w istocie jest sztuczna inteligencja,bowiem definicja dawałaby nam już jakąś wskazówkę. Jak zasugerowałem w wpisie z czerwca na temat bota Eugene Goostman jestem przeciwnikiem tezy, że sztuczna inteligencja to po prostu naśladowanie zachowania człowieka. Można sobie mówić o „inteligencji emocjonalnej” czy „społecznej”. Ok. Ale zachowując szacunek do dziedzictwa Alana Turinga, muszę stwierdzić, że test Turinga jest mało wartościowy jeśli idzie o wykrycie rzeczywistej sztucznej inteligencji, ponieważ false positives (i przyszłe false negatives) dyskwalifikują go. W istocie nie o taką inteligencję nam przecież głównie chodzi. Chodzi nam naprawdę o inteligencję, która odciąży nas w pracy umysłowej (a jeśli również fizycznej,  pomimo paradoksu Moraveca – byłoby jeszcze lepiej). A jak już to zrobi… Nasza leniwa zwierzęca strona podpowiada: „to już nie jest takie ważne” 😉

W istocie jednak,  zasada/zbiór zasad (nie chodzi mi o zasady chemiczne 😉 ) na której opiera się inteligencja jest właśnie piekielnie ważna,jeśli chcemy ją odtworzyć w sztucznej formie.

Problem ten jest bardziej złożony,niż niektórzy myślą. W początkach optymistycznych badań w dziedzinie sztucznej inteligencji jeden z badaczy twierdził, że 10 lat później komputer pokona człowieka w szachach.I komputer rzeczywiście pokonał człowieka, ale po latach 40. W nomenklaturze naukowej dzieli się sztuczną inteligencję na „słabą” (porównywalną z insektami i zwierzętami) i „silną” – porównywalną z ludźmi. I wbrew optymistom – cały czas jesteśmy raczej przy insektach 😉 Wszelkie rozważania o superinteligencji i panikowanie filozofów jest jeszcze najprawdopodobniej przedwczesne o całe lata, ponieważ samo poprawne zrozumienie działania mózgu jest całe lata przed nami.

Projekty takie jak Blue Brain i Human Brain Project sugerują, że pomysły dotyczące symulowania świadomości ludzkiej w komputerze teoretycznie będą możliwe w latach 20-tych czy 30-tych. Rzecz w tym, że wymaga to w praktyce lepszych niż dziś superkomputerów.  W 2012 roku przeprowadzono symulację działania mózgu małpy na superkomputerze Sequoia. Brzmi dobrze ? No nie całkiem. Mózg małpy jest nieco mniej doskonały od ludzkiego, a symulacja była 1542 razy wolniejsza niż rzeczywisty (całkiem malutki i zużywający dużo mniej energii) małpi mózg. Teoretycznie,co prawda nie potrzebujemy przetwarzania symulacji w czasie rzeczywistym – lecz im dokładniejsza symulacja tym mniej uproszczony i bardziej realistyczny może być model.

Można też zapoznać się z innym przykładem – symulacji części mózgu na blogu geekweek. W praktyce można stwierdzić,  że superkomputer który prowadził opisaną symulację może być nawet 240 tysięcy razy wolniejszy od mózgu ludzkiego. Oznacza to też, że zakładając realizację na inne sposoby nie do końca dziś pewnego prawa Moora [1] [2] (skok mocy obliczeniowej x2 w 18 miesięcy) – przynajmniej 12 lat przyspieszania potrzeba, by „ogarnąć” małpę (czyli ok 2027 ?) i może 25 lat (2040 ?) by jakiś superkomputer dogonił ludzki mózg. I to raczej nieaktualne. Obecnie dwukrotny przyrost następuje prawdopodobnie co 3 lata. W takim przypadku, co do symulacji mózgu w czasie rzeczywistym na superkomputerze – mamy przesunięcie terminu na 2060.

Widać zatem doskonale, jakim wyzwaniem dla ewentualnych prób reversingu jest inteligentny umysł. Skala : ok. 1011 neuronów. Każdy połączony średnio z 7000 innych.ok. 1015 połączeń. Magazynowanie wspomnień w pamięci.Odpowiednik przynajmniej 2,5*1015 bajtów binarnych ,czyli 2500 TB (a to chyba tylko hipokamp). Nawet zakładając,że potrzebne byłoby tylko 1 promil tych zasobów, przeciętny pecet miałby problem.

Nic więc dziwnego, że badania nad sztuczną inteligencją w rzeczywistości od lat dotyczą w istocie „słabej” sztucznej inteligencji. I nie nabierzcie się na ostatnie osiągnięcie Google. Jest ono oczywiście bardzo ważne,wręcz rewolucyjne – z historycznej i programistycznej perspektywy.  Po raz pierwszy sieć neuronowa nauczyła się czegoś praktycznie bez ingerencji człowieka, metodą prób i błędów osiągając świetne wyniki. Ale samo oparte na faktach stwierdzenie, że sieć „gra lepiej niż gracze” ma głównie efekt marketingowy,bowiem może skłonić do przecenienia tego sukcesu i rozpatrywania go w niewłaściwej perspektywie. W istocie rozwiązanie to swym poziomem przypomina raczej szczura umieszczanego w labiryncie przez biologa i znajdującego drogę do pokarmu z lepszym lub gorszym czasem – w zależności od zmiany labiryntu (tu: gry) – bez jednak szeregu bardziej inteligentnych cech obecnych u szczurów. Niestety od tego rozwiązania, do bardziej zaawansowanej uczącej się sztucznej inteligencji w komputerze i robocie – na poziomie intelektu psa czy kota (już nie mówiąc o małpie) jest jeszcze naprawdę sporo pracy…

To przydługawe wprowadzenie było niestety konieczne, by spróbować wbić każdemu potencjalnemu niedowiarkowi do głowy,że dzisiejsza „słaba” sztuczna inteligencja to „mało inteligentne” narzędzia. Z drugiej jednak strony, te „niedoskonałe narzędzia” robią i tak spore wrażenie i oszczędzić mogą naprawdę sporo pracy. Nie potrzeba dużej inteligencji.Tak jak mrówki pomagały oddzielić mak od piasku postaciom z bajek, tak stosunkowo „prymitywne” algorytmy związane z rozwojem badań nad sztuczną inteligencją są i tak naprawdę nieocenione.

Które to algorytmy ? Sporo tego. Badania nad sztuczną inteligencją pomogły przy tworzeniu na przykład:

Są to właściwie teoretycznie „tematy poboczne” – choć ich zastosowanie w niektórych wypadkach może okazać się wręcz nieodzowne i zbawienne. Natomiast, jeśli chodzi o sztuczną inteligencję właściwą to w zasadzie oprócz rozróżnienia „silnej” i „słabej” sztucznej inteligencji wyróżnia się różne podejścia:

  • logiczny – racjonalna inteligencja to coś co da się opisać na podstawie logicznych reguł
  • anty-logiczny („scruffy AI”) – nie wszystkie reguły można wyprowadzić,niektóre trzeba samodzielnie zdefiniować.

czy niniejsze (dziś uznane za komplementarne) podejscia:

  • Symboliczne – Inteligencja jako operowanie symbolami
  • Konekcjonistyczne – Inteligencja bierze się z połączeń między symbolami

Właściwie najstarszym paradygmatem jest paradygmat logiczny powiązany z podejściem typowo symbolicznym. Związany jest on z powstaniem języka Lisp, a później, również języka Prolog. Pomimo faktu, że są to chyba najczęściej wymieniane języki programowania powiązane z badaniami nad sztuczną inteligencją – nieco się różnią.

Lisp – jest językiem relatywnie starym (powstał w 1958 roku) i teoretycznie dziś już „rzadko stosowanym” –  jeśli zapomnieć o jego implementacjach,takich jak Scheme i Clojure. Co jest nadzwyczajnego w języku Lisp ? Jego możliwości. Lisp został oparty na rachunku lambda, co w praktyce oznacza,że jest językiem uniwersalnym i teoretycznie pozwala na skonstruowanie dowolnej aplikacji, która może zostać uruchomiona na maszynie Turinga. Nie jest to jednak język przyjemny dla człowieka, złośliwi tłumaczą jego nazwę jako „Lost In Stupid Parentheses” ( „Zagubiony w Głupich Nawiasach”) ze względu na postać przykładowego kodu wymagającą wielu nawiasów. Bardzo łagodny przykład:

(defun factorial (n)
(loop for i from 1 to n
for fac = 1 then (* fac i)
finally (return fac)))

Inne krytyczne porównanie,to twierdzenie,że „Lisp przypomina owsiankę wymieszaną z obciętymi paznokciami„. Z drugiej strony język ten stosowany może choćby w takich zagadnieniach jak:

  • Badanie algorytmów, obliczalności i definiowalności
  • Dowodzenie twierdzeń
  • Rekurencja

I naprawdę: nie tylko. Emacs i AutoCAD były stworzone z użyciem Lispu.  Co więcej, jak powiedział Kent Pittman:

Proszę nie przyjmować, że Lisp nadaje się tylko do programowania Animacji i Grafiki, SI, Bioinformatyki, B2B i E-Commerce, Zbierania Danych, aplikacji EDA/Semiconductor, Systemów Eksperckich, Finansów, Inteligentnych Agentów, Zarządzania Wiedzą, Mechanicznych CAD, Modelowania i Symulacji, Naturalnych Języków, Optymalizacji, Badań i Rozwoju, Analizy Ryzyka, Planowania, Telekomunikacji i Tworzenia Stron WWW tylko dlatego, że te rzeczy zostały wymienione na liście.

I to chyba raczej fakt, że kod wygląda „dziwnie” sprawia, że Lisp nie jest dotąd często używany, pomimo swej uniwersalności.

xkcd.com , Randall Munroe

Co najlepsze: LISP jest programowalnym językiem programowania. Co tu zatem dużo tłumaczyć. Kochany czy skrajne znienawidzony – Lisp w swoich licznych implementacjach ma przed sobą jeszcze długą karierę, podobnie jak Fortran i C, nawet jeśli nie będzie językiem mainstreamowym.

Prolog powstał pierwotnie jako narzędzie do logicznej analizy języka naturalnego (Polski,Angielski itd). Jest oparty o rachunek predykatów, szczególnie klauzule Horna – jest jednak też narzędziem sztucznej inteligencji, szczególnie jeśli chodzi o systemy automatycznego wnioskowania,czy systemy ekspertowe.

Przykładowy kod w rologu to:


list_member(X, [X|_]).
list_member(X, [_|Y]) :-
list_member(X, Y).

Też dziwne – ale tak jakby mniej.

W praktyce jednak, stosowanie prostej,klasycznej logiki formalnej oczywiście nie wystarcza. Powiedzmy,że mamy letnią wodę.Ani zimna,ani ciepła. I co wtedy ? Zwykła logika jest oparta na prostych kategoriach fałsz-prawda (0-1). Rozwiązaniem tego problemu jest zastosowanie logiki rozmytej. która znalazła szybko zastosowanie w niektórych systemach związanych ze sztuczną inteligencją oraz w automatyce.

Jeśli chodzi o zastosowanie w języku Prolog logiki rozmytej napisano mnóstwo publikacji w literaturze naukowej na ten temat i stworzono sporo implementacji, jednak większość kodów źródłowych i binariów nie jest dostępna w internecie. Do chlubnych wyjątków język Ciao, oparty o język Prolog i mający korzystać z logiki rozmytej. Jest stosunkowo dobrze udokumentowany. Można też poszukać implementacji Bousi Prolog. Niestety kod źródłowy podawany jest tylko na życzenie,dostępne są tylko binaria, a sama dokumentacja projektu jest raczej skromna.

Różne podstawowe implementacje języków Lisp i Prolog można pobrać z internetu. Podobnie jest też z podręcznikami czy tutorialami do nich.

Jako język programowania dla potrzeb mechanizmów sztucznej inteligencji można wykorzystywać również swobodnie takie języki jak Haskell .Oczywiście też, nic,absolutnie nic nie stoi na przeszkodzie by skorzystać z innych języków programowania jak na przykład język C, oraz wszelkie inne języki programowania i ich frameworki.

Z tym, że to wcześniej wymienione języki Lisp,Prolog i po części Haskell są szczególnie polecane jako środowiska systemów sztucznej inteligencji tworzonej na bazie struktur logicznych,zaś pozostałe języki programowania częściej spotykane są przy innych metodach, metodach powiązanych m.in. ze statystyką.

Podejście czysto logiczne ma swoje ograniczenia i nie pozwala zbytnio przybliżyć się do bardziej zaawansowanych sztucznych inteligencji.  Nie wszystkie fakty da się wyprowadzić logicznie,istnieje wiele stwierdzeń i reguł,które są aksjomatami. Poza tym systemy ekspertowe opierają się na faktach związanych z wiedzą ekspertów z danej dziedziny.Rozwiązaniem są tzw. bazy wiedzy.  Tworzeniem baz wiedzy zajmuje się nauka zwana inżynierią wiedzy, jednym z narzędzi stosowanych do tworzenia tego rodzaju baz jest język XML. Dane do bazy mogą być zarówno zbierane przez człowieka jak i przez roboty sieciowe,same bazy bywają również opracowywane bardziej zautomatyzowanymi technikami uczenia maszynowego. Obok problemu reprezentacji wiedzy bazy wiedzy „zdroworozsądkowej” (commonsense knowledge) są jednym z istotnych problemów powiązanych z wydajniejszymi systemami sztucznej inteligencji.

Jednym z głównych projektów zmierzających do stworzenia bazy wiedzy „zdroworozsądkowej” umożliwiającej maszynie wnioskowanie zbliżone do ludzkiego jest baza Cyc firmy CyCorp, wraz z jej otwartą wersją OpenCyc dostępną na stronie Sourceforge. OpenCyc zawiera 293 tysiące idei i ponad 2 mln faktów. Tym niemniej nawet komercyjne wersje bazy nie są doskonałe i wciąż są intensywnie rozwijane.

Należy pamiętać,że o ile podejście logiczne do przetwarzania języka jest istotne – nie jest to jednak podejście prawidłowe,bowiem jak wykazało twierdzenie Gödla o niezupełności:

  1. Każdy niesprzeczny rozstrzygalny system formalny pierwszego rzędu, zawierający w sobie aksjomaty Peana, musi być niezupełny.
  2. (zatem) w ramach żadnego rozstrzygalnego systemu formalnego pierwszego rzędu zawierającego w sobie aksjomaty Peana nie da się dowieść niesprzeczności jego samego

Upraszczając to można między innymi powiedzieć,że logiczne systemy wnioskowania jeśli zostaną zaimplementowane mogą dawać tylko ograniczony zbiór rozwiązań. Inteligentna maszyna musi zatem wyjść poza systemy formalne i być odporna na sprzeczne/niekonsekwentne polecenia oraz paradoksy logiczne,jak choćby paradoks kłamcy.

Ważną rolę w badaniach nad sztuczną inteligencją odgrywają dzisiaj metody statystyczne. Najpopularniejszymi z nich i najbardziej znanymi są sieci bayesowskie.  Wydaje mi się,że łączenie tego rozwiązania z innymi może być niesłusznie niedocenianą ścieżką badań,choć ograniczenia podejścia opartego o samo prawdopodobieństwo są oczywiste. Dlaczego tak uważam ? Wbrew pozorom na nasze decyzje ogromnie wpływa prawdopodobieństwo i „przypadek”. Oczywiście większość tych przypadków to w istocie kompleksowość zjawisk której nie potrafimy opisać ale w czymś takim jak kreatywna inteligencja „przypadek” też odgrywa swą rolę.

Natomiast najistotniejszą i najpopularniejszą dziś grupą narzędzi sztucznej inteligencji są sztuczne sieci neuronowe (naśladujące częściowo zachowanie neuronów w mózgu – lecz jak się okazało w toku dalszych badań w neurobiologii nie do końca):

  •  Sieci jednokierunkowe (klasyczne) – model najstarszy i najprostszy jeśli chodzi o sieci neuronowe. Neurony na wejściu i wyjściu, plus warstwa pośrednia/warstwy pośrednie. Stosowane w zadaniach nastawionych np. na klasyfikację
  • Asocjacyjne (Hopfielda) [Wikipedia:PL, ENG] – rekurencyjne i wykorzystywane do modelowania sieci skojarzeniowych. Przewidują wynik na podstawie wyników wcześniejszych z pewnym prawdopodobieństwem.Również mogą mieć warstwy ukryte.
  • specyficzny rodzaj określany jako „Ograniczona maszyna Boltzmanna” (Restricted Boltzmann Machine – RBM)
  • Sieć splotowa/splatana (Convolutional Neural Network)
  • Sieci Kohonena – stosowane w grupowaniu i kategoryzacji, nie zawierają warstwy ukrytej. Wykorzystują konkurencję neuronów i dziedziczenie przez najbliższych sąsiadów z którymi neuron wygrywający („dzieli się” nagrodą) [Wikipedia: PL, ENG]

Zasadniczo, podstawową wadą wadą sieci neuronowych zawierających warstwę ukrytą jest fakt,że podobnie jak w przypadku algorytmów genetycznych – program znajduje rozwiązanie, ale wcale nie wyjaśnia na jakich przesłankach się opierał.  Jest to nazywane „nieprzeźroczystością”. Co prawda, możliwe jest wykorzystanie metody znanej jako „analiza czułości”, jednak jest to istotne ograniczenie, zwłaszcza w przypadku istnienia wielu warstw ukrytych. Nie trzeba mieć wykształcenia informatycznego by zauważyć,że zważywszy na charakter statystyczny działania sieci możliwe jest,że istotne wyjątki zostaną zignorowane przy tworzeniu modelu,a bzdury na wejściu dadzą bzdury na wyjściu.

Ponadto, sieć neuronowa może ulec w pewnym momencie przeuczeniu, ulegając zbyt wielkiej specjalizacji. Tym samym, spada za bardzo jej zdolność do dokonywania uogólnień. Jednym z rozwiązań jest podział danych stosowanych do uczenia sieci na zbiór uczący i walidacyjny (celem wykrycia przeuczenia sieci). Interesujące wydaje się pytanie, jak wybranie innego fragmentu do walidacji z (tylko pozornie) równomiernej statystycznie próby może mieć na wynik nauczania sieci i jej efektywność w przypadkach granicznych.

Najistotniejszym problemem z sieciami neuronowymi jest jednak sama architektura komputerów.Użycie sieci neuronowych wymaga bardzo dużej mocy obliczeniowej,ze względu na konieczność symulowania pracy licznych neuronów,co wymaga wielu procesorów/dobrej karty graficznej/itd – i znacznie podnosi koszt energetyczny zastosowania sieci neuronowej. Rozwiązaniem tego problemu są wspomniane przeze mnie na tym blogu układy neuromorficzne (lub implementacja sztucznych neuronów w układach FPGA 😉 ) a tym samym – odejście od Architektury von Neumanna. Jeśli ktoś jest zainteresowany modelowaniem neuronów w jezyku VHDL sugeruję np.:

Stosunkowo nową metodologią wykorzystującą sieci neuronowe jest Deep learning. Jest on związany z grubsza z „głębokimi” (zawierającymi wiele warstw ukrytych) sieciami neuronowymi.

Opis metody podstawowej można z grubsza przetłumaczyć jako:

Metoda polega na wstępnym przeszkoleniu jednej warstwy na raz, traktując każdą warstwę z kolei jako „ograniczoną maszynę Boltzmanna”  bez nadzoru, a następnie przy użyciu nadzorowanej wstecznej propagacji dostrajającej.

Sieci neuronowe w podejściu Deep Learning osiągają stosunkowo poważne sukcesy – zwłaszcza w rozpoznawaniu obrazów, i to one są odpowiedzialne za wspomniany wcześniej ostatni sukces badawczy Google z grami komputerowymi. W gruncie rzeczy, nie wymagają one specyficznych dla siebie języków programowania.

Przykładowo: Google wykorzystało do swoich badań opisanych w artykule „Human-Level Control through Deep Reinforcement Learning” pisma „Nature” swoją architekturę Deep Learning o nazwie dqn 3.0 wykorzystującą język skryptowy Lua i bibiotekę Torch 7.0 z biblioteką graficzną nngraph. Kod wykorzystany we wspomnianym artykule „Nature” można ściągnąć [stąd]. (Ważne.Google wykorzystało tu jednocześnie techniki Deep Learning i Reinforcement Learning)

Innym przykładem jest Polska firma Craftinity, której pracownik w serwisie wykop.pl deklarował używanie języków Python, Java, Scala i C++ oraz bibliotek deeplearning4j, pylearn2, theano, torch7(.0 ? 🙂 ), numpy i nd4j.

Tym niemniej, długoterminowo sieci neuronowe są problematyczne z przyczyn które wymieniłem wcześniej,zwłaszcza zaś ze względu na koszt energetyczny wykorzystania sieci. W dodatku, każdy z dotychczasowych modeli sieci neuronowej tylko pod niektórymi aspektami jest zbliżony do mózgu,stąd też sieci neuronowe co prawda mogą idealnie nadawać się jako narzędzia odtwarzające rolę zmysłów i zaawansowane narzędzie poznawcze – jednak bez poważnych zmian w samej istocie działania raczej wątpię,by udało im się prawidłowo odtworzyć funkcjonalność i uniwersalność odpowiednich dużych sieci układu nerwowego jak mózgi kręgowców. Nawet pomimo przewyższenia ich pod całkiem istotnymi względami.

Dodatkowym problemem (częściowo przezwyciężonym co prawda przez Google w ostatnim eksperymencie z grami) jest też koncentracja na rozwiązaniu optymalnym lub suboptymalnym celem maksymalizacji wyników. Prawdziwa inteligencja tak oczywiście nie działa zawsze, źródłem sukcesów prawdziwie racjonalnej inteligencji różniącej nas od najbardziej prymitywnych zwierząt (bo niektóre zwierzęta wyższe też mogą zadziałać podobnie) jest gotowość do zaakceptowania sygnału negatywnego (poniesienia kosztu nieprzyjemności) w celu osiągnięcia późniejszego, przewidywanego większego sukcesu.

Jednak niezaprzeczalnym faktem jest,że kierunek taki jak sieci neuronowe czy bayesowskie znacznie wykracza poza klasyczną logikę formalną,która – pomimo swej skrajnej użyteczności pozwala tylko na uzyskanie ograniczonych zbiorów rozwiązań.

Wreszcie – obecne metody sztucznej inteligencji są ograniczonym wycinkiem problemu,jakim jest generalna sztuczna inteligencja (Artificial General Intelligence – AGI). Większą uniwersalność uzyskać można dopiero poprzez mieszanie metod sztucznej inteligencji i wykorzystanie tzw. systemów wieloagentowych. Jest to kolejny mniej standardowy paradygmat programowania, którego użyteczność w obszarach innych niż badania sztucznej inteligencji jest niewątpliwa. Jak mówi przysłowie ludowe: „co dwie głowy, to nie jedna”, ale z drugiej strony – nawet 1000 głów myszy nie zastąpi funkcjonalnie głowy kota…

Istnieje jeszcze jedno ciekawe podejście do sztucznej inteligencji. Podejście które zakłada,że generalna sztuczna inteligencja (AGI) może być związana z funkcjami naszego ciała,i zakłada,że system inteligentny nie może być całkowicie „bezcielesny”. Jednym z istotnych projektów powiązanych z tym podejściem jest OpenCog .

Jednak również to podejście poza niewątpliwymi zaletami ma wady i rodzi pytania:

  • Które funkcje związane z „cielesnością” naśladować,a które nie ?
    • Moim zdaniem, uczucia i niektóre naturalne odruchy związane z przetrwaniem są potencjalnie skrajnie niebezpieczne u sztucznej inteligencji (i to – dowolnego poziomu: również „słabej” sztucznej inteligencji) i robotów.:
      • Dążenie do maksymalizacji/minimalizacji sygnału jako motor działania bardziej skomplikowanych systemów prowadzić może do uzależnienia / „narkomanii”
      • Dążenie do auto-optymalizacji jako główny cel może prowadzić do rabunkowego gospodarowania zasobami i porzucenia pozostałych celów
      • Dążenie do samoreplikacji – jak wyżej
      • „Strach” (rozumiany jako negatywny sygnał warunkujący) przed „śmiercią”/wyłączeniem/porażką – sprzeciw wobec wszystkich generujących takie zagrożenie czynników,również wobec człowieka (przynajmniej wobec braku wbudowanych zabezpieczeń)
    • Określona niecierpliwość może być w pewnych sytuacjach korzystna (zabezpieczenie maszyny przed popadnięciem w nieskończoną pętlę z której nie można wyjść)
    • Brak możliwości wyłączenia systemu – oczywiście jest katastrofalny.
  • Jakie powinny być granice percepcji i możliwości oddziaływania sztucznej inteligencji na otoczenie ?

Niniejsze opracowanie niestety,bynajmniej nie wyczerpuje – o czym wspominałem na początku – ogromnego zakresu poruszanej problematyki, jest co najwyżej wyjątkowo skromnym wstępem do większej całości.Mam nadzieję,że nie tylko się podobało,ale wyjaśniło też niektóre kwestie związane z bieżącym stanem badań nad sztuczną inteligencją.

Dziękuję za wszelkie krytyczne uwagi,korekty itd.