Pull to refresh

Comments 7

Уже сама архитектура модели трансформера немного решает вопрос затухающих градиентов и вопрос взрывающихся градиентов. Оптимизатор Adam - это компромисс, обеспечивающий лучшие результаты, по прежнему это первый кандидат на применение.

То что некоторые веса стремятся к нулю - это тоже компромисс, есть вариант этого избежать. Weight Decay ничего не уничтожает, регуляризация работает как заложено алгоритмом. Малозначимые связи нужно обнулить, чем то приходится жертвовать при поиске паттернов.

В классических линейных слоев (проекции Q, K, V или FFN) Weight Decay работает ровно так, как задумано: он пенализирует избыточные веса, обнуляет шумовые связи и заставляет сеть искать робастные паттерны. В этом и заключается суть регуляризации.

Проблема возникает, когда мы пытаемся натянуть логику плотных (dense) вычислений на разреженные (sparse) структуры, такие как эмбеддинги.

Оптимизатор действительно работает по заложенному алгоритму: если градиент нулевой, WD тянет вес к нулю, считая его малозначимым. Но в языковом моделировании отсутствие градиента у токена (например, слова «триганометрия») в текущем батче не означает, что токен бесполезен. Это означает лишь то, что его не было в этом конкретном куске текста.

Применяя WD к словарю, мы наказываем токены не за их бесполезность для решения задачи, а просто за их редкость. Стирание семантики редких слов это не "поиск паттернов", это баг, вызванный слепым применением алгоритма.

То же самое касается слоев RMSNorm. Обучаемый параметр Scale вообще не участвует в маршрутизации признаков или поиске паттернов. Его единственная физическая задача восстановить нужную амплитуду (дисперсию) сигнала для следующего слоя. Применять к нему L2-штраф значит искусственно заставлять затухать градиент, вынуждая её тратить полезный градиент на борьбу с вашей же регуляризацией.

Я ещё раз перечитал всё что вы написали, мне надо подумать над этим. В разреженных ембеддингах редкие токены получат большее значение, а часто встречающиеся токены меньшее значение - так действует алгоритм tf- idf и некоторые другие.

Если мы не снизим вес слова "утконос", то модель будет выдавать его чаще, чем следует. Градиентный спуск нелинейная функция, L2 - линейная (и именно штрафная) - надо углубиться с какой точностью считаются веса и при каком значении они обнуляются, что бы понять где прерывается переобучение, а где теряется связь.

Я ещё раз перечитал всё что вы написали, мне надо подумать над этим.

Не вдаваясь в техническое содержание, я хочу сказать спасибо за вот эту фразу как пример ведения дискуссии.

L2 - линейная (и именно штрафная) - надо углубиться с какой точностью считаются веса и при каком значении они обнуляются

Если правильно понимаю, при FP32 точности они практически никогда не обнулятся. L2 штрафует большие значения, а для обнуления "мелочи" больше L1 предназначена.

В TFIDF мы осознанно повышаем вес редких слов, потому что они несут больше уникальной информации о документе. В LLM же вероятность выбора слова определяется через softmax от скалярного произведения. Если WD за 10 000 шагов "тишины" (пока слово не встречалось в батчах) стянет вектор редкого слова к нулю, то даже если скрытое состояние h будет идеально указывать на "утконоса", их скалярное произведение будет ничтожным. Модель просто физически не сможет выбрать это слово, даже если оно там единственно верное по смыслу. Мы не снижаем "частоту" выдачи слова, мы снижаем способность модели его узнавать

Что касается точности: веса в современных сетях (особенно при обучении в BF16) обнуляются гораздо раньше, чем вы успеете заметить "переобучение" на редком токене. Как только амплитуда вектора падает ниже определенного порога, он просто теряется в шуме нормализации.

Sign up to leave a comment.

Articles