A bug that taught me more about PyTorch than years of using it 🔥 Горячее
Плато обучения в модели PyTorch оказалось не ошибкой гиперпараметров, а багом в бэкенде фреймворка. Автор провёл детективное расследование, которое научило его больше о PyTorch, чем годы использования. Проблема заключалась в ядре MPS для Apple Silicon, где операции addcmul_ и addcdiv_ при работе с ненепрерывными тензорами молча записывали результаты во временный буфер вместо самого тензора.
Из-за инициализации весов энкодера как транспонированных декодера они получали ненепрерывную память, которая наследовалась состояниями оптимизатора Adam. Это приводило к тому, что exp_avg_sq.addcmul_() не обновлялся, оставаясь нулевым, что полностью останавливало обновление параметров. Исправить проблему можно, сделав веса непрерывными при инициализации, обновив PyTorch до версии ≥2.4 или перейдя на macOS 15+.
Комментарии (78)
- Найдена ошибка в градиентах для Apple MPS в PyTorch, вызванная неправильной обработкой не-непрерывных тензоров.
- Сообщество обсуждает, что подобные ошибки встречаются и в других библиотеках и бэкендах, и что их трудно отследить.
- Участники обсуждают, что Apple не поддерживает PyTorch и вместо этого развивает собственный фреймворк MLX, что ведет к фрагментации экосистемы.
- Обсуждается, что отсутствие должной поддержки PyTorch на macOS приводит к тому, что исследователи сталкиваются с такими ошибками, которые могут быть неочевидны и влиять на результаты экспериментов.
Modular Manifolds
Нормализация тензоров в больших нейросетях — ключевой аспект их стабильного обучения. Она предотвращает проблемы численной нестабильности, такие как переполнение или исчезновение градиентов, и упрощает проектирование алгоритмов, обеспечивая предсказуемость размеров весов, активаций и обновлений. Хотя нормализация активаций (например, layer norm) и градиентов уже стала стандартом, нормализация весовых матриц применяется реже, несмотря на потенциальные преимущества.
Ограничение норм весов помогает контролировать относительный размер обновлений, избегать взрыва норм и улучшать condition number матриц, делая их поведение более предсказуемым. Это позволяет сосредоточить усилия по настройке гиперпараметров на наиболее значимых тензорах. Практические реализации, такие как в EDM2, показывают, что такие методы могут улучшать устойчивость и эффективность обучения больших моделей.
Комментарии (53)
- Обсуждение возможности ограничения весов нейронных сетей на многообразиях и переосмысления оптимизации с такими ограничениями.
- Вопросы о новизне подхода, учитывая существующие работы и библиотеки (Pymanopt) по оптимизации на многообразиях.
- Критика и сомнения в представленных эмпирических результатах (низкая точность на CIFAR-10, малый масштаб модели).
- Обсуждение формата публикации (блогпост vs. научная статья) и мотивов авторов.
- Замечания о дизайне и UX сайта с блогпостом (положительные и отрицательные).
The maths you need to start understanding LLMs 🔥 Горячее
- Векторы и матрицы: LLM всё превращают в вектора; главное — скалярное произведение и умножение матриц.
- Softmax: превращает логиты в вероятности; температура регулирует «уверенность».
- Градиент и производная: показывают, как чуть изменить вес, чтобы ошибка уменьшилась.
- Цепное правило: позволяет распространить ошибку через слои; сердце backprop.
- Эмбеддинги: строки → векторы; чем ближе векторы, тем похожее значение.
- Attention: Q·K^T выделяет релевантные токены; V несёт смысл; маска прячет будущее.
- MLP в трансформере: два линейных слоя с ReLU; увеличивает выразительность.
- LayerNorm: стабилизирует распределение после каждого подслоя.
- Позиционное кодирование: добавляет «адрес» токену, иначе порядок теряется.
- Лосс (cross-entropy): средняя «удивлённость»; оптимизатор (Adam) крутит веса.
Дальше — только масштаб: больше слоёв, голов, данных и видеокарт.
Комментарии (106)
- Физики и математики вспомнили, что знание тензорного исчисления, линалгебры и энтропии пригодилось для понимания backprop и LLM.
- Практика: «смотреть» Karpathy недостаточно — нужно кодить за ним; его курс даёт базы и уверенность копать дальше.
- Книга «Build a Large Language Model (from Scratch)» идёт шаг-за-шагом, но объясняет только вычисления, а не «почему это вообще работает»; explainability всё ещё исследуется.
- Путаница: эмбеддинги ≠ вся модель; они лишь вход для трансформера, внутри которого 1,8 трлн параметров и «чёрный ящик».
- LLM — логит-генераторы с неизбежной неопределённостью; цепочки моделей накапливают ошибку и быстро «ломаются» без человека-оркестратора.
- Для 99 % разработчиков хватает линалгебры, softmax, градиентов и PyTorch; остальное — инженерия данных, трюки и эксперименты.