Обсуждение:Метод инерции Поляка

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: Работа над статьёй велась последовательно, путём итеративного уточнения запросов к языковой модели. ...)
 
Строка 1: Строка 1:
-
Работа над статьёй велась последовательно, путём итеративного уточнения запросов к языковой модели.
+
Работа велась в целью кардинально упростить промпт, перейдя от микроменеджмента к чистому «целеуказанию», а также протестировать, насколько хорошо модель опирается на прикрепленный RAG-контекст (PDF-лекцию).
-
=== Этап 1: Проектирование структуры и RAG-контекст ===
+
=== Этап 1: Философский промпт и целеуказание ===
-
Статья создавалась полностью с нуля. Для обеспечения максимальной точности формул и терминологии, модели Gemini 3.1 Pro Preview на вход была подана оригинальная PDF-презентация Лекции 2 К.В. Воронцова "Минимизация эмпирического риска, линейные модели и регуляризация".
+
Модели был отправлен короткий запрос вместе с PDF-файлом Лекции 2:
-
Был сформулирован следующий базовый промпт:
+
{{well|1='''Роль:''' Ты специалист в области машинного обучения, профессор и популяризатор науки.
 +
'''Задача:''' Написать вики-статью «Метод инерции Поляка (Momentum)» для новичков и профессионалов.
-
{{well|1=Выступи в роли Senior ML Engineer и специалиста по математической оптимизации. Твоя задача — написать с нуля фундаментальную, глубокую и технически точную энциклопедическую статью для портала MachineLearning.ru на тему «Метод инерции Поляка» (в индустрии известен как Momentum).
+
'''Инструкция по смыслам:'''
 +
1. Начни с наглядной физической аналогии «тяжёлого шарика», катящегося в минимум.
 +
2. Приведи формулы обновления скорости и весов, строго опираясь на прикрепленную лекцию.
 +
3. Опиши, как метод решает проблему «оврагов» и застревания в седловых точках. Обязательно укажи на важное свойство метода: '''немонотонность''' (ошибка может временно возрастать).
 +
4. Проведи сравнение с Ускоренным градиентом Нестерова (NAG) — объясни логику «заглядывания вперёд».
 +
5. Напиши лаконичный класс на Python, реализующий шаг оптимизатора Поляка.
-
Целевая аудитория: студенты профильных вузов (направление "Математические основы ИИ") и практикующие ML-инженеры. Материал должен вести читателя от интуитивного физического понимания инерции к строгой математике метода Поляка, его сравнению с классическим SGD, а также к его автоматическому расширению — ускоренному градиенту Нестерова (NAG) и реализации в коде.
+
'''Технические ограничения:''' Используй MediaWiki-разметку. Абсолютно все переменные оборачивай в теги <nowiki><tex>...</tex></nowiki>.}}
-
ОБЯЗАТЕЛЬНАЯ СТРУКТУРА СТАТЬИ И ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ:
+
'''Рефлексия по итогам этапа:''' Отказ от жесткой структуры сработал отлично — модель написала живой, понятный текст, однако выявилась фундаментальная проблема RAG (Retrieval-Augmented Generation): модель '''проигнорировала формулы из прикрепленной лекции'''. Вместо классической записи через экспоненциальное скользящее среднее с множителем <nowiki><tex>(1 - \gamma)</tex></nowiki>, модель выдала стандартную реализацию из исходников PyTorch (<nowiki><tex>v = \gamma v + h \nabla L</tex></nowiki>). Внутренняя параметрическая память LLM оказалась сильнее внешнего контекста. Кроме того, модель полностью проигнорировала сложную разметку тегами.
-
В самом начале исходного кода строго выведи три строки (БЕЗ использования обратных апострофов и маркдауна): <nowiki>{{well|Статья написана с использованием LLM '''Gemini 3.1 Pro Preview''' и проверена участником ~~~~}}</nowiki>
+
=== Этап 2: Техническая и академическая коррекция ===
-
Промпт приводится полностью в [[Обсуждение:Метод инерции Поляка]]
+
Модели был отправлен строгий корректирующий промпт, для исправления формул соответствующим курсу:
-
== Введение == Дай чёткое определение концепции метода накопления инерции (Momentum), предложенного Б. Т. Поляком в 1964 году.
+
{{well|1=Текст и аналогии написаны великолепно, но ты допустила критические ошибки.
 +
1. ОШИБКА В ФОРМУЛАХ: Ты использовала реализацию PyTorch, проигнорировав прикрепленный PDF. Мне нужны классические формулы через экспоненциальное скользящее среднее.
 +
Исправь формулы Поляка на: v = \gamma v + (1 - \gamma) \nabla L(w). Исправь формулы Нестерова на: v = \gamma v + (1 - \gamma) \nabla L(w - h \gamma v). Код на Python тоже перепиши под эти формулы!
 +
2. ОШИБКА РАЗМЕТКИ: Ты забыла теги! Абсолютно каждую формулу и переменную в тексте оберни в теги <nowiki><tex>...</tex></nowiki>. Выключные формулы начни с ::<nowiki><tex>...</tex></nowiki>
 +
3. PYTHON КОД: Оберни код в теги <nowiki><source lang="python"></nowiki> и сохрани табуляцию.
 +
4. В самое начало статьи добавь плашку <nowiki>{{well}}</nowiki>.}}
-
Сделай подробную, очень наглядную физическую аналогию с тяжелым шариком (методом «тяжёлого шарика» Поляка), катящимся по холмистому ландшафту в точку минимума. Оформи это сравнение в виде понятного структурированного списка, где сопоставь:
+
=== Этап 3: Финальная доработка ===
 +
После второго промпта модель корректно исправила математический аппарат и привела код на Python в соответствие с лекциями К.В. Воронцова. Ручная доработка свелась лишь к проверке закрывающихся тегов и оформлению списка литературы по ГОСТу.
-
1. Положение шарика на холме — это текущий вектор весов модели.
+
Polina Khadralinova 00:09, 7 июля 2026 (MSD)
-
2. Высота холма (рельеф ландшафта) — это значение функции потерь (эмпирического риска).
+
-
3. Сила тяжести, толкающая шарик вниз — это антиградиент (направление наискорейшего спуска).
+
-
4. Масса шарика — это инерция (накапливаемая скорость). В обычном градиентном спуске шарик невесомый (пушинка) и останавливается мгновенно, как только пропадает сила. В методе Поляка шарик тяжёлый и катится дальше по инерции.
+
-
5. Трение среды (сопротивление воздуха или вязкость жидкости) — это коэффициент затухания скорости \gamma, который не даёт шарику бесконечно проскакивать минимум и плавно тормозит его на дне.
+
-
 
+
-
== Математический аппарат и свойства == Распиши формулы шага метода инерции Поляка, используя обозначения из слайда 8 Лекции 2 К.В. Воронцова:
+
-
 
+
-
1. Формулу обновления вектора скорости: v = \gamma v + (1 - \gamma) \nabla \mathcal{L}(w, x_i)
+
-
2. Формулу обновления весов модели: w = w - h v
+
-
3. Объясни смысл параметров: h (шаг / темп обучения) и \gamma (коэффициент инерции). Объясни, почему это эквивалентно усреднению градиента по последним примерно 1 / (1 - \gamma) итерациям.
+
-
 
+
-
== Борьба с препятствиями оптимизации == Подробно опиши, как метод инерции помогает преодолевать проблемы классического градиентного спуска:
+
-
* Проблема "оврагов" (когда градиент колеблется между крутыми склонами, почти не двигаясь к минимуму по дну оврага). Объясни, как инерция гасит поперечные колебания и ускоряет движение вдоль дна.
+
-
* Проблема локальных экстремумов и седловых точек.
+
-
 
+
-
== Развитие метода: Ускоренный градиент Нестерова (NAG) == Опиши метод NAG (Ю. Е. Нестеров, 1983 г.) как эволюцию метода Поляка. Объясни разницу: метод Нестерова вычисляет градиент "заглядывая вперёд" (в точке w - h \gamma v). Приведи формулы NAG:
+
-
1. v = \gamma v + (1 - \gamma) \nabla \mathcal{L}(w - h \gamma v, x_i)
+
-
2. w = w - h v
+
-
 
+
-
== Практическая реализация на Python == Приведи чистый, лаконичный и понятный класс или функцию на Python (с использованием NumPy) для оптимизации методом инерции Поляка. КРИТИЧЕСКИ ВАЖНО: Весь код от первой до последней строчки должен находиться строго внутри ОДНОГО монолитного блока:
+
-
 
+
-
== См. также == Добавь ссылки на: [[Стохастический градиентный спуск]], [[Минимизация эмпирического риска]].
+
-
 
+
-
== Литература == Оформи список литературы строго по шаблонам {{книга}}. Обязательно сошлись на фундаментальную работу Поляка 1964 г. и Нестерова 1983 г. (данные есть на слайде 8 Лекции 2).
+
-
 
+
-
КРИТИЧЕСКИ ВАЖНЫЕ ПРАВИЛА ФОРМАТИРОВАНИЯ (MediaWiki):
+
-
* Движок сайта КАТЕГОРИЧЕСКИ не поддерживает маркдаун (знаки доллара $). Их использование ЗАПРЕЩЕНО.
+
-
* Абсолютно все переменные, индексы и формулы в тексте должны быть строго внутри HTML-подобных тегов <nowiki><tex>...</tex></nowiki> (например: w_t, \gamma, \nabla \mathcal{L}).
+
-
* Выключные (отдельные) формулы начинай с двойного двоеточия: ::...
+
-
* Везде используй букву "ё".}}
+
-
 
