Pull to refresh

Comments 8

Во всех этих текстах (про дифференциальное программирование) ощущается что-то странное. Я прочитал текст, два, три, и, кажется, я начал понимать о чём идёт речь.


… дифференциальное программирование применимо только к чистым функциям, у которых область определения задана на упорядоченных множествах.


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


  • Сайд-эффекты полностью исключены (программа без сайд-эффектов эквивалентна GLUT'у)
  • область определения упорядочена (т.е. мы исключаем большинство бизнес- и индустриальных задач, интерфейсы и т.д.).

Уф, как-то так.

Да, это всё нацелено в computer-science (machine learning, высокопроизводительные вычисления для естественных наук, статистика и т.д.), то есть туда, где всё удобней представимо в функциональном виде, и где большинство проблем можно свести к минимизации функционала.


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

Признаюсь, прочитал статью и перечитал отдельные части несколько раз.
Но так и не понял, чем отличается Differential Programming от обычного Reinforcement Learning.

Конечно, понятно, что нейросети — лишь один из множества способов описать функцию f(x), необходимую для решения некой задачи.
И сама идея применить производную f(x) для поиска решения — как раз понятна.

Но это давно используется при обучении нейросетей.
Что же нового предлагает DP в сравнении с Reinforcement Learning?
Использовать другую, более простую Loss function?

Если да, то можно ли применить это подход для решения задачи MountainCar?
Там не получится определить Loss function столь же просто, как, например, угол наклона маятника в задаче CartPole.
Ведь чтобы решить эту проблему, нужно машинку разгонять влево-вправо, набирая инерцию. Как раз с этой задачей Reinforcement Learning справляется хорошо.

Я думал, дескать, торможу слегка — никак не пойму в чем здесь новшество, а нет, вот люди тоже в недоумении. Ребята из MIT как всегда лукавят и приукрашивают: за сенсационные и непонятные изобретения будет больше грантов, а чтоб была сенсация, достаточно сказать, де у нас новая веха в машинном обучении, прям как рекуррентные сети.


Основная фича DP это автодифференцирование, позволяющее находить производную функции не приближенном численным методом, а прям как в Mathcad или Mathematica, символьно, и хотя у вас не прописывается явный вид вашей производной, все равно генерируется "эффективный машинный код". Вот и получается, что всё волшебство как и у нейронных сетей состоит в решении задачи многомерной оптимизации с множеством переменных.
Пример The Pendulum больше соответствует горной машинке, но можно кстати и на ней MountainCar попробовать

Я правильно понимаю, что в данном методе используется явная, рукописная модель среды, и по этой модели с помощью градиентного спуска ищется оптимальный план действий?
А концепция будет работать, если модель среды — это нейросеть от Model-Based алгоритма? Она точно дифференцируема. Ну и если рельеф подкреплений хоть немного сложный, то локальные оптимумы будут с гарантией (если медленно прыгнуть с обрыва, то убьёшься, а если с разбегу — то перепрыгнешь и получишь профит. Локальный оптимум).

Советую пройтись по предоставленным ссылкам (например https://arxiv.org/abs/1810.07951) чтоб самостоятельно разобраться в теме, а также поискать бложики и дискуссии тех, кто варится в этой области — их объяснения не будут поверхностными

Очень интересная статья! Помогла немного разобраться, что такое дифференцируемое программирование. Наткнулся на тему, когда начал ознакамливаться с https://arxiv.org/abs/2007.08017 "λS: Computable semantics for differentiable programming with higher-order functions and datatypes".

Sign up to leave a comment.

Articles

Change theme settings