Веса модели: где на самом деле живёт всё, что знает нейросеть
Когда говорят «скачать модель на 7 миллиардов параметров», имеют в виду именно их — веса. Это и есть та самая память, опыт и навыки сети, упакованные в гигантскую таблицу чисел. Разбираемся, что это за числа и почему в них вся суть.
Всё, что нейросеть «знает» о мире, — это не правила и не текст, а длиннющий список чисел, и каждое из них настроено обучением.
Архитектура сети — это пустой скелет. Веса — это плоть: именно в них хранится всё, чему модель научилась.
Вернёмся к одному нейрону
В первой статье мы видели: нейрон умножает каждый вход на свой вес и складывает. Вес — это число, говорящее, насколько важен данный вход. Большой положительный вес — «слушай этот сигнал внимательно», около нуля — «игнорируй», отрицательный — «этот сигнал работает против». В сети таких связей миллионы и миллиарды, и у каждой свой вес. Когда говорят «модель на 7 миллиардов параметров» — это и есть количество таких настроенных чисел.
Где здесь знание
Вот ключевая мысль, которая многих удивляет. В обученной сети нет ни строчки текста, ни базы фактов, ни записанных правил. Есть только таблицы чисел. Способность переводить с английского, узнавать кота или дописывать код целиком закодирована в значениях весов. Поменяйте числа — изменится поведение. Обнулите все — и сеть, сохранив свою структуру, разом забудет всё и станет выдавать бессмыслицу. Знание модели и есть конкретный набор её весов.
Скелет и плоть
Важно различать две вещи. Архитектура — это план: сколько слоёв, как они соединены, какие операции выполняют. Её придумывает человек, и сама по себе она пуста. Веса — это содержимое, которое заполняет план в процессе обучения.
| Архитектура | Чертёж сети: слои и связи. Задаёт человек |
| Веса | Числа в связях. Находит обучение, в них — все знания |
Одну и ту же архитектуру можно обучить на разных данных и получить разные модели: один набор весов сделает её переводчиком, другой — анализатором тональности. Скелет тот же — плоть разная.
Откуда берутся эти числа
В начале веса — просто случайные, и сеть несёт чепуху. Дальше работает уже знакомая нам машина: модель делает предсказание, функция потерь измеряет ошибку, градиентный спуск чуть-чуть подправляет каждый вес в сторону уменьшения ошибки. Один крошечный шаг — и снова, и снова, миллионы раз. Постепенно хаотичные числа выстраиваются так, что сеть начинает выдавать осмысленные ответы. Обучение — это, по сути, долгий процесс настройки этих чисел.
weights = [0.0, 0.0] # стартуем с нуля
x = [2.0, 3.0] # один обучающий пример
target = 13.0 # правильный ответ: 2*2 + 3*3 = 13
lr = 0.01
for step in range(500):
pred = weights[0] * x[0] + weights[1] * x[1]
error = pred - target
weights[0] -= lr * error * x[0] # подправляем веса по ошибке
weights[1] -= lr * error * x[1]
print([round(w, 2) for w in weights]) # ~[2.0, 3.0] — сеть нашла нужные числаСеть не знала «правильных» весов 2 и 3 — она нащупала их, раз за разом уменьшая ошибку.
Почему это меняет взгляд на ИИ
Понимание про веса снимает много мистики. «Скачать модель» — значит скачать файл с этими числами. «Дообучить» — значит чуть сдвинуть их под новую задачу. «Модель предвзята» — значит перекос данных отпечатался в её весах. А загадочность ИИ во многом оттого, что эти миллиарды чисел не подписаны: мы видим, что сеть работает, но не можем ткнуть пальцем, в каком именно числе живёт понятие «кот». Понять, что означают конкретные веса, — отдельная большая наука. Но сама природа знания сети предельно прозрачна: это просто числа, настроенные опытом.