Я нашел эту строку кода в более высокой библиотеке:
self.param_groups = _copy.deepcopy(other.param_groups)
и я не понимаю, зачем это нужно.
Если что, я думаю, что это вредно, как я обрисовал здесь . Вы можете go к проблеме, чтобы увидеть мои причины, но суть такова:
Если бы эта глубокая копия не означала, что оптимизатор (внешний l oop) будет вычислять градиенты по параметрам нет в графике вычислений? Поскольку:
параметры дифференцируемого / внутреннего оптимизатора являются глубокой копией по сравнению с исходными параметрами / весами, внешний оптимизатор (например, Адам) будет иметь исходные / начальные параметры, поэтому их градиент всегда должен быть нуль. Это единственное объяснение, которое я могу придумать, чтобы объяснить свои проблемы в прошлом (градиенты неожиданно обнулялись), однако, похоже, работает более высокий учебник MAML, который должен go противоречить моей теории. Если моя теория находится прямо в конце внутреннего l oop MAML и когда внешний оптимизатор (обычно Адам) вычисляет градиенты, они должны быть равны нулю (что я иногда наблюдал). Но я предполагаю, что они НЕ равны нулю, иначе этот учебник не работал бы.
Итак, я спрашиваю о необходимости использования глубокой копии при создании внутренних оптимизаторов. Какова его цель и почему она не вызывает проблем, которые я описываю в исходном руководстве по MAML выше. Как получается, что глубокая копия не прерывает прямой проход и, следовательно, все вычисление градиента относительно инициализации, которую использовал бы внешний оптимизатор?
Я думаю, что в основе моей путаницы лежит то, что Я не понимаю, зачем нам вообще нужно делать deepcopy
. Без всего остального кода (который мне кажется запутанным) мы даже рискуем, что инициализация, которую мы, возможно, захотим обучить с помощью внешнего оптимизатора, может не обучиться, поскольку внешний / мета-оптимизатор имеет указатель на параметры исходной модели, а не копия глубокой копии, которую мог иметь внутренний оптимизатор.
Зачем разработчикам go через все это, добавляя существенный код, который, кажется, имеет высокие риски?
Связанный вопрос о том, как происходит копирование начальных параметров в вышестоящую: Что означает документация copy_initial_weights в вышестоящей библиотеке для Pytorch?