Post #110
1.83K

Да сколько ж можно делать градиентные оптимизаторы?
Посмотрел тут я обзор ещё одной статьи-убийцы SGD [2020]. Вообще, убийцы эти делятся на два вида:
1) Попытки соорудить вручную модифицированную версию градиентного спуска, использующую какое-то представление о том, как устроена функция ошибки. Имею ввиду Adam и прочие.
2) Попытки обучить модель-оптимизатор в рамках meta-learning.
Именно ко второму классу относится данная статья. Вкратце идею можно понять по приложенной картинке (справа) - обучаем рекуррентную модель для каждого тензора, которая получает на вход много всякой информации относительно всего тензора - его размерность, норму градиента и т.д. Её выход попадает в полносвязную сеть у каждого веса, куда ещё попадает много всяких созданных руками фичей про сам градиент.
Обучают эту всю конструкцию с помощью безградиентной оптимизации на различных "задачах", ориентируясь на validation loss. В результате получается не особо лучше того же Adam, как можно судить по графикам из самой статьи.
Мне кажется, этот путь развития достаточно тупиковый по двум причинам:
1) Самое главное - это слишком узкое направление, попытка улучшить один достаточно маленький кусок алгоритма, который, скорее всего, уже и так нормально работает. Нужно пытаться обучать вообще весь алгоритм, а не только правило обновления весов после подсчёта градиента. Ну а что ещё можно сделать с весами в этом случае, кроме как шагать по градиенту?
2) В такой схеме слишком много параметров, а значит, она склонна переобучаться под мета-трейнсет. В этом плане мне гораздо больше нравится Lion, обучаемый по схеме AutoMLZero. Там мы обучаем короткую программу в маленьком пространстве, и у неё нет возможности унести с собой слишком много знаний про мета-трейнсет.
Может быть, я окажусь не прав и когда-нибудь мы все будем писать
@knowledge_accumulator
Посмотрел тут я обзор ещё одной статьи-убийцы SGD [2020]. Вообще, убийцы эти делятся на два вида:
1) Попытки соорудить вручную модифицированную версию градиентного спуска, использующую какое-то представление о том, как устроена функция ошибки. Имею ввиду Adam и прочие.
2) Попытки обучить модель-оптимизатор в рамках meta-learning.
Именно ко второму классу относится данная статья. Вкратце идею можно понять по приложенной картинке (справа) - обучаем рекуррентную модель для каждого тензора, которая получает на вход много всякой информации относительно всего тензора - его размерность, норму градиента и т.д. Её выход попадает в полносвязную сеть у каждого веса, куда ещё попадает много всяких созданных руками фичей про сам градиент.
Обучают эту всю конструкцию с помощью безградиентной оптимизации на различных "задачах", ориентируясь на validation loss. В результате получается не особо лучше того же Adam, как можно судить по графикам из самой статьи.
Мне кажется, этот путь развития достаточно тупиковый по двум причинам:
1) Самое главное - это слишком узкое направление, попытка улучшить один достаточно маленький кусок алгоритма, который, скорее всего, уже и так нормально работает. Нужно пытаться обучать вообще весь алгоритм, а не только правило обновления весов после подсчёта градиента. Ну а что ещё можно сделать с весами в этом случае, кроме как шагать по градиенту?
2) В такой схеме слишком много параметров, а значит, она склонна переобучаться под мета-трейнсет. В этом плане мне гораздо больше нравится Lion, обучаемый по схеме AutoMLZero. Там мы обучаем короткую программу в маленьком пространстве, и у неё нет возможности унести с собой слишком много знаний про мета-трейнсет.
Может быть, я окажусь не прав и когда-нибудь мы все будем писать
from torch.optim import Abracadabra, в котором будет целая модель. Посмотрим!@knowledge_accumulator
- 👍 10
- 😁 3






