Stop AI Deception

ЯК ПРАЦЮЄ LLM ТРАНСФОРМЕР

05.04.2026

Намагання зрозуміти процеси навчання чи роботи нейромереж часто припиняється внаслідок дисбалансу між людською уявою та нерівномірністю математичного трасування даних у програмних фреймворках, які керують цими процесами.

Ми теж намагалися трохи спростити для вас пізнання методики роботи нейромережевих програм, які дехто називає штучним інтелектом.

У даній статті ми без формул спробували розібрати загальні принципи навчання та роботи трансформера LLM на рівні GPT-3.

Отже, з чого ми починаємо?

Ми починаємо з поділу текстів на корпуси. Посилання на програми, які це роблять, можна знайти тут. Поки що це не має великого значення для теорії.

Далі створюємо токенізатором словник токенів, де кожному токену даємо ID від 0 і до останнього, наприклад, 50 257. Ці ID - це числа незмінні і замінюють нам слова в математиці. Вони з нами у всіх процесах навчання і роботи LLM.

Далі створюємо таблицю унікальних векторів позицій (адрес токенів у реченні), наприклад, 128 тис рядків (по величині контекстного вікна введення запиту) по 12 тис чисел у кожному. Для нашого запиту вони будуть нумеруватися від 0, 1, 2, 3…128 тис для кожного вхідного токену. Тобто 128 001 токен не потрапляє в модель. Якщо розмова довга, модель може забути її початок у зв'язку з такими обмеженнями (зараз вирішується різними способами уваги).

Вектори позицій формуються з чисел, створених алгоритмами синусоїд для унікальності. Вектори позицій є незмінними цифровими підписами позиції токена у реченні. Числа позиційних векторів поелементно (1 число вектора токена + 1 число позиційного вектора) додаються до 128 тис векторів токенів, які потрапляють у вікно запиту. Вектори позицій важливі здебільшого для порядку слів у реченнях, оскільки дозволяють визначити порядок слів, відстань між словами, тощо. В сучасних трансформерах позиції визначаються без таблиць унікальних векторів - кутом обертання точок - чисел кожного вектора попарно. Індекси “p” позиції токена в порядку (0, 1, 2, …) та індекси “i” позиції числа у векторі токена проходять через формулу з синусами і косинусами (як і позиційні вектори) та зазнають невеликих змін - шуму для семантики та важливих маркерів для позицій токенів.

Далі створюємо таблицю ембедингів: векторів наших ID токенів по 12 288 ваг (параметрів моделі - для 96 голів (про голови - нижче) по 128 чисел - велика таблиця 50 000 x 12 288) для кожного токена. Числа кожної групи (по 128) обробляються матрицями конкретної голови моделі після її навчання, яка відповідає за певну галузь слів (граматика, зв'язки між членами речення, зв'язки конкретного члена речення, тощо). Спочатку числа в ембедінгах рандомні, як і ваги в матрицях (про матриці - нижче), однак потім вони групуються під матриці конкретних голів.

При навчанні у модель ми подаємо їй ID токени у вигляді векторів одночасно у такій послідовності, як вони звучать у реченнях нашої мови. І саме ця часто повторювана для моделі чітка послідовність ID грає важливу роль у формуванні зв'язків між токенами, які полягають у подібності чисел у їхніх векторах (12 тис). Наприклад, вектор слова ID 456 “дім” [0.5,… 0.8] буде схожим на вектор ID 217 слова “будинок” [0.54,...0.79]. Коли ми вводимо слово у чат запиту, токенізатор шукає його в словнику та видає ID його токенів.

Наприклад, речення "кіт і пес" - це таблиця з трьох рядків 30 [0.9...0.76], 450 [0.22...0.15] та 21 [0.4...0.14]. Спочатку модель не знає, що ці числа токенів тісно пов'язані, однак з кожною черговою подачею цього порядку токенів, модель проводить їхні числа в такому ж порядку через спеціальні математичні формули, які дозволяють виявити числову взаємозалежність, в нашому прикладі, між першим, другим і третім токеном саме в такому їх порядку. Якщо ми переставимо токени місцями, результати обчислень будуть інші, і структура взаємозалежностей кожного з трьох токенів з двома іншими, і навіть з самим собою, буде іншою. Це динамічні ваги уваги, які створюються при обробці токенів в їх заданій послідовності шляхом постійного порівняння векторів токенів між собою.

Стійка взаємозалежність результатів математичних обчислень навчання моделі формує числа, які ми називаємо постійними матричними вагами. Динамічні числа ваг уваги одного близького у послідовності токену до іншого є найбільшими у векторі токену. Тобто токен “кіт” має найбільше число ваги уваги до слова “пес” серед інших токенів, а токен "пес" - до токена “кіт”. Але тільки при такій послідовності подання токенів, як речення "кіт і пес".

Саме ергономіка (підбір шляху найменшого опору) обчислень при задіянні цих динамічних ваг проявляє потрібний нам порядок токенів, як найстійкіший, і модель виконує його, витягуючи токени з словника саме в такому порядку. Коли модель генерує текст, вона з допомогою постійних ваг і динамічних ваг уваги шукає такий токен, який при поєднанні з попередніми створить найбільш стійку і логічну структуру згідно з мільярдами варіантів зв'язків (постійних матричних ваг), які модель вивчила.

