Duże modele językowe

From Systems analysis Wiki
Jump to navigation Jump to search

Duży model językowy (large language model, LLM) — to typ modelu uczenia maszynowego (Machine Learning), zrealizowany za pomocą głębokiej sieci neuronowej posiadającej dużą liczbę parametrów (zazwyczaj miliardy i więcej), wytrenowanej na dużych zbiorach danych tekstowych. „Duży" w tym kontekście odnosi się jednocześnie do skali parametrów i do rozmiaru korpusu treningowego, który we współczesnych systemach sięga kilku petabajtów i bilionów tokenów. Modele LLM trenowane są głównie metodą samo- lub półsamonadzorowaną (self-/semi-supervised), przewidując kolejny token w sekwencji i tym samym przyswajając statystyczne prawidłowości języka. Wzrost liczby parametrów, ilości danych i kroków obliczeniowych prowadzi do przewidywalnej poprawy jakości, co potwierdzają scaling laws.

Po pojawieniu się BERT (2017), a zwłaszcza GPT-3 (2020), podejście oparte na LLM zaczęło dominować w przetwarzaniu języka naturalnego (NLP). Współczesne modele (GPT-4o, Claude 3, Gemini 1.5, LLaMA 3 i inne) bez specjalnego dostrajania potrafią pisać teksty i kod programistyczny, tłumaczyć, streszczać, odpowiadać na pytania oraz budować łańcuchy rozumowania; wersje multimodalne analizują obrazy, dźwięk i wideo. Adaptacja do konkretnego zastosowania odbywa się poprzez fine-tuning lub inżynierię podpowiedzi (prompt engineering, in-context learning). Wraz z osiągnięciami LLM dziedziczą uprzedzenia i błędy danych źródłowych, są skłonne do „halucynacji" i wymagają znacznych zasobów obliczeniowych, dlatego badania skupiają się dziś na wyrównywaniu zachowania modeli, filtrowaniu korpusów i energooszczędnych architekturach.

Architektura

We współczesnych LLM niemal zawsze stosowana jest architektura Transformer (transformator) – sieć z mechanizmem samo-uwagi (self-attention). Po raz pierwszy model transformatora został zaproponowany w artykule Attention is All You Need przez twórców z Google w 2017 roku.

Architektura Transformer to podstawowy schemat sieci neuronowej do pracy z sekwencjami, obejmujący dwa logiczne moduły — enkoder (koduje wejście) i dekoder (generuje wyjście). Na wejście przyjmowana jest sekwencja, tworzone jest jej wektorowe przedstawienie (ang. embedding), dodawany jest wektor kodowania pozycyjnego, po czym zbiór elementów bez uwzględnienia kolejności w sekwencji trafia do komponentu kodującego (przetwarzanie równoległe), a następnie komponent dekodujący otrzymuje na wejście część tej sekwencji oraz wyjście komponentu kodującego. W wyniku tego powstaje nowa sekwencja wyjściowa.

Komponent kodujący transformatora składa się z kilku identycznych warstw-koderów; analogicznie zbudowany jest komponent dekodujący. Sam transformator to sekwencja modeli uwagi, które przekształcają wejściową sekwencję wektorów w nową sekwencję, gdzie każdy element uwzględnia kontekst pozostałych. Koder tworzy ukryte reprezentacje danych wejściowych, zachowując informacje o powiązaniach między elementami. Dekoder na podstawie ukrytych reprezentacji tworzy nową sekwencję embeddingów dla tokenów wyjściowych. Następnie na podstawie tych embeddingów za pomocą modelu językowego generowane są końcowe elementy wyjściowe.

Ponieważ transformatory były pierwotnie projektowane do zadań takich jak tłumaczenie maszynowe, ich architektura obejmuje enkoder (przetwarzający tekst wejściowy, np. zdanie źródłowe) i dekoder (generujący wyjście, np. tłumaczenie). Jednak wiele modeli językowych wykorzystuje wyłącznie część dekoderową, działającą w trybie autoregresyjnym.

