Debugger's Process
131 subscribers
130 photos
78 videos
3 files
70 links
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
После всех моих ухищрений он стал лучше бегать, но так и не стал отзываться на мои сигналы. В голову начинает навязчиво лезть мем "а ты знаешь, что такое безумие?"
❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Все-таки это черная магия. Я вот не могу заранее предсказать, чему научится мужик из MuJoCo при заданных параметрах алгоритма. А уж если код меняешь, то и вовсе.
This media is not supported in your browser
VIEW IN TELEGRAM
Я вот переписал пайплайн немного - суть осталась та же, но распараллелил слегка по-другому. И они теперь стали на редкость изобретательны, хоть сейчас в Министерство Тупых Походок.
This media is not supported in your browser
VIEW IN TELEGRAM
Это вот все при одной и той же архитектуре сетей, при одной и той же фиксированной функции наград. Просто несколько изменился порядок накопления эпизодов обучения в буфере.
Нуу... В целом я не могу сказать, что он "не научился". Свою технику он определенно улучшил.
Странно, что ему это делать проще, чем просто идти или бежать.

https://youtube.com/shorts/HmKsQYN84-w?si=FdGCHyJ6vC98l0N2
Вообще, я переписал пайплайн, чтобы можно было в обучение примешивать примеры от разных агентов.
И сейчас смотрю, что будет, если обучать с примерами от этих трех мужиков из MuJoCo:
Это три великих мастера, у которых учится юный падаван.
Weights & Biases им еще и рандомные имена генерит, чтобы проще было искать.
This media is not supported in your browser
VIEW IN TELEGRAM
А вот и правильный ответ.
Этот товарищ, wobbly-firefly-334, определенно превзошел своих учителей и стал лучшим бегуном из всех, что у меня получались. Хотя, надо сказать, немного похожим на logical-frost-200
❤‍🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Я пробовал заставить его продолжить с чьего-нибудь чужого стейта, например с низко прыгающего dauntless-dragon-312. Но он не шмог. Хотя и попытался.

На 5й секунде видно, как меняется его внутренний стейт - это я загрузил сознание этого бегуна в тело, оставшееся от dauntless-dragon-312.
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Я вам больше скажу. После того, как я дописал пайплайн, чтобы можно было примешивать данные от референсных агентов к обучаемому, я их комбинировал в разных сочетаниях, крутил параметры, и в итоге обучил Мужика из МуЖоКо реагировать на мои сигналы. По-честному, без замены его сознания на ходу.

Вот, смотрите. Изначально у него отрицательная награда (штраф) за высоту его центра масс, поэтому ему выгодно держаться поближе к земле. На 05-00 я меняю сигнал на положительный - и он распрямляется!
👍3❤‍🔥2
После того, как Мужик из MuJoCo начал реагировать на мои сигналы, пришло время подумать о том, что с ним делать дальше.

Дело вот в чем: динамическая функция наград - штука сложная для выучивания, он в облаке учился несколько часов. Дальше, по идее, нужно делать среду, где их двое, чтобы они могли драться друг с другом. Но это многократно усложнит среду - нет, не в два раза, хотя вместо одного мужика там будет два, а намного сильнее. Помимо этого удвоения вычислений к сожалению еще придется включить расчет коллизий всего со всем. Пока мужик один, достаточно считать коллизии его "стоп" с полом. Ну, можно еще голени с полом, чтоб он не проваливался, если вдруг упадет на колени. Но в драке-то ему как-то надо попадать по противнику!

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

Сейчас я немного залип на эксперименты с уже обученной в облаке сеткой.
Алгоритм обучения, Soft Actor-Critic, порождает две сетки - сетку-агента, эктора, который получает на вход состояние среды и выдает вектор действий, и сетку-критика, которая получает на вход состояние среды и действие, и выдает свою оценку ожидаемой награды. Не только за это действие, заметьте, а суммарной ожидаемой награды с учетом discount-фактора (это довольно тонкий момент, я думаю написать статью-другую на Хабр по текущим результатам, где разберу этот вопрос подробнее).

И вот обученная в облаке сетка-критик прямо волшебная. Используя ее, получилось на хилом домашнем компьютере не только нового эктора обучить (это вообще влёт делается, за 25 минут!), но даже новую сетку-критика! Правда, критик учился 10 часов и не стал лучше своего учителя, но все же, разница между обучением с нуля и обучением с обученным в облаке критиком - разительная. С нуля выходят зомби, которые выучиваются не падать, но особо вперед не идут.
👍3
Теперь мне вот интересно, насколько хороших эктора и критика можно получить на домашнем компьютере таким образом. Кроме того, такой подход позволяет мне допиливать пайплайн, используя уже обученную в облаке сетку, чтобы проверять, насколько эффективно пайплайн из нее "дистиллирует" информацию в необученные.

Вообще, в расчете участвуют не две сетки, а целых пять - эктор, два критика (для стабильности, так алгоритм устроен), при помощи которых его учат и еще два критика, при помощи которых учат первых двух. Это теперь такой веселый паззл - есть N обученных сеток, по 5 из которых можно в разных сочетаниях использовать в системе, чтобы породить новые. Вот сидишь и ворочаешь их, раз в десять часов проверяя, стало лучше или нет.

Вот те графики, которые топчутся в единице и не набирают больше наград, чем просто за "не умер еще один ход" - это обучающиеся на моем локальном компьютере с нуля. Остальные - это я потихоньку фиксил пайплайн и все более эффективно вытягивал информацию из обученного в облаке критика.
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Пока получился вот такой дурачок. Обучен на домашнем компьютере вместе с новым критиком при помощи критика из облака!
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Решил написать на JAXе свой рендерер, чтоб им отрендерить бегущего дурачка.

Ощущения смешанные. С одной стороны, JAX как будто специально делали так, чтоб на нем изящно реализовывать ray marching - в несколько десятков строк влезает код, которым уже можно рендерить Мужика из MuJoCo.

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

В общем, у меня получилось 0.05с / кадр не смотря на JIT. Не реалтайм, и я забил на дальнейшее допиливание этого кода)