Model Weights
Веса модели — это выученные значения, которые преобразуют входные данные сети в предсказания. Разбираем, как обучение подбирает веса, а также файлы весов и сжатие.
Веса модели — это обучаемые числа внутри нейронной сети, которые преобразуют входные данные в прогнозы. Каждый вес масштабирует сигнал, передаваемый между двумя узлами, или задаёт одно значение свёрточного фильтра, а вместе веса кодируют всё, чему модель научилась на обучающих данных. Термин часто используют в широком смысле для всех обученных параметров модели, включая смещения и значения нормализации, например в выражениях «предварительно обученные веса» и «модели с открытыми весами». Число параметров может различаться на порядки: у ResNet-50 около 25,6 миллиона параметров, а у больших языковых моделей — миллиарды.
Как обучение задаёт значения весов#
Новая сеть начинает работу с небольших случайных весов, выбранных по таким схемам, как инициализация Хе. Они масштабируют случайные значения с учётом размера каждого слоя, чтобы сигналы не затухали и не взрывались, проходя через множество слоёв. На этом этапе прогнозы модели представляют собой шум. Затем обучение повторяет цикл для каждого батча данных: прямой проход формирует прогнозы, функция потерь оценивает ошибку, обратное распространение ошибки вычисляет вклад каждого веса в эту ошибку, а оптимизатор, например стохастический градиентный спуск (SGD) или оптимизатор Adam, немного изменяет каждый вес, чтобы уменьшить ошибку. После миллионов таких небольших обновлений значения весов стабилизируются и обеспечивают точные прогнозы; во время инференса они остаются неизменными.
Веса и связанные термины#
- Смещения: В слое, вычисляющем
y = Wx + b, весаWумножают входные данные, а смещениеbдобавляет сдвиг. Благодаря этому функция активации узла может смещать свой порог и выдавать ненулевой результат, даже если все входные значения равны нулю. И веса, и смещения обучаются. - Гиперпараметры: Настройки, например скорость обучения и размер батча, выбирают до обучения; они определяют, как будут обучаться веса. Градиентный спуск не обновляет гиперпараметры.
- Активации: Промежуточные результаты, которые сеть вычисляет для конкретного входного значения. Веса остаются неизменными для всех входных данных, а активации пересчитываются для каждого из них.
- Weights & Biases: Платформа для отслеживания экспериментов, название которой отсылает к двум типам параметров.
Сохранение и загрузка весов#
Обученные веса сохраняют в файлы, чтобы их можно было повторно загрузить для инференса, передать другим или использовать как отправную точку для переноса обучения. В PyTorch веса модели хранятся в state_dict и обычно сохраняются в файлы .pt. В этих файлах используется формат pickle из Python, который может выполнять код при загрузке, поэтому начиная с PyTorch 2.6 значение torch.load по умолчанию равно weights_only=True. Формат safetensors хранит только исходные тензоры, исключая выполнение кода и обеспечивая быструю загрузку с отображением в память; это стандартный формат на Hugging Face. Файлы ONNX содержат веса вместе с графом вычислений, чтобы модель могли выполнять другие среды.
Контрольные точки .pt Ultralytics YOLO26 хранят экспоненциальное скользящее среднее (EMA) весов, которое сглаживает пошаговый шум, а также аргументы обучения и результаты по эпохам; каждый запуск обучения сохраняет best.pt и last.pt в папку weights. Если загрузить одну и ту же архитектуру с обученными весами и без них, становится понятно, где хранится знание модели:
from ultralytics import YOLO
# Same YOLO26n architecture with two different sets of weights
trained = YOLO("yolo26n.pt") # weights learned on COCO
untrained = YOLO("yolo26n.yaml") # randomly initialized weights
for name, model in [("trained", trained), ("untrained", untrained)]:
results = model("https://ultralytics.com/images/bus.jpg")
print(f"{name}: {len(results[0].boxes)} objects detected")Обученные веса позволяют обнаружить автобус и людей на изображении, тогда как идентичная сеть со случайной инициализацией не обнаруживает ничего.
Сжатие весов для развёртывания#
Точность представления весов определяет размер файла модели и объём занимаемой ею памяти, что особенно важно для устройств периферийного ИИ. Квантование модели хранит веса с меньшей точностью: переход от 32-битных чисел с плавающей точкой к 8-битным целым числам уменьшает их размер в четыре раза и ускоряет инференс на оборудовании с поддержкой целочисленных операций. Обрезка удаляет веса, мало влияющие на результат, а дистилляция знаний обучает компактную модель имитировать большую. Для сравнения: языковой модели с 7 миллиардами параметров требуется около 28 ГБ для хранения весов в 32-битном формате, 14 ГБ — в 16-битном и 3,5 ГБ — в 4-битном.