Transformatory stosowane są w trzech głównych konfiguracjach, z których każda w odmienny sposób wykorzystuje enkoder i dekoder i jest zorientowana na własny zakres zadań:

  • Transformatory enkodujące (dwukierunkowe) uczą się odtwarzać celowo ukryte fragmenty tekstu, przez co dobrze nadają się do zadań „rozumienia" — klasyfikacji, ekstrakcji faktów, wyszukiwania semantycznego.
  • Transformatory dekodujące (autoregresyjne) są optymalizowane pod kątem przewidywania kolejnego tokena i stosowane tam, gdzie potrzebne jest strumieniowe wyjście: agenty dialogowe, autouzupełnianie kodu, generowanie kreatywne.
  • Pełne schematy „enkoder + dekoder" łączą oba podejścia: enkoder buduje reprezentację całego tekstu wejściowego, a dekoder, opierając się na niej, stopniowo formuje wynik. Taka konfiguracja jest najbardziej efektywna w tłumaczeniu maszynowym, sumaryzacji i systemach pytań i odpowiedzi.

Tokenizacja

Tokenizacja — kluczowy początkowy etap przetwarzania tekstu w dużych modelach językowych. Na tym etapie ciągły ciąg znaków dzielony jest na odrębne jednostki — tokeny. Tokenizacja realizuje zadanie przekształcenia sekwencji znaków w sekwencję ustrukturyzowanych elementów zapewniających efektywne działanie sieci neuronowej.

Z językoznawczego punktu widzenia tokenizacja w pewnym stopniu mogłaby odpowiadać procesowi wyodrębniania minimalnych jednostek języka posiadających samodzielne znaczenie lub funkcjonalne obciążenie, takich jak słowa, morfemy lub ich fragmenty. Jednocześnie token jest często po prostu statystycznie często występującą sekwencją znaków, dlatego ważne jest, aby nie przeceniać językoznawczej sensowności wszystkich tokenów. W zależności od wybranego schematu tokenem może być: całe słowo, podwyraz, pojedynczy znak, znacznik pomocniczy (na przykład markery początku i końca sekwencji).

Tokenizacja pozwala na:

  • ograniczenie rozmiaru słownika do akceptowalnych rozmiarów;
  • poprawne przetwarzanie rzadkich i nowych słów;
  • zapewnienie jednoznacznego odwzorowania tekstu na sekwencję numerycznych identyfikatorów.

Do segmentacji tekstu stosowane są algorytmy subwyrazowe, z których najpopularniejsze to Byte Pair Encoding (BPE), WordPiece i UnigramLM. Każdy z nich buduje słownik z najczęstszych fragmentów korpusu i używa go do sekwencyjnej segmentacji dowolnego tekstu wejściowego.

Po etapie tokenizacji każda jednostka tekstu — token — przekształcana jest w reprezentację numeryczną zrozumiałą dla sieci neuronowej. Proces ten obejmuje kilka kolejnych kroków:

  • Przekształcenie tokenów w identyfikatory: Każdy token jest przyporządkowany do unikalnego indeksu numerycznego na podstawie wcześniej zbudowanego słownika tokenów. Tokeny tekstowe zastępowane są ich unikalnymi numerycznymi identyfikatorami (ID). Każdy ID to numer tokena w uprzednio zbudowanym słowniku, co pozwala sieci neuronowej pracować z liczbami zamiast ze słowami.
  • Przekształcenie identyfikatorów w embeddingi: Dla każdego identyfikatora tokena wyodrębniany lub obliczany jest odpowiadający mu wektor o stałym wymiarze — embedding. To wielowymiarowe przedstawienie numeryczne zastępuje ID i zawiera już informacje o znaczeniu i kontekstowych właściwościach tokena. Wszystkie embeddingi mają jednakową długość dla wygody przetwarzania.
  • Dodawanie kodowań pozycyjnych: Ponieważ architektura Transformer sama w sobie nie uwzględnia kolejności elementów, do embeddingów dodawane są kodowania pozycyjne (positional encodings), które dostarczają informacji o pozycji tokena w sekwencji. Innymi słowy, dzięki temu model „wie", który token jest pierwszy, drugi, trzeci itd. w zdaniu.
  • Tworzenie macierzy wejściowych: Na wyjściu otrzymywana jest macierz o wymiarach [длина последовательности × размерность эмбеддинга], która służy jako wstępna reprezentacja tekstu i przekazywana jest na wejście sieci neuronowej, w szczególności do bloków samo-uwagi (self-attention) Transformatora. Każdy wiersz tej macierzy odpowiada jednemu tokenowi, a zawarty w nim wektor niesie zarówno jego znaczenie semantyczne (embedding), jak i informację o jego położeniu w tekście (kodowanie pozycyjne).
