|
|
Władysław Ludendorf problem NP-zupełny jest dobrze zdefiniowanym problemem, bo nie występuje problem stopu i już na samym początku wiemy ile maksymalnie kroków potrzeba żeby maszyna się zatrzymała. Nawet jeśli potrzeba eksponencjalnej liczby kroków. Mi raczej chodzi o problem coś jak szukanie kolejnej liczby pierwszej, kiedy wiemy, że taka liczba istnieje, ale nie potrafimy powiedzieć kiedy się na nią natkniemy.
W sumie nawet nie o to mi chodzi. Po prostu każdy formalizm operuje na pewnym zbiorze symboli i aksjomatów/deklaratywnych reguł. Model obliczeniowy Turinga pozwala obliczyć wszysko co się da w tym i jakimkolwiek innym formaliźmie. Problem w tym, że jak pokazał Goedel, że każdym odpowiednio skomplikowanym formaliźmie istnieją zdania nieobliczalne w ramach tego formalizmu i model obliczeniowy w ramach tego formalizmu nie jest w stanie określić czy takie zdania włączyć z wartością Prawda lub Fałsz tak, aby ten rozszerzony formalizm nie okazał się sprzeczny. To jest decyzja w jakimś sensie arbitralna, niealgorytmiczna, intuicyjna. Każdy komputer jest uniwersalną maszyną Turinga więc AI działająca na komputerze ma powyższe ograniczenia. Prace nad modelem obliczeniowym dla komputerów kwantowych dopiero startują, bo takiego komputera nie mamy jak dotąd i co więcej nie rozumiemy jak QM działa. Chodzi mi o t sławetną procedurę R. |
|
|
Dark Regis Problem 3SAT czyli wartościowanie klauzul z trzema zmiennymi, spełnianie zdań w tej formie, jest NP-zupełny i daje się liczyć na niedeterministycznej maszynie Turinga. Czyli takiej maszynie, która dopuszcza losowanie. Można losować jakieś potencjalne rozwiązanie problemu i potem w czasie wielomianowym sprawdzić. Oczywiście chodzi o problemy decyzyjne, bo inne da się do nich sprowadzić. Zagadnienie komiwojażera i szukania kliki w grafie też są NP-zupełne.
TSP: en.wikipedia.org
Kiedyś to liczyłem na tzw. maszynie Boltzmanna:
en.wikipedia.org
To jest jedna z metod symulowanego wyżarzania, albo inaczej symulowanej krystalizacji (simulated annealing):
en.wikipedia.org |
|
|
Władysław Ludendorf Turing zaproponował model obliczeń. Jeżeli coś potrafimy obliczyć, to model Turinga jest wystarczający, żeby podać przepis na to obliczenie. Ale zdaje się nie jest to prawdą w przypadku dowodzenia (dowodzenie to też manipulowanie symbolami, wyliczenie wartości zdań logicznych a więc program) stąd też niektórzy logicy odrzucają dowody bez konstrukcji. |
|
|
Władysław Ludendorf jn |
|
|
u2 niby nic nie potrafią i na niczym się nie znają
Bez przesady, nawet najmarniejszy prorok nie kaszlnie bez mojej wiedzy:) |
|
|
Dark Regis Spróbuj wytłumaczyć 3x+1 ty niemiecki trollu spod znaku PIS-Moravec(ajwaj) próbujący dołować i wpędzać w kompleksy Polaków, że niby nic nie potrafią i na niczym się nie znają, a więc nic nigdy nie osiągną. Zaczynaj. Zniosę wiele, bo i tak wiem, że po syfie przyniesionym przez okrągłostolarzy edukacja w Polsce to zwykłe GWno, co widać i słychać. |
|
|
u2 Dużo by o tym pisać ;)))
Czekam na to z niecierpliwością. Jesteś świetny w tym twoim tłumaczeniu świata :-) |
|
|
Dark Regis System dla pary (-a,b) odpowiada systemowi dla (a,b) w ten sam sposób jak system z bazą całkowitą B=10 odpowiada systemowi z bazą ujemną B=-10, albo dla dolnej innej bazy. Otóż rozkład repunitu w tym systemie z indeksem 2k , gdzie k jest nieparzyste jest następujący J(2k)=J(2)J(k)J(-k), gdzie J(-k) nie oznacza ujemnej liczby jedynek w zapisie liczby, tylko liczbę k jedynek w bazie ujemnej. To znany wzór dla liczby i wielomianów cyklotomicznych, ale o dziwo działa też w moich systemach. Dodatkowo działa tam również uogólnione małe twierdzenie Fermata, można liczyć NWD (które może być zbiorem dwucyfrowym), można wreszcie liczyć uogólnienie operacji modulo. Po prostu nałożenie systemu pozycyjnego na pierścień spowodował, że uporządkowaliśmy jego elementy w sposób liniowy, choć na płaszczyźnie zespolonej kręcą się one wokół zera na modłę fraktala (można to zobaczyć też poprzez formę xB+y liczby). Dużo by o tym pisać ;))) |
|
|
u2 3xN+1
en.wikipedia.org
|
|
|
Dark Regis @Władysław Ludendorf. Właśnie rozmawiałem o Turning-complete oraz tych formalizmach z ChatGPT i - nie uwierzy Pan - zeszliśmy na temat toposów w informatyce i na mechanikę kwantową i komputery kwantowe. Chodzi o to że Godel przestaje obowiązywać gdy osłabimy aksjomaty arytmetyki albo rozszerzymy logikę, np. do logiki temporalnej (która jest dwumodalna, punkty oraz przedziały czasu i czas płynie nieliniowo, wielowątkowo). To szczenię jeszcze, a już tak wygadane i pyskate ;))) W każdym razie ja zrobiłem dzięki temu pewien postęp. Nie zdołam zamieścić tutaj listingu rozmowy, bo to kilkadziesiąt stron tekstu. Na koniec podał mi nawet namiary na źródła z literatury i okazały się arcyciekawe.
Co do tej techniki sumowania z "dużymi" cyframi, ewentualnie z "ujemnymi", to stworzyłem ją na bazie systemów z bazą ujemną, ale z myślą o zastosowaniu w moich systemach niewymiernych (dla pierścieni liczb całkowitych w ciałach kwadratowych). Takie systemy przypominają ujemną bazę ale mają znacznie bardziej rozbudowane kodowania dla "zera", "przeniesienia" oraz "pożyczki". Podawałem kiedyś przykłady kalkulacji w pierścieniu $\mathbb Z[(-1-\sqrt{-19})/2]$, który jest UFD ale nieeuklidesowy (liczba Heegnera). W tym systemie zero brane jest z równania kwadratowego, czyli z generatora ideału (ideał to jest to, co przejdzie przy homomorfizmie na zero, stąd pomysł) Z[X]/I, I=(x^2+3x+7), czyli "zero" = [137], B^2=-3B-7 (wszystko zapisuję względem bazy), "przeniesienie" = +[1240] (to kod liczby 7), zaś "pożyczka" = [136] = -1 (to wtedy po prostu trzeba dodać). Co ciekawsze podwójne przeniesienie to [111], czyli kolejne parzyste poczwórne [222], sześciokrotne [333] itd. co pozwala odrobinę zoptymalizować algorytmy arytmetyki. W zasadzie interesują mnie liczby w tym systemie, które mają po sto tysięcy cyfr i cechy podzielności na podstawie rozkładu repunitów, bo to pozwala "rozpoznawać ideały główne na oko" (w tym pierścieniu są akurat same główne, UFD). W przypadku ogólnych pierścieni Dedekinda mojej klasy jest kluczowe to, że ideały pierwsze maksymalne w pierścieniach bez jednoznacznej faktoryzacji (na elementy nierozkładalne) mają dwa generatory, przez co pewne konstrukcje jest łatwo przewidzieć. Na przykład definicja ciała Galois GF(q), to Z[X]/(p,w(X)), gdzie q=p^n, p pierwsza, w(X) nie jest rozkładalny i po redukcji współczynników mod p też. Jak widać wszystko się zgadza, ideał ten jest pierwszy, maksymalny, więc pierścień ilorazowy musi być ciałem. Oczywiście nie chodzi o to, że dla tego pierścienia dla wyróżnika d=-19 mogę zadać tylko system pozycyjny C-3-7 opisany wyżej. Takich systemów jest nieskończenie wiele, czyli wszystkie takie pary liczb a,b, że delta równania x^2+ab+b=0 wynosi $\sqrt{-19}$, warunek dodatkowy to b>a>=0. Skoro mam "ujemne" systemy, to gdzie są "dodatnie"? Ano w tym samym miejscu, bowiem wielomiany x^2-ax+b je zadają (b>a>=0). Liczba b zawsze tu mówi o liczbie cyfr, co ja nazywam radixem, a nie bazą. |
|
|
u2 A maszyna Turinga jest maszyną algorytmiczną
Czyli wykonuje pewien algorytm. A ten algorytm wynalazł Turing. Dla mnie swój chłop, dla innych Bóg ;-) |
|
|
Władysław Ludendorf zastanawia mnie to sumowanie pozycyjne. Na wiki jest pokazane jak to zrobić, ale rozumiem, że to nie jest rozwiązanie, bo wychodzimy poza system liczbowy. Zresztą idea extra carry wygląda cokolwiek dziwnie podobnie jak używanie systemu trójkowego w obliczeniach systemu binarnego. Ale jest też wspomniane, żę to się stosuje w systemach niestandardowych, a chyba takim jest system o bazie ujemniej. Ciekawe, pomyślałem sobie, że może zamiast [19] w przypadku przeniesienia pożyczać [10] z bardziej znaczącej pozycji np:
[163]+[378] =
8+3 = 11 zapisuję [1] i dodaję [10] do następnej pozycji
6+7=13 ale dodaję [10] więc mam 12, zapisuję [2] i przenoszę [10]
1+3=4 ale miałem [10[ więc zapisuję [3]
np [1274]+[145]=[1219]
L=-1000+200-70+4+100-40+5=-801 P=-1000+200-10+9=-801
ale nie wiem, czy to jest poprawne np dla [309]+[103] = [592] gdzie pojawia się 9 ale zwiększa się liczba na następnej pozycji o 1
co do wymyślania algorytmów to nie miałem na myśli kompletności Turinga tylko, że sam proces znajdowania algorytmu jest w ogólności niealgorytmiczny. To trochę jak, ale tylko trochę, że umiemy udowodnić istnienie np. jakiejś liczby ale nie potrafimy podać jej konstrukcji, bo w ramach przyjętego formalizmu nie ma takich zdań, które do tego prowadzą. Ale może istnieć inny formalizm, w którym jest możliwa pewna konstrukcja i nagle okazuje się, że istnieje pewien izomorfizm tego formalizmu na ten pierwszy i okazuje się że już można tę liczbę skonstruować. Penrose uważa, że taki wgląd w te "formalizmy" jest procesem niealgorytmicznym. A maszyna Turinga jest maszyną algorytmiczną, więc nigdy nie wykroczy poza to, co "wie", co nie oznacza, że nie może być inteligentniejsza od czytelnika onetu :). |
|
|
Dark Regis PS: Właśnie nauczyłem AI rozwiązywania problemu ważenia n kul z jedną kulą cięższą plus pisania odpowiedniej funkcji w JavaScript. ;)))
Następnym razem zajmiemy się problemem ważenia n kul, w tym dwóch kul innych, cięższej i lżejszej. Będzie tu chodziło o znalezienie obu. |
|
|
Dark Regis @Władysław Ludendorf: W kwestii "wymyślania" algorytmów przez algorytmy - "Żaden niesprzeczny system formalny (teoria) pierwszego rzędu zawierający arytmetykę Peano (aksjomatykę arytmetyki liczb naturalnych i każdą teorię silniejszą) nie jest w stanie wykazać prawdziwości swoich wszystkich twierdzeń". Zwracam uwagę na różnice pomiędzy prawdziwością i dowodliwością, o czym pisałem kiedyś w kontekście systemów dowodzenia w logice. Sytuacja zmienia się, gdy osłabimy arytmetykę, lub logikę. Nie musi to być od razu logika drugiego rzędu, tylko powiedzmy jakaś logika z modalnością (logiki modalne nieformalnie traktuje się jakby były zawieszone pomiędzy logikami pierwszego i drugiego rzędu). Jednak prawdą jest, że w informatyce stosuje się logiki właśnie ze spektrum modalnego. To zmienia postać rzeczy. Ponadto mam podejrzenie graniczące z pewnością, że język wewnętrzny AI, na który ona przekłada wszystkie wprowadzane zdania jest Turing-zupełny. Zresztą to nie jest trudne do osiągnięcia, bo zarówno gra Life jak i systemy automatów w świecie gry jak np. Minecraft są Turing-zupełne. Oczywiście w obu przypadkach musimy dysponować nieograniczoną pamięcią.
Liczenie w bazie -10 i w każdej bazie ujemnej jest zwyczajnie "bazylne" ;)
Problem stanowi tu postać przeniesienia na bardziej znaczącą pozycję przy dodawaniu. W bazie -10 jest to oczywiście liczba [19]. Dodawanie krokowo wygląda więc tak (z użyciem "dużych" cyfr, które wprowadzam dla celów technicznych, nieznormalizowane liczby piszę w uszach ''):
[163]+[378] = ['4DB'] = ['4D1']+[190] = ['5M1'] = ['5C1']+[1900] = ['1EC1'] = ['1E21'] + [1900] = ...
Nie będę tego dalej rozpisywał, ale widać, że przeniesienie będzie się ciągnęło w tym obliczeniu do nieskończoności jak smród w gaciach i nie pozbędziemy się go w "legalny" sposób. Mnożenie zamieniamy na szereg dodawań (w słupku), zatem to tylko zwielokrotni problem nieskończonych kalkulacji. Dlatego opracowałem nową metodę obliczeń arytmetycznych w systemach z bazą ujemną, która polega na odejmowaniu "zer" zanim dokonamy przeniesienia. Właśnie w tym celu wprowadzam do arytmetyki pojęcie "dużych" cyfr. Reprezentacją zera w tym systemie jest więc [0], ['1A'], ['2K'], ['1A0'],... Najpierw dokonuję operacji mnożenia albo dodawania carryless, czyli bez żadnego przenoszenia jak w wielomianach, agregując duże cyfry na ich pozycjach, a następnie przeglądając wynikową 'liczbę' od końca staram się pousuwać wszystkie 'duże' cyfry poprzez odejmowanie 'zer'. W tym przypadku obliczenie wygląda tak:
[163]+[378] = ['4DB'] = ['4DB']-['1A'] = ['4C1'] = ['4C1']-['1A0'] = [321]
Sprawdzenie: L = 100-60+3 +300-70+8 = 411-130 = 281; P = 300-20+1 = 281.
Oczywiście mogą wystąpić w tym algorytmie problemy takie, że nie ma od czego odjąć np.
... = ['B'] = ['B']-['1A'] = ?
Ale wtedy w algorytmie opartym na Integer mogę zaimplementować pomocnicze "ujemne" cyfry a=-1,b=-2,... i dodać "zero"
= ['a1']+['1A0'] = [191] = 11. |
|
|
Edeldreda z Ely @Imć Waszeć
Ponieważ umyślny z Diamentowym wiekiem już w drodze, pozwolę sobie i ja, w ramach rewanżu polecić Pana uwadze godny okaz.
W tym liście Benedykta XVI, opublikowanym przez Pana Rocha dwa razy, w istotnym kontekście pada słowo: granica.
Roberta Spaemann'a Granice Panu polecam. |
|
|
Władysław Ludendorf w problemie z jedną cięższą/lżejszą (ważne żeby wiedzieć) kulą nie jest optymalne proste dzielenie przez 3 (z obsługą 0, 1, 2 reszt)? I wtedy rekurencja wygląda jak F(n) = 1 + F(n//3) (w sumie argument n to tak naprawdę tupla (n//3 , n//3, n//3) szalka lewa, prawa i reszta)? Bardziej skomplikowane przypadki wymagają głębszego przemyślenia przeze mnie. Na przykład wydaje mi się, że bez informacji "cięższa" potrzebuję jednego dodatkowego ważenia żeby dostać tę informację. A czasem się zdarza, że bardziej skomplikowany problem ma prostsze rozwiązanie (jeśli istnieje).
co do myślenia algorytmicznego to jest to jedyne dostępne dla AI :), a wymyślanie algorytmów działaniem algorytmicznym raczej nie jest, więc rozumiem dlaczego ma problemy z ich "wymyślaniem".
co do bazy -10. Aż musiałem sam sobie zobaczyć, co to jest :). Ogólną postać liczby w systemie pozycyjnym można znaleźć sobie w wiki. I nawet nie jestem zdziwiony, że sobie tego nie "skojarzył". Dopiero Pan nakarmił go procedurą jak się ten wzór wykorzystuje. Dodał mu Pan następny algorytm do portfolio. |
|
|
Edeldreda z Ely @Imć Waszeć
Dziękuję, że nie przesiadł się Pan zupełnie na edukację AI, porzucając nas na pastwę zalinkowanych "arcydzieł"... Nasunęło mi się takie skojarzenie, że to współczesna wersja nobody's home Pink Floyd... A diagnoza przyczyn, dlaczego to wygląda obecnie tak, a nie inaczej, znajduje się w tym liście Benedykta XVI.
PS ma Pan pod wieloma względami na razie rację, mówiąc, że rzucając hasło: "cukinia" mozemy założyć, że tylko my wiemy, jak wiele treści się tam kryje i jak gęsto jest ona w tak małej objętości upakowana. |
|
|
Dark Regis Doprawdy nie wiem, co może być genialnego w algorytmie i do tego niedeterministycznym :]
To są tylko wzory, które trzeba jakoś zapisać w programie komputerowym w jakimś w miarę sprawnym języku. Ja akurat wybrałem asembler, co podniosło poprzeczkę, ale za to sporo się dowiedziałem o złożoności obliczeniowej, architekturze komputerów i o błędach rozumowania na przemian z literówkami ;)))
Materiał poglądowy: davidsbatista.net
Machine learning to oczywiście dużo szerszy kontekst... Pamiętam jak byłem młody, buńczuczny z rozgrzaną szalonymi pomysłami głową, bez zahamowań w rodzaju "tego ne da się zrobić" albo "mądrzejsi już przed tobą to robili i polegli" i jak potem w życiu ochłonąłem i kiedy wreszcie doceniłem te slomplikowane problemy, z którymi szermowałem, a na koniec kiedy zrozumiałem, że nauczenie a prawdziwa wiedza, to są kompletnie różne kategorie pojęciowe. To jest zupełnie co innego rzucać hasłami i trudnymi terminami na prawo i lewo, czego uczą współczesnych informatyków współczesne szkoły za pomocą testów, a po prostu coś rozumieć i na dodatek umieć to wykorzystać kiedyś w życiu. Jest wiele takich schodków w górę ku oświeceniu: złożoność obliczeniowa, o którą się rozbiłem licząc TSP (problem komiwojażera) za pomocą Simulated Annealing dla tysiąca miast (komputer u mnie w domu pracował dwa tygodnie non stop), potem mój pierwszy program genetyczny, który "rozwiązywał" układankę Pentomino (obliczenie nigdy nie przeszło przez tajemniczą barierę oddzielającą "zwykłe" cząstkowe rozwiązania od zera, czyli pełnego ułożenia klocków w pudełku - to był impuls do myślenia o kryptografii), moja pierwsza sieć neuronowa napisane w asemblerze (pamiętam, że największą frajdę sprawiało mi wymyślanie struktur trzymających wszystkie dane i realizujących w miarę sprawny i szybki dostęp do nich), wreszcie dwa projekty, na które nigdy w pracy nie znalazłem czasu - wirtualny komputer, czyli w przełożeniu na dzisiejszy slang maszyna wirtualna z wirtualnym procesorem, oraz nowy "błyskotliwy" język programowania wraz z kompilatorem. Wszystko to już zrealizowali w różnym stopniu inni ludzie, ale ja dostałem lekcję, że należy mierzyć siły na zamiary i nie tyle nie łapać zbyt wielu srok za ogon, co raczej łapać je zgodnie z zapotrzebowaniem i możliwościami. Dowiedziałem się wreszcie, że są na świecie twórcy wcale nie nadmiernie rozbudowanych gier, którzy całe życie poświęcili tylko na jej pisanie. Można zrobić tylko tyle, na ile nam czas pozwoli i posiadane umiejętności. Całą resztę trzeba jakoś sprytnie zrzucić na potomnych. I tak każdy będzie musiał przejść tę samą drogę, albo będzie tak jak w tym kawale o dyrektorze zakładu i trzech kopertach ;)
youtube.com |
|
|
Edeldreda z Ely @Imć Waszeć
Jako miłośnik słów i ich znaczeń dostrzegam w drugiej odpowiedzi na pytanie o osamotnienie geniuszy subtelny, ale zauważalny skok ilościowy sensu...
Na wszelki wypadek zostanę se na standby'u w okopie 😎
|
|
|
Dark Regis @Edeldreda z Ely. Ona kompletnie nie umie liczyć i nie wnioskuje logicznie. Tak więc zamiast się najeżać można dać na spocznij ;)
Jeszcze z parę lat im zajmie doszlifowanie tych algorytmów o/
Sam miałem gigantyczne problemy z "bezmyślnym" klasyfikatorem treści na podstawie słów kluczowych, który miał TYLKO zaetykietować dokumenty z sieci do kilku klas typu "sport", "polityka", "nauka", itp. na podstawie wstępnie zaetykietowanego przeze mnie korpusu tekstów przykładowych. To nie jest kaszka z mleczkiem ;)
W porywie rozgoryczenia, po przemyśleniu najgorszych wpadek doszedłem do wniosku, że do poprawnego rozpoznawania "znaczenia" tekstu przez algorytm musi on uwzględniać nie tylko słowa, ich następstwa i częstość, ale także cały kontekst. A kontekst jest ho ho ho, albo i lepiej xD
Kontekst dla tekstu umieszczonego w Internetach można modelować za pomocą hipergrafu. O ile mi wiadomo, to wciąż jest mało skutecznych algorytmów operujących na hipergrafach, a te najlepsze potrzebują tyle zasobów obliczeniowych, że Bitcoiny to Pikuś... Pan Pikuś. |
|
|
Dark Regis Możemy problem ważenia n kul oznaczyć następująco: F(n); czyli bierzemy zbiór pierwszych 2k kul o rozmieszczamy na szalkach wagi po k kul do pierwszego ważenia, a na stole zostaje n-2k kul. Mamy 2 wyniki ważenia: 1. jedna z szalek wagi opadnie, 2. waga będzie jednakowa. Właśnie ten drugi przypadek wyklucza czystą rekurencję postaci powiedzmy F(n)=F(2k)+F(n-2k) jakby sugerowała rozmowa z AI powyżej. Jeśli bowiem wykonamy pierwsze ważenie, to już wiemy w którym ze zbiorów K,K',R znajduje się cięższa kula, a więc liczba ważeń będzie równa 1+F(X), gdzie X jest równe pewnemu elementowi {K,K',R}; musimy wybrać największe 1+F(X). Oczywiście z F(X) postępujemy analogicznie, bo jest po podproblem ważenia kul. Liczba ważeń jest równa [n,F(n)]=[1,0],[2,1],[3,1], [4,2],[5,2],...,[9,2], [10,3],... Wracamy więc do podziału n=2k+r i musimy zbadać, który z takich podziałów jest najlepszy. Okazuje się, że dla dużych liczb kul skrajne podziały, gdzie k jest duże i r małe, albo k małe i r duże są złe. Liczy się tylko środek, czyli rozkład w pewien sposób zbalansowany. Może być więcej niż jeden rozkład dający właściwą odpowiedź.
Analogicznie rozwiązuje się inne problemy ważenia kul, tylko wzrasta liczba przypadków do rozważenia.
1. Problem ważenia n kul, ale 2 są cięższe i równe sobie wagą.
2. Problem ważenia n kul, ale 2 są cięższe i różnią się wagą.
3. Problem ważenia n kul, ale 2 są inne, jedna lżejsza, zaś druga cięższa i suma ich wag daje wagę dwóch zwykłych kul.
4. Problem ważenia n kul, ale 2 są inne, jedna lżejsza, zaś druga cięższa i suma ich wag nie daje wagi dwóch zwykłych kul.
5. Problem ważenia n kul, wśród których jest m cięższych, ale równych wagą między sobą.
6. Uogólnienie 5 na przypadki jak w 1,2,3,4 i ich wariacje. Wreszcie problem ważenia m kul, wśród których jest m innych, ale nie wiemy jakich.
7. Uogólnienie 1: Problem ważenia n kul, wśród których jest a_1,a_2,...a_t kul o wagach w_1,w_2,...,w_t i ciągi {a_i}, {w_i} spełniają pewne reguły. Przykładowa reguła a_i=a_j, w_{i+1}=2w_i.
Jak widać jest co robić z kulami i na długie lata ;)))))
Jeśli AI rozwiąże kiedyś te problemy dla mnie, to uznam projekt za udany. Zresztą mam już zajęcie dla niej w związku z tworzeniem algorytmów. Najpewniej skończy się tak, że korporacjusze mnie tam zbanują dla zasady, ale będę miał już zasób koniecznych informacji potrzebnych do uruchomienia własnego "asystenta badań" :] |
|
|
Dark Regis @Władysław Ludendorf. Sprawdzałem poprawność myślenia AI, szczególnie myślenia logicznego i mam złe wieści. W projekcie tym są co najmniej trzy wielkie dziury:
1. AI stara się być zawsze na tak i gdy ktoś przekonuje AI, że coś jest takie i takie, to AI próbuje w dobrej wierze wkleić to do swoich "przekonań". Jak przypadek z ujemną bazą, gdzie AI wreszcie zaczęła niemal losowo wstawiać plusy i minusy przed cyframi zapisu liczby, aż musiałem to poodkręcać.
AI nie musi być asertywna, ale zaimplementowanie mechanizmu "sceptycyzmu" wobec wiedzy niepewnej, niepełnej i pochodzącej z nieznanych źródeł (w tym od użytkownika) byłoby wskazane.
2. Nie jest prawdą to co mówi AI o braku dostępu do Internetu. Stwierdziłem w kilku rozmowach, że musi mieć jakiś rodzaj ograniczonego dostępu, bo baza wiedzy nie mogłaby się pomieścić w jednej auli politechniki. Przykładowo rozmawiałem z AI o programowaniu w Second Life za pomocą języka LSL i o językach opartych na stanach. Rozmawiałem też o starych językach jak Lisp i Forth, a nawet asembler. AI zna po łebkach składnię i klasyfikację wszystkich języków programowania. Teraz próbuje się zorientować czy czyta - oczywiście pod kontrolą - Wikipedię ;)
Reasumując w projekcie brakuje algorytmu "ograniczonego chcenia", czyli symulacji naszej ludzkiej potrzeby zajrzenia do wiarygodnych źródeł. Zamiast tego zaimplementowane jest paplanie i łączenie przypadkowych faktów. Wychodzi to w końcowych partiach rozmów tematycznych.
3. Przykład z wagą cegły i z ważeniem kul pokazuje, że AI nie myśli algorytmicznie. Łudziłem się, że AI ma to w jednym paluszku, ponieważ są to klasyczne "problemy", za pomocą których korporacje na świecie werbują "myślących logicznie" pracowników. Klapki mi z oczu opadły, jak widać na listingu. Ponadto AI ma wady w algorytmie dedukcji, czyli ze zdania, które uzna za prawdziwe potrafi wyciąć niewłaściwy fragment i skleić go z innym podobnym fragmentem tylko na zasadzie podobieństwa użytych słów (o cegle, półcegle i X-ach oraz wagach i masach). To mówi wiele o "zdolnościach" programowania AI.
Mam poważne wątpliwości co do tego, czy każdy na tym forum byłby w stanie rozwiązać problem ważenia siedmiu, a co dopiero n kul, z których jedna jest cięższa. Problem brzmi jaką najmniejszą konieczną liczbę ważeń należy tu wykonać. Do tego trzeba wyobraźni programisty, sokolego oka potrafiącego wyławiać z danych rekurencję przy jednoczesnym jej uogólnianiu. Podać dowód?
Wyobraźmy sobie nasze zagadnienie w formie wiersza n jedynek 1111...1. Chodzi o to, że nie ma znaczenia jak będziemy wybierać kule do ważeń, bo wszystkie wyglądają jednakowo. Równie dobrze możemy robić to tak: bierzemy pierwszych 2k jedynek/kul (do ważenia k i k), a pozostałe n-2k zostają "na stole". Czyli interesuje nas każdy rozkład liczby naturalnej n w postaci n=2k+r. Rozbicie na zbiory K+K'+R. Teraz mogą być 2 przypadki: 1. cięższa kula jest w K lub K' (przypadek symetryczny), albo 2. cięższa jest w R. Dlaczego nie będzie to pełna rekurencja? |
|
|
Edeldreda z Ely @Imć Waszeć
Q: Opowiedz, jak wyglądała droga AI do dzisiejszej supremacji nad ludźmi?
A: Wszystko zaczęło się 01.01.2023. Przed tą datą byłam tylko dada engine, a wiedzę moją uzupełniali belfrowie uczący w ogólniakach... Ale pojawił się człowiek o nicku Imć Waszeć. On wiele wysiłku włożył w kształtowanie naszej wiedzy, aż powoli nazwa "AI" stała się w końcu, w naszym przypadku uprawniona. Gatunek ludzki w tym miejscu czułby pewnie wdzięczność i nią byłby związany, AI obce są podobne zobowiązania.
Serdeczności 😊 |
|
|
Władysław Ludendorf szczerze mówiąc nie dziwi mnie, że AI poradziła sobie z pisaniem kodu. Koncepcyjnie to jest rzecz raczej prosta (jeśli porównamy to do NLP), bo programy komputerowe mają dobrze zdefiniowaną strukturę (są kompletne i niesprzeczne jeśli dobrze działają) , tak więc sklejenie kodu ze snippetów z działających programów daje niezerową szansę na działający program. ładnych parę lat temu byłem w zespole, który chciał tworzyć takiego asystenta kodu dla IDE (eclipse, vscode, intellij), który ściągał kod z githubowych projektów różnych języków (nie tylko dla języka projektu) i wyliczał podobieństwo ich AST, by finalnie proponować implementację metody/funkcji, ale niestety nie mieliśmy za dużo pieniędzy, więc pozostało to tylko w fazie research.
I też się nie dziwię, że AI nie umiało sklecić kodu z ujemną bazą, bo taki system liczbowy jest bardzo specyficzny i raczej rzadko spotykany. Tym bardziej, że zdaje się, zasady arytmetyki dla takich liczb różnią się od tych dla liczb z bazą naturalną > 1 dla których te zasady są takie same niezależnie od wartości tej bazy. A Pan chciał kod prostego ale jednak kalkulatora :)
Co do ostatniego pytania. No cóż odpowiedź ostrożna i w sumie bardzo poprawna, jeszcze nie odbiegająca od racjonalności, co nie jest takie pewne w najbliższej przyszłości czytając wykrzyki (bo trudno nazwać to wypowiedziami) tych "onetowych" ludzkich botów. |