Otrzymane komantarze

Do wpisu: AI i koniec człowieczeństwa
Data Autor
spike
Byś się zdziwił, swego czasu przyjaciela, pewien mój znajomy niemiecki biznesmen proponował mu pracę w Niemczech, wysoka pensja + mieszkanie, służbowy samochód z opcją stałego pobytu, okazuje się, że mało jest takich ludzi, tym bardziej, że on znał się nie tylko na programowaniu, ale także na elektronice, potrafił zaplanować, zaprojektować, wykonać i zaprogramować urządzenie, to rzadkość.
Edeldreda z Ely
@Panowie Winszuję i dziękuję. Jestem pod wrażeniem Waszej dzisiejszej dyskusji.    
tricolour
Tylko prehistoryczne - do Z80, Intela 8086, 8051 oraz prekursora wszelkich riscow Rockwella 6502.
Dark Regis
Przykład: Tensor token = ff.embedding(input, llama_config.vocab_size, llama_config.hidden_size, AGGR_MODE_NONE, use_full_precision ? DT_FLOAT : DT_HALF, NULL, embed_init, "tok_embeddings"); Tensor w2 = nullptr; for (int i = 0; i < llama_config.num_hidden_layers; i++) { // set transformer layer id ff.set_transformer_layer_id(i); // step 1: attention Tensor att_norm = nullptr; Tensor token_att_norm[2] = {nullptr, nullptr}; if (i == 0) { att_norm = ff.rms_norm( token, llama_config.rms_norm_eps, llama_config.hidden_size, DT_NONE, std::string("layers_" + std::to_string(i) + "_attention_norm") .c_str()); } else { ff.residual_rms_norm( token, w2, token_att_norm, llama_config.rms_norm_eps, llama_config.hidden_size, DT_NONE, std::string("layers_" + std::to_string(i) + "_attention_norm") .c_str()); token = token_att_norm[0]; att_norm = token_att_norm[1]; } Tensor mha; switch (mode) { case BEAM_SEARCH_MODE: { mha = ff.spec_inc_multihead_self_attention( att_norm, llama_config.hidden_size, llama_config.num_attention_heads, llama_config.hidden_size / llama_config.num_attention_heads, llama_config.hidden_size / llama_config.num_attention_heads, 0.0f, /*dropout*/ false, /*qkv_bias*/ false, /*final_bias*/ false, /*add_zero_attn*/ DT_NONE, /*data_type*/ NULL, /*kernel_initializer*/ true, /*apply_rotary_embedding*/ false, /*scaling query*/ 1.0f, /*scaling factor*/ true, /*qk_prod_scaling*/ false, /*position_bias*/ std::string("layers_" + std::to_string(i) + "_attention") .c_str() /*name*/ ); break; } case TREE_VERIFY_MODE: { mha = ff.inc_multihead_self_attention_verify( att_norm, llama_config.hidden_size, llama_config.num_attention_heads, llama_config.hidden_size / llama_config.num_attention_heads, llama_config.hidden_size / llama_config.num_attention_heads, 0.0f, /*dropout*/ false, /*qkv_bias*/ false, /*final_bias*/ false, /*add_zero_attn*/ DT_NONE, /*data_type*/ nullptr, /*kernel_initializer*/ true, /*apply_rotary_embedding*/ false, /*scaling query*/ 1.0f, /*scaling factor*/ true, /*qk_prod_scaling*/ false, /*position_bias*/
spike
@tri 01000000 01110100 01110010 01101001 generalnie nie o to mi chodziło, a o samo operowanie kodem binarnym, dlatego opracowano języki programowania wyższego poziomu, by łatwo je przyswoić. Znasz Asembler ?
Dark Regis
Tak. Widział Pan schemat uczenia LLM-a? Tak jak napisałem, jeden automat sprawdza co probabilistycznie najlepiej pasuje do budowanego dynamicznie kontekstu,, zaś inny automat pakuje to w "sreberka", czyli w schematy odpowiedzi, które trafiają do użytkownika. Na pewno nie jest to robione w jednym cyklu, jak w abstrakcyjnych sieciach neuronowych, bowiem twórcy AI otwarcie mówią o stałym "douczaniu". arxiv.org Krótko mówiąc wystarczy zapoznać się z tymi repozytoriami na GitHubie, żeby wyrobić sobie pogląd na wieloetapowość uczenia sieci i segmentowanie tego (post)procesu. Wygląda to wręcz jak jakaś nadrzędna sieć konkurencyjna "kto da lepszą odpowiedź?". Czyli wracając do mojego schematu tworzony jest jakiś wzorzec schematu wypowiedzi "PPTTPPTPPPTP" np. obejmujący wstęp, listę pros, listę cons i krótkie podsumowanie. W efekcie miejsca P muszą zostać wypełnione gadką szmatką w stylu "To bardzo fajnie, że interesujesz się LLM-ami....", albo "bo nawiasem mówiąc jest to sposób na", albo "przynajmniej tak sądzą niektórzy badacze". Nazwałem je P od "placeholder". Zaś T to miejsca "biorące", czyli ustalone miejsca, gdzie pojawiają się ważne informacje, tokeny (bo mają pewną wartość dla budowanego kontekstu), które właściwie stanowią rdzeń tego kontekstu. Z tym, że zadając kolejne pytanie możemy rozwinąć dany placehoilder w kolejną serię tokenów, przykładowo "A jacy to naukowcy tak sądzą?" Oczywiście z uwagi na ograniczenia w liczbie tokenów do wykorzystania maszyna nie może trzymać wszystkich tokenów w nieskończoność i pewne z nich znów muszą wypadać, żeby zrobić miejsce innym. Skąd takie moje podejrzenie? Ze sposobu wpadania AI w halucynacje, gdzie miesza moje dane ze swoimi w losowy sposób. Albo zaczyna "rozumować" powtarzając moje słowa jako swoją odpowiedź "merytoryczną" czyli jako tokeny (obecna wersja 4o tak robi). Jeszcze raz powtórzę, że tokenem nie tyle są słowa, tylko fragmenty kontekstu, a w szczególności słowa "rzadkie", np. nazwiska w twierdzeniach, sformułowania z danej dziedziny nauki itp. Taki "ślad" pozwala na odtwarzanie kontekstu po prostu i dlatego rozmowę można kontynuować po kilku miesiącach. Fragmenty kontekstu zaś to muszą być bardzo złożone struktury, ale raczej mi nie powiedzą jakie. Widać to nieco w tych repozytoriach w Pythonie.
Władysław Ludendorf
@Imć, ależ pan zawiesza wysoko poprzeczkę. Ale chyba łapię, co panu chodzi po głowie. W skrócie całe to LLM oparte na back propagation, sigmoidach i softmaxach de facto jest automatem Buchi'ego (jak dla mnie to nieco bardziej skomplikowanym regexpem). Więc LLM generuje sobie tekst, którego sensu nie musi znać, ale musi mieć wartość TRUE (wtedy tekst ma sens w jakimś sensie :) ). To generowanie to po prostu operacje na symbolach (tokenach którymi są słowa). Coś jak "król" to p a "mężczyzna" to q i p => q :). Trenowanie to tak naprawdę ustalanie wag tych śmiesznych operatorów/kwantyfikatorów "prawie zawsze", "ostatecznie" i innych U (until), kwadracików i rombów. No nie wiem, wygląda jak powrót do lat 60-tych XX wieku tylko winny sposób.
tricolour
No dobra, czas zakończyć spór klasy małżeńskiej... 11 1101 11001
spike
@tri - Bruner ty już wiesz co :))) ogólnie powiem, że właściwie mówimy podobnie, tylko inaczej formujemy pojęcia, ja posłużyłem się określeniem "język maszynowy", odnoszący się wprost do procesora, jak całego systemu, który pracuje tylko i wyłącznie na kodzie - zapisie binarnym, każdy inny zapis komend jest zapisem wyższego poziomu. Czy teraz rozumiesz "co autor miał na myśli" ? tak więc jeszcze raz, zapisz=napisz swój nick w postaci binarnej. :))
Dark Regis
Jeśli chcę sprawdzić czy coś jest zerem, to można wykorzystać też operacje arytmetyczne, które ustawiają flagę ZF, można dodać zero do akumulatora, wykonać operacje logiczną, shift, skok "zerowy" w oparciu o rejestr. Wszystko zależy od kontekstu i od tego czy można zniszczyć zawartość rejestru. Jest też taka sprytna technika programowania, która polega na stworzeniu dispatchera. Chodzi o to, żeby wywołać procedurę na podstawie zawartości jakiegoś rejestru, który adresuje tablice adresów procedur możliwych do wykonania. Taka zabawka służy do przetwarzania języków w tym przy pisaniu analizatorów i kompilatorów. W przypadku robienia procedury rekurencyjnej, która w przypadku C/C++ będzie budować ramki stosu na ramkach stosu, w sumie gigantyczną strukturę w pamięci, która w większości będzie zawierać nieistotne dane. Można to obejść w ten sposób, że przechowuję wartości rejestrów i argumentów na stercie w odpowiednim bloku pamięci, gdzie można robić operacje na nich, np. usuwanie niepotrzebnych danych w celu skrócenia drogi w górę drzewa wywołań, albo dokonać ich modyfikacji w taki sposób, żeby zmienić samo drzewo wywołań wstecz. Nie wiem czy ktokolwiek z programistów jeszcze potrafi tak kombinować, bo to był myk znany w języku Forth. W Forth są bowiem dwa stosy: roboczy stos danych, na którym się wszystko wykonuje, oraz stos adresów. Tam właśnie jest pojęcie "konstruowania asemblerów" ;))
Marek Michalski
Problem jest tylko jeden: udała się manipulacja i ludzie wierzą, że program komputerowy jest inteligencją i powtarzają to błędne pojęcie. W konsekwencji powstaje fałszywa teza jakoby człowiek mógł zastąpić Boga w dziele stworzenia. W rzeczywistości ta propaganda sztucznej inteligencji ma na celu : - personifikację systemów informatycznych - nadanie osobowości prawnej, z prawami autorskimi włącznie, co prowadzi do opodatkowania i rozszerzenia cenzury pod pozorem praw autorskich - stworzenie obawy, że nam AI zagrozi i trzeba zwiększyć kontrolę, - alibi dla procesów decyzyjnych (nie trzeba AI, wystarczy zadzwonić na infolinię, żeby zostać spławionym przez system państwowo-korporacyjny)
tricolour
@spike Ponawiam pytanie - co to znaczy "zapisać"? Mało tego, że ponawiam pytanie, to jeszcze oczekuję odpowiedzi. Mało tego, że oczekuję odpowiedzi, to informuję, że brak odpowiedzi uznam za przyznanie się do niezrozumienia pytania przez zadającego pytanie. :PP
spike
@tri trudno ci będzie zapisać = napisać, skoro nie zrozumiałeś mojego komentarza. :)))))) Kod ASCII jest w kodzie procesora ? człowiek się uczy całe życie :))
tricolour
@imc Mnie raczej chodzilo o wydajność niż o elegancję "językową". O ile dobrze pamiętam to rozkaz porównania z zerem zajmował 11 cykli zegara (CP A,0) a prostą funkcja logiczna, ustawiająca flagę, dwa razy mniej. Te kilka mikrosekund opóźnienia "wydłużone" w pętli może nie wcelować z sołdata, a wtedy on nam odstrzeli dupę - niechlujstwo bywa zgubne.
Dark Regis
@Tri, w Intelach jest kilka różnych rodzin rozkazów o różnych kodach i czasem o tych samych mnemonikach do ładowania do rejestrów, zapisywania do pamięci, dla operacji arytmetycznych itd. Nie chodzi tylko o rozmiar rejestru dla zachowania kompatybilności z 8-, 16-, 32- bitowymi rejestrami. Są po prostu różne sposoby kodowania w pierwszym lub w pierwszych dwóch bajtach, potem jest dopiero adresacja właściwa lub parametry. Jeszcze lepiej będzie to widać przy różnych optymalizacjach kompilatora, gdzie może się zdarzyć, ze ciąg pewnych operacji zostanie zastąpiony równoważnym, o którym by nawet filozofowie nie pomyśleli. ;) W tym ostatnim przypadku chodziło o dwie sprawy: 1) wyrównanie kodu do granicy paragrafu, żeby nie trzeba było przeładowywać do chwilę prefetcha (kolejki rozkazów procesora); 2) unikanie AGI czyli blokady generowania adresu dla pewnych rozkazów, sekwencji, co dawało multum dodatkowych niepotrzebnych cykli. W sumie mógł wyjść kod z kosmosu ;) Z drugiej mańki jak kiedyś w asemblerze pisałem bodaj symulowane wyżarzanie (simulated annealing), to jest tam masa e do czegoś (rozkład). Zrobiłem program w asemblerze, który to liczył w kilku rozkazach i to dość niedokładnie, ale na tyle, żeby nic się w obliczeniach za bardzo nie zmieniało. Inna funkcja, zaś wynik ten sam.
Dark Regis
No to tak to się robi z dyskami. Gorzej jest kiedy głowice stukają, bo wtedy trzeba niemal w hermetycznych warunkach otworzyć dysk i wymienić te głowice. Elektronika jest na osobnej płytce, więc bez problemu. W mojej robocie odzyskiwałem raczej dane z dysków sprawnych, tylko albo podmazanych albo czymś zaszyfrowanych. To też był drobny problem, bowiem na początku dysku najczęściej był system operacyjny, zaś dane dopiero po kilkuset tysiącach sektorów dalej. W sumie mogło być na nośniku kilka milionów sektorów. Oczywiście sektory są pogrupowane w klastry po kilka i mapa klastrów jest w FAT. Takie odtwarzanie tablic FAT-u nawet na małym dysku, to jest jednak rzeźba w GWnie, chociaż one są zdublowane ;) To właśnie wtedy zacząłem szukać jakiejś "metody automatycznej" i spojrzałem życzliwym okiem na logiki modalne. No bo co musiałem cały czas robić? "Czy ten klaster był połączony z tamtym", "czy w klastrach jest zawartość podobna, sugerująca, że to może być jeden plik", "jaki to plik, i jakich danych szukać, żeby kleić klastry w mapę plików", itp. Czyli dokładnie zakładałem, że dane połączenie jest możliwe lub konieczne i sprawdzałem jakie to rodzi konsekwencje i czy się z jakimiś innymi danymi zgadza, czy im zaprzecza i muszę się cofnąć z wnioskowaniem. Z szyfrowaniem było gorzej. Trzeba było znaleźć metodę, a jak zadziałał jakiś "szybki i wściekły" antywirus, to wszystko poszło bye bye, napisać program wczytujący z dysku sektor po sektorze dane, rozszyfrowujący i zapisujący z powrotem. Jak widać musiałem wiedzieć co robię, bo raz podmazane dane w wyniku jakiegoś błędu rozumowania szły się czochrać ;). Tak właśnie odwirusowywaliśmy z kumplem komputer w Coca Coli, gdzie była kampania reklamowa. W sumie wzięliśmy za to bardzo skromnie, bo i roboty było na kilka minut pracy programu deszyfrującego. Resztę czasu poświęciliśmy na siorbanie kawy i opowiadanie kawałów, bo nas zostawiono samych w wielkiej hali. W końcu po pół godziny przyleciał zaniepokojony prezes, widocznie mieli tam monitoring, z grzecznym zapytaniem "czy moglibyście się panowie wziąć wreszcie do roboty, bo my tu też mamy masę pracy jeszcze". Na to my "już dawno to zrobiliśmy, tylko nikt od was nie przychodził", "Ale kiedy? Jak?", "Trzeba było uważać" :))) (dodam dziś z moim wieloletnim doświadczeniem jeszcze "bo ktoś może od was równie sprawnie różne krytyczne dane wyciągnąć"). Nie wiem dlaczego elektroniki tak się drożą, chyba z niewiedzy po prostu ;))))
tricolour
@spike Z wielką przyjemnością zapiszę swój nick jeśli określisz, co to znaczy "zapisz"? Załadować mam trzy pary rejestrów kodami ASCII? Załadować jakiś bufor? Wysłać dziewięć bajtów do peryferii o jakimś adresie? 😁😁😁
spike
"Nie jesteśmy "na ty". OK, ja lubię Tyskie, więc się nie dogadamy.
spike
@imć w kwestii drukarki Mara Błonie, jakaś firma była likwidowana i wyprzedawali różny sprzęt z magazynów, więc ją kupiłem, a potem przerobiłem na ploter grawerujący :)) Przyjaciel zbudował ploter rysujący wykorzystując podzespoły dysku twardego. Kiedyś w sieci było przepięcie, mój komp zadymił, w procesorze twardego dysku wypalił otwór, problem był z danymi na dysku, firmy "śpiewały takie kwoty', że włosy dęba stawały. "Potrzeba jest matką wynalazków", ja zastosowałem metodę podmiany, poszukałem w sieci podobny dysk, wyciągnąłem z niego płytę główną i włożyłem do mojego - Eureka, zadziałało, nie na 100%, czego się spodziewałem, ale prawie wszystkie dane odzyskałem :))
tricolour
@spike @imć Sprawa assemblera czy kodu maszynowego, to jest kwestia gustu. O ile pamiętacie, to załadowanie akumulatora w Z80 brzmiało w assemblerze LD A,n co w efekcie dawało kod 3Enn (Hex). A np. Pary rejestrów HL to 21xxyy. Między jednym i drugim zapisem nie ma - dla mnie - żadnej różnicy jak między uchem lewym i prawym. 😛
spike
@imć sądzę, że w języku procesora nigdy nie pisano programów, to przekracza ludzką percepcję, wymaga szczególnej uwagi, Asembler owszem, chyba pierwszy język wyższego poziomu, którego człowiek jest w stanie się nauczyć, potem ilość języków przybywała, nie wymagała takiej wiedzy programistycznej jak asembler z całym potrzebnym zapleczem. Obojętnie jaki by nie był procesor, to on jest "sprężyną" całości, ale także "piętą Achillesa", chodzi o jego zegar, bo jeszcze chyba nie wymyślono takiego, którego "tykanie zegara" nie ogranicza.
Dark Regis
Słusznie. Programowanie na portach to dla asemblerowca czarna magia, tak samo jak dla sprzętowca programowanie pod Windows w asemblerze to też odlot. Co do wewnętrznego języka AI to proszę zwrócić uwagę na hasło "komputer neuromorficzny": aioai.pl Jak Pan zapewne wie, żeby zaprogramować sieć neuronową AI trzeba znać co najmniej Pythona, mieć co najmniej bibliotekę TensorFlow, znać się na deep learningu czyli algorytmach, no i przede wszystkich mieć sprzęt o mocy niezłej uczelni. Niektóre firmy, w tym NVidia, produkują już chipy będące specjalizowanym procesorem obsługującym takie tensory i sieci neuronowe. Warto rzucić okiem na to cacko, żeby sobie uświadomić, że to nie są zwykłe procesory tylko coś w podobie "sieci kart graficznych" jak te z koparek Bitcoinów. Tylko wszystko upakowane w kostkę. Mają one wybitną wydajność jeśli chodzi o obróbkę i generowanie video. Ludzie pokazują to na YT. businessinsider.com.pl itwiz.pl youtube.com Dlatego, reasumując, już nie mamy tych prostych procesorów z linii Intela/AMD/ARM/Motorola/itp. tylko przechodzimy do rzeczywistości z bardzo zagmatwanymi układami logicznymi plus różne wbudowane technologie neuronowe. Tak więc raczej już nie będzie ludzi piszących w jakimś języku procesora, za to w asemblerach jak najbardziej. Czy obliczenia dla potrzeb AI wyjdą poza zwyczajne procesory? Raczej zapytałbym kiedy..... A przecież mamy jeszcze w blokach startowych komputery "kwantowe". PS: Swoją drogą warto sprawdzić, czy politechniki w Polsce już zaczęły przygotowywać specjalistów dla tego typu procesorów i technologii?
Zbyszek
@spike: 1. Nie jesteśmy "na ty". Na ty, to spadaj na buraki. 2. Oczywiście, że assembler/asembler to język wyższego poziomu niż maszynowy, który jest de facto strumieniem zer i jedynek, co do którego istnieją konwencje, traktowania tego strumienia przez procesor. I tak, w tym języku też pisałem programy. Opowiadanie "nie znam człowieka, by napisał binarnie sensowny program" jest tylko selfinkryminacją, bo, co to znaczy i w jakim kontekście "sensownego"? Co ma wynikać z tego stwierdzenia? Że to język, którego ludzie nie rozumieją? Po co pisać w sposób trudniejszy, gdy można w łatwiejszy? W języku maszynowym nie ma niczego trudnego intelektualnie, asembler jest jego bardziej abstrakcyjną formą zapisu. A języki wyższych poziomów są jeszcze bardziej abstrakcyjnymi formami zapisu. To są różne formy zapisu. Te prymitywne formy zapisu, są po prostu nieefektywne w użyciu, bo trzeba dużego wysiłku na ich przetwarzanie. Łatwo to zrozumieć, gdy spróbować prowadzić księgowość w rzymskim systemie liczbowym zamiast w arabskim. Różnica jest kolosalna, ze względu na formę zapisu TYCH SAMYCH liczb, a nie liczby czy działania.
Do wpisu: PiS i PO połączyły siły dla dobra nas wszystkich?
Data Autor
Hornblower
W sprawach pryncypialnych PO i PiS zawsze łączyły siły. Socjalista zawsze się dogada z socjalistą.
juur
To jest sedno tego co się dzieje: ."....socjalistycznych pięknoduchów z Okrągłego Stołu (którzy, UWAGA, walczyli z Partią Jaruzela, a nie z komunizmem, bo teraz bez sprzeciwu montują nam komunizm niemiecki pod kryptonimem "unia europejska"...." I żeby było jasne chodzi o wszystkich "z Okrągłego Stołu" .