Текст → Токены → Идентификаторы → Эмбеддинги + Позиционные кодировки → Вход в модель

Mechanizm uwagi

Mechanizm uwagi (attention mechanism) — kluczowy komponent architektury Transformer, który umożliwia uwzględnianie zależności między tokenami niezależnie od odległości między nimi w sekwencji. Po przekształceniu tekstu wejściowego w sekwencję wektorów, sekwencja ta trafia do centralnego elementu transformatora — bloku uwagi (attention block).

Mechanizm uwagi to sposób, w jaki sieć neuronowa określa, na które części danych wejściowych należy zwracać większą uwagę podczas przetwarzania każdego elementu sekwencji. Dzięki niemu wektory poszczególnych fragmentów tekstu mogą wzajemnie na siebie oddziaływać, wzbogacając się o informacje i aktualizując swoje wartości z uwzględnieniem otaczającego kontekstu. Dzięki temu model zyskuje możliwość efektywnego uchwycenia zarówno lokalnych, jak i odległych zależności między tokenami, co istotnie zwiększa jego zdolność do interpretowania złożonych struktur tekstu.

W języku naturalnym znaczenie słowa lub wyrażenia nie jest określane w izolacji — zależy od kontekstu, czyli od innych słów i struktur w otoczeniu. W sieciach neuronowych tekst kodowany jest przez wektorowe reprezentacje — embeddingi, które numerycznie odzwierciedlają właściwości leksykalne i składniowe tokenów. Bez mechanizmu bezpośredniej uwagi (jak w Transformatorze), informacja o kontekście albo traciłaby się na dużych odległościach (jak w prostych modelach), albo byłaby przekazywana sekwencyjnie, co jest mniej efektywne dla uchwycenia odległych zależności. Jednak w języku naturalnym znaczenie słowa lub konstrukcji składniowej jest dynamiczne i jego interpretacja musi adaptować się w zależności od kontekstu. Mechanizm uwagi realizuje kontekstualizację wektorowych reprezentacji, co oznacza (lub po prostu :):

  • Każdy token „ocenia" swoją ważność względem innych tokenów w zdaniu.
  • W procesie aktualizacji wektorowe reprezentacje wzbogacają się o wzajemne informacje, odzwierciedlając zależności składniowe, role semantyczne i kontekst pragmatyczny.


W wyniku tej wymiany informacji zaktualizowane wektory zaczynają kodować nie tylko znaczenie samego tokena, lecz także jego powiązania gramatyczne (składnia), rolę w opisywanej sytuacji (semantyka) i ogólny sens w kontekście (pragmatyka).

Входные векторы токенов (с позициями) → Механизм Внимания (Взаимодействие векторов) → Контекстуализированные векторы токенов (Векторы обогащенные информацией о связях с другими токенами)

Techniczna realizacja mechanizmu uwagi

Wewnętrzna budowa mechanizmu uwagi obejmuje kilka kluczowych kroków obliczeniowych i komponentów. Dla każdego wektora wejściowego generowane są trzy wektory: Zapytanie (Query), Klucz (Key) i Wartość (Value). Na podstawie ich interakcji obliczane są wagi uwagi, które następnie wykorzystywane są do uzyskania zaktualizowanych, skontekstualizowanych reprezentacji wektorowych. Popularnym podejściem jest stosowanie architektury wielogłowicowej (Multi-Head Attention) do równoległego przetwarzania informacji.

Zapytanie (Query), Klucz (Key), Wartość (Value)

Podstawą obliczeń mechanizmu uwagi jest przekształcenie każdego wektora wejściowego (będącego sumą embeddingu tokena i jego kodowania pozycyjnego) w trzy różne reprezentacje wektorowe: Zapytanie (Query, Q), Klucz (Key, K) i Wartość (Value, V).