+
-
=== Этап 2: Техническое исправление разметки ===
+
-
После первой генерации выяснилось, что модель проигнорировала часть технических требований MediaWiki. Был отправлен второй уточняющий промпт на исправление багов оформления:
+
-
 
+
-
{{well|1=Ты отлично написала содержательную часть статьи! Логика изложения, примеры и сравнение с обычным SGD — великолепны. Но на сайте снова возникли проблемы с разметкой MediaWiki.
+
-
 
+
-
Пожалуйста, перепиши статью заново, исправив ТОЛЬКО следующие технические ошибки оформления (весь текст, формулировки, примеры и физические аналогии оставь абсолютно нетронутыми!):
+
-
 
+
-
1. Исправь списки (убери синие рамки): Движок MediaWiki превращает списки в уродливые синие рамки кода, если перед строкой стоит хотя бы один пробел. Категорически запрещено ставить пробелы перед звёздочками или дефисами. Начни все пункты списков (в физической аналогии и расшифровке параметров) строго с начала строки с символа "*" без единого пробела перед ним.
+
-
2. Перенеси оглавление налево: Удали тег <nowiki>{{TOCright}}</nowiki> из самого начала кода статьи. Оглавление должно встать на свое стандартное место слева перед текстом.
+
-
3. Исправь формулы и переменные в тексте: Ты пропустила много одиночных латинских и греческих переменных (таких как w, v, h, \gamma, \nabla \mathcal{L}, x_i, t) внутри предложений. Найди абсолютно каждую математическую переменную, индекс и формулу в тексте и аккуратно оберни их в теги .... Например: w, \gamma, v, x_i.
+
-
4. Замени символ ":=" во всех формулах на стандартное равенство "=". Движок сайта выдает ошибку [?][?] при попытке отрендерить этот символ. Напиши формулы через обычный знак равенства. Например: v = \gamma v + (1 - \gamma)...
+
-
5. Замени все маркдаун-выделения (двойные звёздочки ** и обратные апострофы `) на стандартную разметку MediaWiki. Для жирного шрифта используй тройные апострофы '''текст'''.}}
+
-
 
+
-
=== Этап 3: Ручная доработка ===
+
-
Поскольку модель не смогла со 100% точностью расставить теги ко всем одиночным переменным в тексте и «склеила» отступы табуляции в коде Python, финальная разметка была скорректирована вручную:
+
-
* Полностью восстановлена структура отступов (табуляция) в Python-коде класса PolyakMomentumOptimizer для корректной компиляции.
+
-
* Из всех списков физической аналогии и расшифровки параметров удалены невидимые лидирующие пробелы, что убрало некорректные синие рамки на предпросмотре.
+
-
* Все пропущенные переменные и индексы (векторы <tex>w</tex>, <tex>v</tex>, параметры <tex>\gamma</tex>, <tex>h</tex>) были вручную обёрнуты в теги <nowiki><tex>...</tex></nowiki>.
+
-
* Символ присваивания ":=" заменён на стандартное равенство "=".
+
-
* Литература оформлена по шаблонам <nowiki>{{книга}}</nowiki>.
+
-
 
+
-
Polina Khadralinova 01:20, 30 июня 2026 (MSD)
+

Текущая версия

Работа велась в целью кардинально упростить промпт, перейдя от микроменеджмента к чистому «целеуказанию», а также протестировать, насколько хорошо модель опирается на прикрепленный RAG-контекст (PDF-лекцию).

Этап 1: Философский промпт и целеуказание

Модели был отправлен короткий запрос вместе с PDF-файлом Лекции 2:


Роль: Ты специалист в области машинного обучения, профессор и популяризатор науки.

Задача: Написать вики-статью «Метод инерции Поляка (Momentum)» для новичков и профессионалов.

Инструкция по смыслам: 1. Начни с наглядной физической аналогии «тяжёлого шарика», катящегося в минимум. 2. Приведи формулы обновления скорости и весов, строго опираясь на прикрепленную лекцию. 3. Опиши, как метод решает проблему «оврагов» и застревания в седловых точках. Обязательно укажи на важное свойство метода: немонотонность (ошибка может временно возрастать). 4. Проведи сравнение с Ускоренным градиентом Нестерова (NAG) — объясни логику «заглядывания вперёд». 5. Напиши лаконичный класс на Python, реализующий шаг оптимизатора Поляка.

Технические ограничения: Используй MediaWiki-разметку. Абсолютно все переменные оборачивай в теги <tex>...</tex>.


Рефлексия по итогам этапа: Отказ от жесткой структуры сработал отлично — модель написала живой, понятный текст, однако выявилась фундаментальная проблема RAG (Retrieval-Augmented Generation): модель проигнорировала формулы из прикрепленной лекции. Вместо классической записи через экспоненциальное скользящее среднее с множителем <tex>(1 - \gamma)</tex>, модель выдала стандартную реализацию из исходников PyTorch (<tex>v = \gamma v + h \nabla L</tex>). Внутренняя параметрическая память LLM оказалась сильнее внешнего контекста. Кроме того, модель полностью проигнорировала сложную разметку тегами.

Этап 2: Техническая и академическая коррекция

Модели был отправлен строгий корректирующий промпт, для исправления формул соответствующим курсу:


Текст и аналогии написаны великолепно, но ты допустила критические ошибки.

1. ОШИБКА В ФОРМУЛАХ: Ты использовала реализацию PyTorch, проигнорировав прикрепленный PDF. Мне нужны классические формулы через экспоненциальное скользящее среднее. Исправь формулы Поляка на: v = \gamma v + (1 - \gamma) \nabla L(w). Исправь формулы Нестерова на: v = \gamma v + (1 - \gamma) \nabla L(w - h \gamma v). Код на Python тоже перепиши под эти формулы! 2. ОШИБКА РАЗМЕТКИ: Ты забыла теги! Абсолютно каждую формулу и переменную в тексте оберни в теги <tex>...</tex>. Выключные формулы начни с ::<tex>...</tex> 3. PYTHON КОД: Оберни код в теги <source lang="python"> и сохрани табуляцию. 4. В самое начало статьи добавь плашку {{well}}.


Этап 3: Финальная доработка

После второго промпта модель корректно исправила математический аппарат и привела код на Python в соответствие с лекциями К.В. Воронцова. Ручная доработка свелась лишь к проверке закрывающихся тегов и оформлению списка литературы по ГОСТу.

Polina Khadralinova 00:09, 7 июля 2026 (MSD)

Личные инструменты