​Після 12 чи 96 множень (шарів) на матриці початкові числа речення "кіт і пес" перетворюються на такий фінальний набір чисел, який при накладанні на загальний словник токенів видасть найбільше значення (максимальну активацію) навпроти індексу конкретного ID токена (наприклад, слова "кіт").

Тепер розглянемо голови, в яких по три матриці ваг: матриця запиту Q відповідає на питання “Яке слово я шукаю”, матриця ключа K відповідає на питання “Хто я такий” (наприклад - “будинок”), та матриця значення V відповідає на питання "Яку інформацію я передаю, якщо я підходжу запиту?". Ці матриці ваг - це стовбці векторів ваг вже навченої моделі. Кількість векторів-рядків у стовпці завжди дорівнює кількості чисел вектора наших токенів. Голови дивляться тільки на числа векторів, які створюються саме для них. Це групи чисел у векторі (в основному 128) і вони множаться на матриці відповідних голів.

Вектор кожного токена слова множимо на всі вектори трьох матриць у кожній голові. Голова вчиться зв'язувати слова, як члени речення. Для кожного такого зв'язку (наприклад: дія-хто діє - Петро косить, або пунктуація, або порядок слів) існує своя голова.

Ми множимо кожне число вектора токена (їх у нас 12 тис) на кожне число вектора-рядка в матриці. Якщо вектор матриці має 128 чисел в рядку (на одну голову), ми отримуємо 128 нових чисел. Кожне отримане число кожного рядка ми додаємо позиційно-поелементно до інших рядків з 12 тис. наших рядків. Тобто 1 число першого рядка до перших чисел усіх 12 287 рядків. Кожен стовпець на 12 тис чисел в матриці є набором ваг навченої моделі (фільтром). Найбільші результати проходять, менші - зникають, бо перетворюються програмою на 0. Кожний рядок з 12 тис - це ознака.

З результатів додавання чисел у всіх 128 стовпцях ми створюємо новий вектор із 128 чисел. Це скалярні добутки. ​Кількість чисел у такому векторі залежить від архітектури моделі: це може бути 256, 512, 768 або навіть більше у великих моделях. Але принцип незмінний - це один масив чисел, який є результатом усієї математики матричних множень.

Помноживши вектори токенів слова на 3 матриці, отримуємо 3 вектори Q, K та V для кожного токену слова, тобто встановлюємо відповідність векторів токенів слова до певних векторів в матриці.

Під час навчання ваги в цій останній матриці підбираються як цифрові фільтри - вони математично розпізнають специфічні візерунки чисел у фінальному векторі. Через скалярний добуток матриця словника токенів виявляє максимальну схожість між результатом обчислень і конкретним ID слова, що дозволяє моделі точно вказати на наступний токен.

Тобто ми подали послідовність A і B - формули з вагами видали вектор V, матриця словника відреагувала на V і видала ID токена C. Якщо модель помилилася, ми міняємо ваги (числа в матрицях), щоб наступного разу при такому ж V вибрався правильний ID. Це і є навчання.

Тепер цей вектор слід перевести назад у ID токена через проекцію на словник.

У моделі є остання матриця ваг. Її розмір: [128 (наш новий вектор) на кількість токенів у словнику (у нас 50 тис)]. Тобто нові вектори кожної голови із 128 чисел збираються у великий вектор на 12 288 чисел, який множиться на цю велетенську таблицю - порівнюється (через скалярний добуток) із кожним рядком цієї матриці. Кожен рядок цієї матриці відповідає за конкретний ID зі словника.

Наприклад, якщо фінальний вектор за своїм складом чисел схожий на рядок № 450 у цій матриці, то на виході вийде велике число. Якщо не схожий - вийде маленьке або від'ємне число.

Після цього множення ми отримуємо масив довжиною в увесь словник (50 000 чисел). ​Навпроти ID 10 - число 0.1, навпроти ID 450 - число 12.5 (це найбільше число), навпроти ID 2100 - число -2.3. Модель бере токен ID 450, і видає його як наступне слово.

Якщо стаття містить неточності чи помилки, ви можете написати нам або написати коментар під статтею. Ми будемо вам за це вдячні, як і ті, хто тільки вчиться роботі з нейромережами. Про навчання моделей з трасуванням даних у нас є таблиці на головній сторінці сайту.

На сайті Arxiv опубліковано цікаву статтю про фізичну інтерпретацію уваги в трансформерах. У статті увагу розглядають як систему, подібну до термодинамічної рівноваги (стабільних параметрів системи). У фізичній інтерпретації токени - це можливі стани системи, ваги уваги - це ймовірності, а їх розподіл відповідає розподілу частинок по енергіям у статистичній фізиці.

Пройдіть SAID-Test, щоб натренуватись відрізняти фейкові генерації.

said-кореспондент🌐

Ви можете створити окрему тему на форумі спільноти.

Коментарі