Koncepcyjnie te trzy wektory pełnią następujące role w mechanizmie uwagi:

  • Zapytanie (Query): Reprezentuje wektor bieżącego tokena, który inicjuje proces wyszukiwania istotnych informacji w sekwencji. Można go traktować jako „pytanie" lub „sondę" używaną do oceny ważności innych tokenów względem bieżącego.
  • Klucz (Key): Pełni rolę identyfikatora lub „etykiety" opisującej aspekt treści każdego tokena. Wektor Zapytania (Q) bieżącego tokena porównywany jest ze wszystkimi wektorami Kluczy (K) w sekwencji (włącznie z własnym) w celu określenia stopnia ich zgodności lub istotności.
  • Wartość (Value): Zawiera rzeczywistą informację lub reprezentację powiązaną z każdym tokenem, która zostanie przekazana dalej. Po obliczeniu wag uwagi na podstawie interakcji Zapytań i Kluczy, wagi te stosowane są do wektorów Wartości w celu uformowania końcowej ważonej reprezentacji, stanowiącej wyjście mechanizmu uwagi dla danego tokena.

Trenowanie dużych modeli językowych

Trenowanie LLM odbywa się głównie w dwóch etapach:

  1. Wstępne trenowanie (Pretraining) Na tym etapie model trenowany jest na dużych nieoznaczonych korpusach tekstowych metodą uczenia samonadzorowanego (self-supervised learning). Zadanie polega na przewidywaniu kolejnego tokena w sekwencji (autoregresja) lub na odtwarzaniu ukrytych fragmentów (maskowane uczenie). Wstępne trenowanie pozwala modelowi przyswoić rozległe statystyczne prawidłowości języka, gramatykę, fakty o świecie i podstawowe formy rozumowania.
  2. Dostrajanie (Fine-tuning) Po wstępnym trenowaniu model jest dotrenowywany na wyspecjalizowanych danych w celu wykonywania konkretnych zadań, na przykład generowania odpowiedzi, klasyfikacji tekstów lub realizacji instrukcji. Współczesne podejścia obejmują:
    • Dostrajanie na oznaczonych datasetach (supervised fine-tuning).
    • Uczenie ze wzmocnieniem z udziałem człowieka (RLHF, reinforcement learning from human feedback) w celu korygowania zachowania modelu zgodnie z docelowymi metrykami jakości, bezpieczeństwa i użyteczności.

Problemy i ograniczenia

Pomimo imponujących postępów, współczesne duże modele językowe (LLM) posiadają szereg problemów i ograniczeń:


I. Ograniczenia obliczeniowe i architektoniczne

  1. Wysokie koszty obliczeniowe: Trenowanie i eksploatacja LLM wymagają znacznych mocy obliczeniowych, czasu i energii, co pociąga za sobą wysokie koszty ekonomiczne i środowiskowe. Ponadto autoregresyjna natura generowania (sekwencyjne tworzenie tokenów) ogranicza paralelizację i spowalnia szybkość wnioskowania w porównaniu z podejściami nieautoregresyjnymi.
  2. Ograniczenie długości kontekstu: Architektura Transformer cechuje się kwadratową zależnością kosztów obliczeniowych i wymagań pamięciowych od długości sekwencji. Zmusza to do ustanowienia stałego limitu (okna kontekstu) na ilość tekstu, który model może przetworzyć jednorazowo, co prowadzi do obcinania długich dokumentów i utraty informacji poza oknem.


