Dowiedz się, jak Noam Shazeer przyczynił się do kształtu architektury Transformera: self-attention, uwaga wielogłowicowa i dlaczego ten projekt stał się podstawą współczesnych LLM-ów.

Transformer to sposób, by pomóc komputerom rozumieć sekwencje — rzeczy, w których liczy się porządek i kontekst, jak zdania, kod czy seria zapytań. Zamiast czytać tokeny po kolei i polegać na kruchej pamięci, Transformery patrzą na całą sekwencję i decydują, na co zwrócić uwagę przy interpretacji każdej części.
Ta prosta zmiana okazała się przełomowa. To jedna z głównych przyczyn, dla których współczesne duże modele językowe (LLM) potrafią utrzymać kontekst, wykonywać polecenia, pisać spójne akapity i generować kod odwołujący się do wcześniejszych funkcji i zmiennych.
Jeśli korzystałeś z chatbota, funkcji „podsumuj to”, wyszukiwania semantycznego czy asystenta do kodu, miałeś do czynienia z systemami opartymi na Transformerach. Ten sam podstawowy schemat napędza:
Rozłożymy na części kluczowe elementy — self-attention, multi-head attention, kodowanie pozycyjne i podstawowy blok Transformera — i wytłumaczymy, dlaczego ta konstrukcja tak dobrze skalowalna wraz ze wzrostem modeli.
Omówimy też nowoczesne warianty, które zachowują tę samą ideę, ale dostosowują ją pod kątem szybkości, kosztów lub dłuższych okien kontekstowych.
To przegląd na wysokim poziomie z wyjaśnieniami w prostym języku i minimalną matematyką. Celem jest budowanie intuicji: co robią poszczególne części, dlaczego współpracują i jak przekłada się to na rzeczywiste możliwości produktu.
Noam Shazeer jest badaczem i inżynierem AI najbardziej znanym jako jeden ze współautorów artykułu z 2017 r. “Attention Is All You Need.” Ten artykuł wprowadził architekturę Transformera, która stała się potem fundamentem wielu współczesnych LLM-ów. Wkład Shazeera był częścią pracy zespołowej: Transformer powstał w grupie badaczy w Google i warto przypisywać mu takie właśnie zespołowe autorstwo.
Przed Transformerem wiele systemów NLP opierało się na modelach rekurencyjnych, które przetwarzały tekst krok po kroku. Propozycja Transformera pokazała, że można modelować sekwencje skutecznie bez rekurencji, używając uwagi jako głównego mechanizmu łączenia informacji w zdaniu.
Ta zmiana miała znaczenie, bo ułatwiła równoleglenie trenowania (można przetwarzać dużo tokenów na raz) i otworzyła drogę do skalowania modeli i zbiorów danych w sposób praktyczny dla produktów.
Wkład Shazeera — obok pozostałych autorów — nie pozostał jedynie testem akademickim. Transformer stał się modułem wielokrotnego użytku, który zespoły mogły dostosowywać: wymieniać komponenty, zmieniać rozmiar, stroić pod zadania i później trenować na dużą skalę.
W ten sposób wiele przełomów trafia do praktyki: artykuł przedstawia czysty, ogólny przepis; inżynierowie go dopracowują; firmy operacjonalizują; w końcu staje się domyślnym wyborem do budowy funkcji językowych.
Prawdziwe jest, że Shazeer był kluczowym współautorem artykułu Transformera. Nieprawdziwe byłoby przedstawianie go jako jedynego wynalazcy. Wpływ pochodzi z kolektywnego projektu i z wielu kolejnych ulepszeń, które społeczność zbudowała na oryginalnym szkicu.
Zanim pojawiły się Transformery, większość problemów sekwencyjnych (tłumaczenie, mowa, generowanie tekstu) była zdominowana przez Recurrent Neural Networks (RNN), a później LSTM (Long Short-Term Memory). Główny pomysł był prosty: czytaj tekst po jednym tokenie, utrzymuj „pamięć” (stan ukryty) i używaj go do przewidywania kolejnych tokenów.
RNN przetwarza zdanie jak łańcuch. Każdy krok aktualizuje stan ukryty na podstawie bieżącego słowa i poprzedniego stanu. LSTM poprawiły to, dodając bramki decydujące, co zachować, zapomnieć lub wyprowadzić — dzięki czemu łatwiej było utrzymać przydatne sygnały na dłużej.
W praktyce pamięć sekwencyjna ma wąskie gardło: wiele informacji trzeba upchać w jednym stanie, gdy zdanie się wydłuża. Nawet w LSTM sygnały z dalekich słów mogą zanikać lub zostać nadpisane.
To utrudniało naukę pewnych zależności — np. przypisanie zaimka do poprawnej nazwy pojawiającej się wiele słów wcześniej, albo śledzenie tematu przez kilka zdań.
RNN-y i LSTM-y są też wolne w trenowaniu, ponieważ nie można w pełni równolegle liczyć po czasie. Można grupować różne zdania w batchu, ale wewnątrz jednego zdania krok 50 zależy od 49, który zależy od 48, i tak dalej.
Takie krokowe obliczenia stają się poważnym ograniczeniem, gdy chcesz większych modeli, więcej danych i szybszych eksperymentów.
Badacze potrzebowali projektu, który pozwoli łączyć słowa ze sobą bez ścisłego przetwarzania lewo‑do‑prawo podczas treningu — sposobu modelowania zależności na długim dystansie bez przepychania informacji przez sekwencję. Ten nacisk przygotował grunt pod podejście oparte na uwadze zaprezentowane w Attention Is All You Need.
Uwaga to sposób modelu na zadanie: „Na które inne słowa powinienem teraz spojrzeć, żeby zrozumieć to słowo?” Zamiast czytać zdanie ściśle lewo‑do‑prawo i liczyć na pamięć, uwaga pozwala modelowi zerknąć na najbardziej istotne fragmenty zdania w chwili, gdy ich potrzebuje.
Pomocny model mentalny to mała wyszukiwarka działająca w ramach zdania.
Model tworzy zapytanie dla bieżącej pozycji, porównuje je z kluczami wszystkich pozycji, a następnie pobiera mieszankę wartości.
Porównania dają wyniki istotności: przybliżone sygnały „jak bardzo to jest powiązane?”. Model zamienia je potem na wagi uwagi, które sumują się do 1.
Jeśli jedno słowo jest bardzo istotne, dostaje większy udział uwagi. Jeśli ważnych jest kilka, uwaga rozkłada się między nie.
Weź zdanie: „Maria powiedziała Jennie, że ona zadzwoni później.”
Aby zinterpretować ona, model powinien spojrzeć na kandydatki takie jak „Maria” i „Jennie”. Uwaga przypisze większą wagę do imienia, które najlepiej pasuje do kontekstu.
Albo rozważ: „Klucze do szafki są zaginione.” Uwaga pomaga połączyć „są” z „klucze” (prawdziwy podmiot), a nie z „szafka”, chociaż „szafka” jest bliżej. To sedno: uwaga łączy znaczenie na odległość, na żądanie.
Self-attention to pomysł, że każdy token w sekwencji może spojrzeć na inne tokeny w tej samej sekwencji, żeby zdecydować, co jest teraz ważne. Zamiast przetwarzać słowa ściśle lewo‑do‑prawo (jak starsze modele rekurencyjne), Transformer pozwala każdemu tokenowi zbierać wskazówki z dowolnego miejsca wejścia.
Wyobraź sobie zdanie: „Wlałem wodę do kubka, ponieważ on był pusty.” Słowo „on” powinno połączyć się z „kubek”, a nie z „woda”. Dzięki self-attention token „on” przypisuje większą wagę tokenom, które pomagają rozwiązać jego znaczenie („kubek”, „pusty”) i mniejszą wagę tym nieistotnym.
Po self-attention każdy token przestaje być tylko sobą. Staje się wersją świadomą kontekstu — ważoną mieszanką informacji z innych tokenów. Można to traktować jak spersonalizowane streszczenie całego zdania, dopasowane do potrzeb danego tokena.
W praktyce reprezentacja „kubka” może zawierać sygnały z „wlałem”, „woda” i „pusty”, podczas gdy „pusty” może pobrać to, co opisuje.
Ponieważ każdy token może jednocześnie obliczyć swoją uwagę nad całą sekwencją, trening nie musi czekać na przetworzenie poprzednich tokenów krok po kroku. To równoległe przetwarzanie jest główną przyczyną, dlaczego Transformery trenują efektywnie na dużych zbiorach danych i skalują się do ogromnych modeli.
Self-attention ułatwia łączenie odległych fragmentów tekstu. Token może bezpośrednio skupić się na istotnym słowie daleko wstecz—bez przekazywania informacji przez długi łańcuch pośredników.
Ta bezpośrednia ścieżka pomaga w zadaniach takich jak koreferencja („ona”, „to”, „oni”), śledzenie tematów przez akapity i obsługa instrukcji zależnych od wcześniejszych szczegółów.
Pojedynczy mechanizm uwagi jest potężny, ale nadal można go porównać do oglądania rozmowy tylko z jednego kąta kamery. Zdania często zawierają jednocześnie kilka relacji: kto co zrobił, do czego odnosi się „to”, które słowa nadają ton, jaki jest temat.
Gdy czytasz „Trofeum nie zmieściło się w walizce, bo ona była za mała”, musisz śledzić kilka wskazówek naraz (gramatyka, sens, kontekst świata rzeczywistego). Jedna głowa uwagi może skupić się na najbliższym rzeczowniku; inna na frazie czasownikowej, aby rozstrzygnąć, do czego odnosi się „ona”.
Multi-head attention uruchamia kilka obliczeń uwagi równolegle. Każda „głowa” patrzy na zdanie z innej perspektywy — często opisywanej jako inne podprzestrzenie. W praktyce głowy mogą specjalizować się w różnych wzorcach, np.:
Po tym, jak każda głowa daje własne wnioski, model nie wybiera jednej z nich. Konkatenacja wyników głów (ułożenie obok siebie) jest następnie rzutowana z powrotem do głównej przestrzeni roboczej modelu za pomocą nauczonej warstwy liniowej.
To jak scalanie kilku notatek w jedno czyste podsumowanie, którego może użyć następna warstwa. Efekt to reprezentacja uchwytująca wiele relacji naraz — jeden z powodów, dla których Transformery działają tak dobrze przy skalowaniu.
Self-attention świetnie wychwytuje relacje — ale samo w sobie nie wie, kto był pierwszy. Jeśli przemieszczasz słowa w zdaniu, zwykła warstwa self-attention może potraktować przemieszczoną wersję jak równoważną, bo porównuje tokeny bez wbudowanego poczucia pozycji.
Kodowanie pozycyjne rozwiązuje to, wstrzykując informację „gdzie jestem w sekwencji?” do reprezentacji tokenów. Gdy pozycja jest dołączona, uwaga może uczyć się wzorców np. „słowo zaraz po nie ma dużą wagę” albo „podmiot zwykle stoi przed orzeczeniem”, bez potrzeby wnioskowania kolejności od zera.
Główna idea jest prosta: osadzenie tokenu łączy się z sygnałem pozycji przed wprowadzeniem do bloku Transformera. Ten sygnał pozycji można traktować jako dodatkowy zestaw cech oznaczających, że token jest 1., 2., 3.… w wejściu.
Istnieją popularne podejścia:
Wybory dotyczące pozycji mają zauważalny wpływ na modelowanie długiego kontekstu — np. podsumowywanie długiego raportu, śledzenie encji przez wiele akapitów czy wyszukiwanie informacji wspomnianej tysiące tokenów wcześniej.
Przy długich wejściach model nie tylko uczy się języka — uczy się, gdzie patrzeć. Metody względne i rotary zwykle ułatwiają porównywanie odległych tokenów i zachowanie wzorców w miarę wzrostu kontekstu, podczas gdy pewne schematy absolutne mogą szybciej pogarszać się poza oknem treningowym.
W praktyce kodowanie pozycyjne to jedno z tych cichych decyzji projektowych, które mogą zadecydować, czy LLM jest ostry i spójny przy 2 000 tokenów — i czy wciąż ma sens przy 100 000.
Transformer to nie tylko „uwaga”. Rzeczywista praca dzieje się w powtarzającym się module — często zwanym blokiem Transformera — który miesza informacje między tokenami i potem je udoskonala. Zestakuj wiele takich bloków, a uzyskasz głębię, która daje dużym modelom językowym ich możliwości.
Self-attention to krok komunikacji: każdy token zbiera kontekst od innych tokenów.
Sieć feed-forward (FFN), zwana też MLP, to krok przetwarzania: bierze zaktualizowaną reprezentację tokenu i uruchamia ten sam mały sieciowy transformator niezależnie dla każdego tokenu.
Mówiąc prosto, FFN przekształca i modeluje to, co każdy token teraz wie, pomagając budować bogatsze cechy (składniowe, faktyczne, stylowe) po zebraniu odpowiedniego kontekstu.
Przeplatanie ma sens, bo obie części robią różne rzeczy:
Powtarzanie tego wzorca pozwala modelowi stopniowo budować wyższe poziomy znaczenia: komunikuj, oblicz, komunikuj, oblicz.
Każda podwarstwa (uwaga lub FFN) owinięta jest połączeniem rezydualnym: wejście jest dodawane z powrotem do wyjścia. Pomaga to w trenowaniu głębokich modeli, bo gradienty mogą płynąć przez „pas omijający”, nawet jeśli dana warstwa wciąż się uczy. Pozwala też warstwie wprowadzać drobne korekty zamiast uczyć wszystkiego od zera.
Layer normalization stabilizuje aktywacje, żeby nie narastały ani nie malały zbytnio w miarę przechodzenia przez wiele warstw. Można to traktować jak utrzymywanie stałego poziomu głośności, by kolejne warstwy nie były przytłoczone lub pozbawione sygnału — co sprawia, że trening jest gładszy i bardziej niezawodny, zwłaszcza w LLM-ach.
Oryginalny Transformer w Attention Is All You Need był zbudowany do tłumaczeń maszynowych, gdzie zamienia się jedną sekwencję (np. francuski) na inną (np. angielski). To zadanie naturalnie dzieli się na dwie role: dobrze przeczytać wejście i płynnie napisać wyjście.
W enkoder–dekoderze enkoder przetwarza całe wejście naraz i produkuje bogaty zestaw reprezentacji. Dekoder potem generuje wyjście token po tokenie.
Dekoder nie polega tylko na swoich wcześniejszych tokenach: używa też cross-attention, by zerkać na wyjście enkodera i utrzymywać się w źródle tekstu.
To ustawienie nadal sprawdza się, gdy musisz mocno warunkować odpowiedź na konkretnym wejściu — tłumaczenie, streszczenie czy odpowiadanie na pytanie z określonego fragmentu tekstu.
Większość nowoczesnych LLM-ów to tylko-dekoder. Trenują się do prostego, potężnego zadania: przewidywania następnego tokena.
Aby to zadziałało, używają maskowanej self-attention (tzw. causal attention). Każda pozycja może zwracać uwagę tylko na wcześniejsze tokeny, nie na przyszłe, dzięki czemu generacja przebiega lewo‑do‑prawo i jest spójna.
To podejście dominuje w LLM-ach, bo jest proste do trenowania na ogromnych korpusach tekstowych i dobrze odpowiada przypadkom użycia generacji.
Modele enkoderowe (jak BERT) nie generują tekstu; czytają całe wejście dwukierunkowo. Sprawdzają się świetnie do klasyfikacji, wyszukiwania i embeddingów — wszędzie tam, gdzie ważniejsze jest rozumienie tekstu niż tworzenie długiego ciągu wyjściowego.
Transformery okazały się wyjątkowo przyjazne skali: jeśli dasz im więcej tekstu, więcej mocy obliczeniowej i większe modele, mają tendencję do przewidywalnej poprawy.
Duży powód to strukturalna prostota. Transformer składa się z powtarzanych bloków (self-attention + niewielkie FFN + normalizacja), a te bloki zachowują się podobnie, czy trenujesz na milionie słów, czy na bilionie.
Wcześniejsze modele sekwencyjne (jak RNN) musiały przetwarzać tokeny jeden po drugim, co ograniczało skalowanie. Transformery zaś mogą w trakcie treningu przetwarzać wszystkie tokeny sekwencji jednocześnie.
To sprawia, że świetnie pasują do GPU/TPU i dużych środowisk rozproszonych — dokładnie tego, co potrzeba przy trenowaniu nowoczesnych LLM-ów.
Okno kontekstu to fragment tekstu, który model może „widzieć” jednocześnie — twój prompt plus ostatnia rozmowa lub tekst dokumentu. Większe okno pozwala łączyć pomysły przez więcej zdań lub stron, śledzić ograniczenia i odpowiadać na pytania zależne od wcześniejszych szczegółów.
Ale kontekst nie jest darmowy.
Self-attention porównuje tokeny między sobą. W miarę wydłużania sekwencji liczba porównań szybko rośnie (w przybliżeniu kwadratowo względem długości). Dlatego bardzo długie okna kontekstowe są kosztowne pod względem pamięci i obliczeń, i stąd wiele współczesnych prac koncentruje się na efektywniejszej uwadze.
Gdy Transformery są trenowane na dużą skalę, nie tylko poprawiają się w jednym wąskim zadaniu. Często zaczynają wykazywać szerokie, elastyczne zdolności — streszczanie, tłumaczenie, pisanie, kodowanie i rozumowanie — ponieważ ta sama ogólna maszyna ucząca się jest stosowana na ogromnych, zróżnicowanych danych.
Oryginalny projekt Transformera nadal jest punktem odniesienia, ale większość produkcyjnych LLM-ów to „Transformer plus”: drobne, praktyczne poprawki, które zachowują rdzeń (uwaga + MLP), a poprawiają szybkość, stabilność lub długość kontekstu.
Wiele ulepszeń to raczej optymalizacje trenowania i uruchamiania niż zmiana istoty modelu:
Te zmiany zwykle nie zmieniają fundamentalnej „transformerowości” modelu — go udoskonalają.
Rozszerzanie kontekstu z kilku tysięcy tokenów do dziesiątek lub setek tysięcy często opiera się na rzadkiej uwadze (attend tylko do wybranych tokenów) lub efektywnych wariantach uwagi (przybliżenia lub restrukturyzacja uwagi, by obciąć obliczenia).
Koszt to zwykle kompromis między dokładnością, pamięcią i złożonością inżynieryjną.
Modele MoE dodają wiele „ekspertów” — pod‑sieci — i kierują każdy token tylko przez podzbiór z nich. Koncepcyjnie: masz większy mózg, ale nie aktywujesz go w całości za każdym razem.
To może obniżyć obciążenie obliczeniowe na token dla danej liczby parametrów, ale zwiększa złożoność systemu (routing, balansowanie ekspertów, serwowanie).
Gdy model chwali się nowym wariantem Transformera, warto poprosić o:
Większość ulepszeń jest realna — ale rzadko są one darmowe.
Pomysły Transformera, jak self-attention i skalowanie, są fascynujące — ale zespoły produktowe odczuwają je głównie jako kompromisy: ile tekstu możesz wrzucić, jak szybko dostaniesz odpowiedź i ile to kosztuje za żądanie.
Długość kontekstu: Większy kontekst pozwala dołączać więcej dokumentów, historii czatu i instrukcji, ale zwiększa zużycie tokenów i może spowolnić odpowiedzi. Jeśli funkcja wymaga „przeczytaj 30 stron i odpowiedz”, priorytetem jest długość kontekstu.
Opóźnienia: Interaktywne doświadczenia chatowe i copiloty zależą od czasu odpowiedzi. Strumieniowanie wyjścia pomaga, ale wybór modelu, region i batching też mają znaczenie.
Koszt: Ceny zwykle naliczane są za token (wejście + wyjście). Model o 10% „lepszy” może kosztować 2–5× więcej. Porównuj w kategoriach cenowych, by zdecydować, na jaką jakość warto wydać pieniądze.
Jakość: Zdefiniuj ją dla swojego przypadku użycia: dokładność faktograficzna, wykonywanie poleceń, ton, użycie narzędzi czy generowanie kodu. Oceń na rzeczywistych przykładach z twojej domeny, nie tylko na ogólnych benchmarkach.
Jeśli głównie potrzebujesz wyszukiwania, deduplikacji, klastrowania, rekomendacji lub „znajdź podobne”, to embeddingi (często modele enkoderowe) są zwykle tańsze, szybsze i bardziej stabilne niż wywoływanie modelu do generowania. Używaj generacji tylko jako kroku końcowego (podsumowania, wyjaśnienia, szkicu) po pobraniu odpowiednich fragmentów.
Dla głębszego omówienia skieruj zespół do technicznego opracowania o temacie embeddings vs generation.
Gdy przekształcasz możliwości Transformera w produkt, trudność zwykle dotyczy mniej architektury, a bardziej przepływu pracy: iteracji promptów, ugruntowania odpowiedzi w danych, ewaluacji i bezpiecznego wdrożenia.
Jedną praktyczną drogą jest użycie platformy vibe-coding takiej jak Koder.ai, by prototypować i wdrażać funkcje oparte na LLM szybciej: możesz opisać aplikację webową, endpointy backendu i model danych w czacie, iterować w trybie planowania, a następnie eksportować kod źródłowy lub wdrożyć z hostingiem, niestandardowymi domenami i rollbackiem przez snapshoty. To szczególnie przydatne podczas eksperymentów z retrievalem, embeddingami czy pętlami wywołań narzędzi, gdy chcesz szybkie iteracje bez budowania od zera tej samej podstawy.
A Transformer to architektura sieci neuronowej do danych sekwencyjnych, która wykorzystuje self-attention do powiązania każdego tokena z każdym innym tokenem w tym samym wejściu.
Zamiast przenosić informacje krok po kroku (jak RNN-y/LSTM-y), buduje kontekst, decydując na co zwrócić uwagę w całej sekwencji, co poprawia rozumienie zależności na długim dystansie i ułatwia równoległe trenowanie.
RNN-y i LSTM-y przetwarzają tekst po jednym tokenie, co utrudnia pełne równoleglenie treningu i stwarza wąskie gardło dla zależności długodystansowych.
Transformery używają mechanizmu uwagi, aby bezpośrednio łączyć odległe tokeny, a podczas treningu mogą równolegle obliczać wiele interakcji token–token—dzięki czemu łatwiej skalują się przy większych zbiorach danych i mocy obliczeniowej.
Uwaga to mechanizm odpowiadający na pytanie: „Które inne tokeny są teraz najważniejsze, by zrozumieć ten token?”
Można to sobie wyobrazić jako wyszukiwanie w zdaniu:
Wynikiem jest ważona mieszanka istotnych tokenów, dająca każdej pozycji reprezentację zależną od kontekstu.
Self-attention oznacza, że tokeny w sekwencji zwracają uwagę na inne tokeny w tej samej sekwencji.
To podstawowe narzędzie pozwalające modelowi rozwiązywać odwołania (np. do kogo odnosi się „to”), relacje podmiot–orzecznik międzyzdaniowe i zależności pojawiające się daleko w tekście—bez przepychania wszystkiego przez pojedynczą rekurencyjną „pamięć”.
Uwaga wielogłowicowa uruchamia wiele obliczeń uwagi równolegle, a każda głowa może specjalizować się w różnych wzorcach.
W praktyce różne głowy często koncentrują się na różnych relacjach (składnia, powiązania na długim dystansie, rozwiązywanie zaimków, sygnały tematyczne). Model następnie łączy te perspektywy, aby jednocześnie reprezentować wiele struktur.
Samo self-attention nie rozpoznaje kolejności tokenów—bez informacji o pozycjach przesunięcie słów może wyglądać tak samo.
Kodowania pozycyjne wprowadzają sygnał „gdzie jestem w sekwencji?” do reprezentacji tokenów, dzięki czemu model może uczyć się wzorców zależnych od porządku, np. że słowo po „nie” ma szczególne znaczenie.
Popularne opcje to sinusoidalne (stałe), uczone pozycje absolutne oraz metody względne/rotary.
Blok Transformera zwykle łączy w sobie:
Oryginalny Transformer to enkoder–dekoder:
Większość współczesnych LLM-ów to modele trenowane do przewidywania kolejnego tokena z użyciem , co odpowiada generacji lewo‑do‑prawo i dobrze skaluje się na dużych korpusach.
Noam Shazeer był współautorem artykułu z 2017 r. “Attention Is All You Need”, który wprowadził architekturę Transformera.
To trafne stwierdzenie, że był ważnym współtwórcą, ale architektura powstała jako efekt pracy zespołu w Google, a jej wpływ wynika także z późniejszych ulepszeń społeczności i przemysłu.
Dla długich wejść standardowa self-attention staje się kosztowna, ponieważ liczba porównań rośnie w przybliżeniu kwadratowo względem długości sekwencji, co obciąża pamięć i obliczenia.
Praktyczne podejścia to:
Nakładanie wielu takich bloków daje głębię potrzebną do bogatszych reprezentacji i lepszych zachowań przy dużych modelach.