HomeO mnie

W głąb modeli LLM

By Robert Duraj
Published in LLM
May 06, 2024
3 min read
W głąb modeli LLM

W poprzednim wpisie przybliżyliśmy nieco historię, która stoi za rewolucyjnym postępem w dziedzinie sztucznej inteligencji. Dzisiaj zajmiemy się bardziej technicznymi aspektami. Rozłożymy modele LLM na czynniki pierwsze i zobaczymy, co tak naprawdę możemy w nich znaleźć. Zaczynajmy.

Spory zawód na początek

Jeśli mieliście okazję przeglądać Hugging Face lub ściągnąć jakiś model na swój komputer, zapewne zwróciliście uwagę, że nie ma tam za bardzo na czym oka zawiesić. Ot, jeden duży plik i dodatkowy, niewielki plik uruchomieniowy. To wszystko.

Fascynujące jest to, że właśnie taki zestaw pozwala na uruchomienie modelu, który bez problemu będzie z nami rozmawiał, będzie znał odpowiedzi na wiele pytań i często również wykona dla nas zadania, które mu powierzymy.

Dlaczego tak się dzieje? Jaki sekret tkwi w tej prostocie? Stoi za tym sieć neuronowa, która potrafi z ograniczonej liczby danych przewidywać informacje, które już kiedyś widziała. To bardzo istotne – “widziała”, ale ich nie “posiada”! Wspomniałem o dwóch plikach – jeden ma kilka/naście/dziesiąt gigabajtów, a drugi raptem kilkaset linii kodu. Żaden z nich nie zawiera w sobie żadnej bazy wiedzy. Większy plik przechowuje informacje niezbędne sieci neuronowej do pracy, natomiast mniejszy jest odpowiedzialny za powołanie sieci neuronowej do życia. Nas interesuje głównie ten większy.

Zerknijmy w model

Zanim przejdziemy dalej, rozprawmy się z dziwaczną nomenklaturą modeli. Za przykład posłuży nam LLaMA-2-70B. I choć “LLaMA” jest po prostu nazwą, a pierwsza cyfra oznacza wersję, przy 70B przestajemy być tacy pewni. Bo nijak nie pasują tutaj bity, bajty, a jeśli “biliony”, to niby czego?! Na początek należy zaznaczyć, że o ile faktycznie chodzi o “biliony”, to jednak jest to tłumaczenie z języka angielskiego, zatem mówimy tak naprawdę o miliardach. Miliardach parametrów.

Każda sieć neuronowa, która jest trenowana na zbiorze informacji, ma przede wszystkim na celu ustalenie najbardziej prawdopodobnego kolejnego tokenu, który wystąpi w danym zdaniu. Na potrzeby tego tekstu umówmy się, że tokenem jest pojedyncze słowo, jednak do niuansów, które on skrywa, dotrzemy w kolejnych tekstach. Zatem model próbuje przewidzieć kolejne słowo w tekście. Ucząc się, ustala wagi do swoich algorytmów, tak, aby te najtrafniej wybierały tokeny, bazując na dostarczonym kontekście.

Jeśli prześwietlilibyśmy plik, okazałoby się, że tak naprawdę zawiera on ogromne ilości dwubajtowych liczb zmiennoprzecinkowych (float), będących parametrami dla naszej sieci neuronowej. I tak 70B oznacza po prostu, że model zawiera 70 miliardów liczb.

Oprócz parametrów, model również dysponuje wiedzą o tokenach, których używa. Przechowuje je, oczywiście, w formie liczbowej i wykorzystuje do generowania odpowiedzi.

Skąd model wie?

Ustaliliśmy, że model nie wie. Nie wie, ale jednak się wypowiada. I nie chodzi tu o anegdotycznego wujka z imprez rodzinnych. Model sam w sobie, jak już powiedzieliśmy, nie ma wiedzy, a jedynie generuje najbardziej prawdopodobny następny token. To istotny aspekt, którego zrozumienie znacząco rozjaśnia temat.

Jedynymi informacjami, jakimi model dysponuje, są informacje zawarte w oknie kontekstowym wiadomości. Co to takiego? To trochę, jak okienko wiadomości na Slacku. Widzisz w nim pewien wycinek konwersacji. Jeśli chcesz, możesz jednym spojrzeniem przypomnieć sobie, o czym była Twoja ostatnia wiadomość, odpowiedź znajomego itd. Natomiast żeby zobaczyć wiadomości z zeszłego tygodnia, musisz już przewinąć ekran. Model językowy działa podobnie. Z tą różnicą, że on przewinąć nie może. Jeśli coś jest poza okienkiem wiadomości, to on o tym „zapomina”.

Niektóre modele mają duże okna kontekstowe (16k, 32k, mowa jest również już o milionie tokenów - bo rozmiar okna liczy się w tokenach), ale bywają też modele lokalne, które zwykle mają małe okienka (przykład LLaMy – ma ona raptem 4k tokenów). Jeśli nasza wiadomość wyczerpie pulę tokenów z okna kontekstowego (czyli w naszej analogii: wklei wiadomość, która nie zmieści się w oknie Slackowym), to początek tej wiadomości zostanie „zapomniany” i nie będzie mógł być przetworzony i wzięty pod uwagę przez model. Będzie to dla niego informacja nieistotna.

Co robi model z takim kontekstem? Odpowiada? Tak właściwie, to nie. Żeby odpowiedzieć, trzeba rozumieć. Model nie rozumuje. Przyjmuje do wiadomości kontekst, zamienia go tokenizerem na zestaw tokenów, korzysta z wyuczonych podczas treningu wag, a następnie generuje najbardziej prawdopodobny zestaw tokenów jako „dalszy ciąg” do naszej wypowiedzi.

Podsumowanie

Zrozumiawszy zgrubnie, jak działa model, możemy w końcu spróbować go ujarzmić. W kolejnym wpisie zajmiemy się możliwymi sposobami na dostosowywanie modelu do naszych potrzeb. Napiszemy też pierwszy kod związany z LLM, oczywiście przy użyciu TypeScripta.


Tags

#ai#llm

Share

Previous Article
Nasze magiczne dev Encanto

Robert Duraj

Software Engineer

Related Posts

Nasze magiczne dev Encanto
February 06, 2024
1 min
© 2024, All Rights Reserved.
Powered By

Social Media

linkedingithubtwitter