II. Problemy niezawodności i dokładności generowania

  1. Halucynacje: Generowanie faktycznie błędnych, lecz brzmiących wiarygodnie informacji. Związane jest to z brakiem u modelu rzeczywistego rozumienia świata, opieraniem się na statystycznych prawidłowościach danych oraz niemożnością weryfikacji generowanych twierdzeń.
  2. Kumulacja błędów (Error Propagation): Proces, w którym błędy popełnione na wczesnych etapach generowania narastają i prowadzą do zwiększania nieścisłości na kolejnych krokach, obniżając ogólną jakość i spójność tekstu.
  3. Ograniczona kompozycyjność: Trudności z zadaniami wymagającymi wieloetapowego wnioskowania logicznego lub precyzyjnych obliczeń (np. mnożenie wielocyfrowych liczb, rozwiązywanie łamigłówek). Dokładność modeli w takich zadaniach gwałtownie spada wraz ze wzrostem złożoności ze względu na autoregresyjną naturę generowania.
  4. Powtórzenia: Skłonność do nadmiernego powtarzania słów lub fraz, obniżająca informacyjność i czytelność tekstu. Związane jest to ze specyfiką trenowania i algorytmów dekodowania (wyboru kolejnego tokena).
  5. Przekleństwo odwrotności (Reversal Curse): Niezdolność modelu do automatycznego uogólniania wiedzy w odwrotnym kierunku: nauczywszy się twierdzenia „A jest B", model często nie potrafi wywnioskować „B jest A".
  6. Kompromis „kreatywność–dokładność": Konieczność balansowania między generowaniem różnorodnych, oryginalnych odpowiedzi a zachowaniem dokładności faktograficznej. Poprawa jednego aspektu często negatywnie wpływa na drugi — na przykład wysoka kreatywność może korelować ze wzrostem halucynacji.

III. Problemy interakcji i sterowania:

  1. Niska sterowalność: Trudność precyzyjnego kontrolowania stylu, tonu, treści generowanego tekstu lub realizacji złożonych instrukcji. Sterowalność w dużym stopniu zależy od jakości instrukcji wejściowych (promptów) i metod dostrajania (fine-tuning).
  2. Wrażliwość na sformułowania: Nieznaczne zmiany w zapytaniu wejściowym (prompcie) mogą prowadzić do istotnie różnych odpowiedzi, nawet jeśli semantyka zapytania jest zachowana. Utrudnia to uzyskiwanie stabilnych i przewidywalnych wyników.


IV. Aspekty etyczne i społeczne:

  1. Problemy stronniczości i sprawiedliwości: Modele mogą reprodukować i wzmacniać obecne w danych treningowych stereotypy społeczne, uprzedzenia lub treści toksyczne. Zapewnienie sprawiedliwości i bezpieczeństwa modeli jest trudnym zadaniem.
  2. Problem wyrównania (LLM Alignment): Bardziej ogólny problem obejmujący poprzedni punkt. Jest to zadanie zapewnienia zgodności zachowania modelu z ludzkimi wartościami, intencjami i normami etycznymi. Obejmuje walkę ze stronniczością, halucynacjami, generowaniem szkodliwych treści i poprawę sterowalności.
  3. Ryzyko złośliwego wykorzystania: Możliwość stosowania LLM do tworzenia i masowego rozpowszechniania dezinformacji, phishingu, spamu, złośliwego kodu lub generowania przekonujących fałszywych tekstów, co stanowi zagrożenie dla bezpieczeństwa informacyjnego i osobistego oraz podważa zaufanie społeczne.

Źródła:

  • „Duży model językowy" // Wikipedia (Wersja rosyjska)
  • Large Language Model // Wikipedia (English version)
  • Grand Modèle de Langage // Wikipédia (Version française)
  • Sprachmodell // Wikipedia (Deutsche version)
  • Naveed H. i in. // A Comprehensive Overview of Large Language Models // arXiv:2307.06435, 2023

Literatura

  • Vaswani, A. et al. (2017). Attention Is All You Need. arXiv:1706.03762.
  • Devlin, J. et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805.
  • Brown, T. et al. (2020). Language Models Are Few-Shot Learners. arXiv:2005.14165.
  • Kaplan, J. et al. (2020). Scaling Laws for Neural Language Models. arXiv:2001.08361.
  • Hoffmann, J. et al. (2022). Training Compute-Optimal Large Language Models. arXiv:2203.15556.
  • Ouyang, L. et al. (2022). Training Language Models to Follow Instructions with Human Feedback. arXiv:2203.02155.
  • Bai, Y. et al. (2022). Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073.
  • Bubeck, S. et al. (2023). Sparks of Artificial General Intelligence: Early Experiments with GPT-4. arXiv:2303.12712.
  • OpenAI. (2023). GPT-4 Technical Report. arXiv:2303.08774.
  • Touvron, H. et al. (2024). The Llama 3 Herd of Models. arXiv:2407.21783.