<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@awesome_dl</title><author><name>@awesome_dl</name></author><id>https://teletype.in/atom/awesome_dl</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/awesome_dl?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@awesome_dl?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=awesome_dl"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/awesome_dl?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-08-13T10:28:15.481Z</updated><entry><id>awesome_dl:wr4vbAqp0UY</id><link rel="alternate" type="text/html" href="https://teletype.in/@awesome_dl/wr4vbAqp0UY?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=awesome_dl"></link><title>First Principles расчёт realtime видеогенерации</title><published>2026-03-15T11:24:39.937Z</published><updated>2026-03-15T11:28:57.998Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/31/3d/313da504-95d8-4037-b22d-e353c14cdf8e.png"></media:thumbnail><category term="video-generation" label="video generation"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/32/8b/328bb807-c91d-4b4e-a227-f4663cc8678b.png&quot;&gt;Для расчётов нам нужна конкретная архитектура, которую можно разложить на числа. Берём Wan2.1-14B — одну из лучших open-source моделей для генерации видео. (Technical Report).</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#gl5L&quot;&gt;Глава 1: Baseline — считаем от Wan2.1-14B&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#q5rN&quot;&gt;Как устроена модель&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#wIoq&quot;&gt;DiT в числах&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#3rwa&quot;&gt;Сколько токенов обрабатывает DiT?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#CHqR&quot;&gt;FLOPS на один шаг&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#OF1Z&quot;&gt;Калибровка по реальности&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#qNTh&quot;&gt;Где мы сейчас&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#q7A7&quot;&gt;Глава 2: Базовые ускорения — что можно сделать прямо сейчас&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#vmgS&quot;&gt;FlashAttention + torch.compile&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Kh9v&quot;&gt;Step Distillation: 50 → 4 шага&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#NfXM&quot;&gt;CFG distillation&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#N0PD&quot;&gt;Sparse Attention&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#dMc2&quot;&gt;Суммарный эффект&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#nOdj&quot;&gt;Глава 3: Квантизация — меньше бит, больше скорость&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#TF4W&quot;&gt;Глава 4: Новое поколение карточек&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Mm2b&quot;&gt;GPU Roadmap&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ZHLf&quot;&gt;Пересчёт для новых GPU &lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#PWz9&quot;&gt;Глава 5: Мои предположения о будущих улучшениях&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#jgqO&quot;&gt;Глава 6: А давайте всё на мобилку засунем&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#vAwL&quot;&gt;Baseline:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#xa76&quot;&gt;Текущие мобильные NPU&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#HtSq&quot;&gt;Прогноз TOPS по годам&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#gT75&quot;&gt;Выводы&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;gl5L&quot;&gt;Глава 1: Baseline — считаем от Wan2.1-14B&lt;/h2&gt;
  &lt;p id=&quot;GbK7&quot;&gt;Для расчётов нам нужна конкретная архитектура, которую можно разложить на числа. Берём &lt;a href=&quot;https://github.com/Wan-Video/Wan2.1&quot; target=&quot;_blank&quot;&gt;Wan2.1-14B&lt;/a&gt; — одну из лучших open-source моделей для генерации видео. (&lt;a href=&quot;https://arxiv.org/abs/2503.09642&quot; target=&quot;_blank&quot;&gt;Technical Report&lt;/a&gt;). &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;waMQ&quot;&gt;Настоящий realtime на практике почти наверняка будет авторегрессивным — модель генерирует кадр за кадром с фиксированным контекстным окном, а не весь клип целиком. Именно поэтому мы делаем все расчёты в стандартной постановке (5с, 81 кадр, 720p) — это соответствует размеру одного контекстного окна, которое и будет единицей compute в реальной системе. Для ознакомления с работами рекомендую почитать &lt;a href=&quot;https://github.com/PKU-YuanGroup/Helios&quot; target=&quot;_blank&quot;&gt;Helios, &lt;/a&gt;&lt;a href=&quot;https://github.com/NVlabs/LongLive&quot; target=&quot;_blank&quot;&gt;LongLive, &lt;/a&gt;&lt;a href=&quot;https://github.com/guandeh17/Self-Forcing&quot; target=&quot;_blank&quot;&gt;Self-Forcing&lt;/a&gt;&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;q5rN&quot;&gt;Как устроена модель&lt;/h3&gt;
  &lt;p id=&quot;6dHZ&quot;&gt;Генерация видео в Wan2.1 — это три этапа:&lt;/p&gt;
  &lt;figure id=&quot;vKdw&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/32/8b/328bb807-c91d-4b4e-a227-f4663cc8678b.png&quot; width=&quot;2580&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;slSX&quot;&gt;&lt;strong&gt;Этап 1: Text Encoder.&lt;/strong&gt; Текстовый промпт кодируется через &lt;a href=&quot;https://huggingface.co/docs/transformers/model_doc/umt5&quot; target=&quot;_blank&quot;&gt;UMT5&lt;/a&gt; (5.3B параметров) в 512 текстовых токенов. Это делается один раз и кэшируется.&lt;/p&gt;
  &lt;p id=&quot;HUn2&quot;&gt;&lt;strong&gt;Этап 2: DiT (Diffusion Transformer).&lt;/strong&gt; Основной вычислительный блок. 14 миллиардов параметров. Берёт шум в latent space и за 50 steps превращает его в сжатое представление видео. Каждый шаг — полный forward pass через все 40 transformer layers.&lt;/p&gt;
  &lt;p id=&quot;64ag&quot;&gt;&lt;strong&gt;Этап 3: VAE Decode.&lt;/strong&gt; Wan-VAE (127M параметров) декодирует latent представление обратно в пиксели. Вычислительно дёшево по сравнению с DiT.&lt;/p&gt;
  &lt;h3 id=&quot;wIoq&quot;&gt;DiT в числах&lt;/h3&gt;
  &lt;pre id=&quot;Cf5X&quot;&gt;Число параметров                14B
Transformer layers              40
Hidden dimension (d)            5120
Attention heads                 40 (head dim = 128)
Feedforward dimension (d_ff)    13,824&lt;/pre&gt;
  &lt;h3 id=&quot;3rwa&quot;&gt;Сколько токенов обрабатывает DiT?&lt;/h3&gt;
  &lt;p id=&quot;f1X2&quot;&gt;DiT работает не с пикселями, а с latent tokens — сжатым представлением видео. Считаем:&lt;/p&gt;
  &lt;pre id=&quot;wkPQ&quot;&gt;Формула: tokens = (1 + T/4) × (H/16) × (W/16)&lt;/pre&gt;
  &lt;p id=&quot;ENfN&quot;&gt;&lt;strong&gt;720p (1280×720), 5 сек, 16 fps = 81 кадр:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;zS1C&quot;&gt;Temporal: 1 + 80/4 = 21 latent кадров
Spatial:  (720/16) × (1280/16) = 45 × 80 = 3,600 latent пикселей на кадр
Tokens = 21 × 3,600 = 75,600&lt;/pre&gt;
  &lt;p id=&quot;lJ5Q&quot;&gt;&lt;strong&gt;75 тысяч токенов&lt;/strong&gt; — вот с чем работает DiT на каждом из 50 шагов деноизинга.&lt;/p&gt;
  &lt;h3 id=&quot;CHqR&quot;&gt;FLOPS на один шаг&lt;/h3&gt;
  &lt;p id=&quot;8wGp&quot;&gt;Каждый из 40 layers DiT состоит из трёх блоков. Считаем FLOPS для каждого (S = 75,600, d = 5120):&lt;/p&gt;
  &lt;p id=&quot;mjJ6&quot;&gt;&lt;strong&gt;Self-Attention:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;RIVN&quot;&gt;QKV проекции:        8 × S × d²     = 8 × 75,600 × 5120²     ≈ 15.9 TFLOP
Attention (scores):  4 × S² × d     = 4 × 75,600² × 5120     ≈ 117.1 TFLOP
                                                        Итого: ≈ 133 TFLOP&lt;/pre&gt;
  &lt;p id=&quot;aoeL&quot;&gt;&lt;strong&gt;Cross-Attention&lt;/strong&gt; (текст → видео):&lt;/p&gt;
  &lt;pre id=&quot;n2oL&quot;&gt;≈ 8.4 TFLOP per layer&lt;/pre&gt;
  &lt;p id=&quot;uwh8&quot;&gt;&lt;strong&gt;FFN&lt;/strong&gt; (feedforward):&lt;/p&gt;
  &lt;pre id=&quot;1pFV&quot;&gt;4 × S × d × d_ff = 4 × 75,600 × 5120 × 13,824 ≈ 21.4 TFLOP&lt;/pre&gt;
  &lt;p id=&quot;h3uE&quot;&gt;&lt;strong&gt;Итого на один layer:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;M0ea&quot;&gt;133 + 8.4 + 21.4 = ~163 TFLOP&lt;/pre&gt;
  &lt;p id=&quot;SMQG&quot;&gt;&lt;strong&gt;40 layers, один step:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;qzNa&quot;&gt;40 × 163 = ~6,500 TFLOP = 6.5 PFLOP&lt;/pre&gt;
  &lt;figure id=&quot;NNLl&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/08/f3/08f3dfb2-010c-443b-ae5f-611c869a78ae.png&quot; width=&quot;1269&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6zEL&quot;&gt;Self-Attention = &lt;strong&gt;82% всех вычислений&lt;/strong&gt;. Обратите внимание на &lt;code&gt;4 × S² × d&lt;/code&gt; — квадратичная зависимость от числа токенов. Удвоение разрешения → учетверение attention compute.&lt;/p&gt;
  &lt;h3 id=&quot;OF1Z&quot;&gt;Калибровка по реальности&lt;/h3&gt;
  &lt;p id=&quot;Qm5t&quot;&gt;Теоретические FLOPS — это хорошо, но давайте сверимся с реальными замерами.&lt;/p&gt;
  &lt;p id=&quot;gdM3&quot;&gt;Wan2.1-14B на 1×H100:&lt;/p&gt;
  &lt;ul id=&quot;szJf&quot;&gt;
    &lt;li id=&quot;AT84&quot;&gt;&lt;strong&gt;720p, 5 сек, 50 steps: 242 секунды&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;a6DV&quot;&gt;&lt;strong&gt;На 8×H100 (FSDP + Ulysses): 7.7 секунд&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;tVUT&quot;&gt;Из реальных замеров: &lt;strong&gt;1 секунда видео 720p ≈ 48 секунд на H100&lt;/strong&gt; (242 сек / 5 сек). Это наша калиброванная точка отсчёта — все дальнейшие расчёты масштабируем от неё.&lt;/p&gt;
  &lt;h3 id=&quot;qNTh&quot;&gt;Где мы сейчас&lt;/h3&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;IWU2&quot;&gt;&lt;strong&gt;Цель&lt;/strong&gt;: 720p@16fps, streaming realtime — генерировать 1 секунду видео за ≤1 секунду.&lt;/p&gt;
    &lt;p id=&quot;m2hu&quot;&gt;&lt;strong&gt;Реальность&lt;/strong&gt;: 1 секунда видео 720p = 242/5 ≈ &lt;strong&gt;48 секунд&lt;/strong&gt; на H100.&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;q7A7&quot;&gt;Глава 2: Базовые ускорения — что можно сделать прямо сейчас&lt;/h2&gt;
  &lt;p id=&quot;8rbS&quot;&gt;Прежде чем менять железо, выжмем максимум из текущего решения. Для реальных цифр рекомендую глянуть блог от &lt;a href=&quot;https://morphic.com/blog/boosting-wan2-2-i2v-56-faster&quot; target=&quot;_blank&quot;&gt;Morphic&lt;/a&gt;, где они подробно расписали ускорения и провели точные замеры&lt;/p&gt;
  &lt;h3 id=&quot;vmgS&quot;&gt;FlashAttention + torch.compile&lt;/h3&gt;
  &lt;p id=&quot;lCHI&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2307.08691&quot; target=&quot;_blank&quot;&gt;FlashAttention&lt;/a&gt; не уменьшает FLOPS — он уменьшает обращения к памяти. Вместо материализации матрицы attention (75K × 75K ≈ 5.7 миллиардов элементов), считает блоками, не записывая промежуточные результаты в HBM.&lt;/p&gt;
  &lt;p id=&quot;HUg6&quot;&gt;&lt;code&gt;torch.compile&lt;/code&gt; добавляет kernel fusion — объединяет операции в один GPU kernel.&lt;/p&gt;
  &lt;p id=&quot;lmtB&quot;&gt;&lt;strong&gt;Эффект: MFU с ~30% → ~50-60%. Speedup: ~1.5-2×.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Kh9v&quot;&gt;Step Distillation: 50 → 4 шага&lt;/h3&gt;
  &lt;p id=&quot;prVe&quot;&gt;Каждый step — полный forward pass через 14B модель. &lt;a href=&quot;https://arxiv.org/abs/2303.01469&quot; target=&quot;_blank&quot;&gt;Consistency distillation&lt;/a&gt; обучает модель делать то же за меньше шагов:&lt;/p&gt;
  &lt;ul id=&quot;2R8a&quot;&gt;
    &lt;li id=&quot;m7vG&quot;&gt;50 → 8 steps: качество почти не падает&lt;/li&gt;
    &lt;li id=&quot;7OSY&quot;&gt;50 → 4 steps: минимальная деградация&lt;/li&gt;
    &lt;li id=&quot;LZAl&quot;&gt;50 → 1 step: заметная потеря, но usable для preview&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;fsLo&quot;&gt;&lt;strong&gt;Эффект: 50/4 = 12.5×. Консервативно: ~10×.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;NfXM&quot;&gt;CFG distillation&lt;/h3&gt;
  &lt;p id=&quot;q0Kb&quot;&gt;CFG делает два forward pass на каждый step (с промптом и без). Guidance distillation учит модель генерировать &amp;quot;guided&amp;quot; за один проход.&lt;/p&gt;
  &lt;p id=&quot;B4oT&quot;&gt;&lt;strong&gt;Эффект: ~2× speedup.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;N0PD&quot;&gt;Sparse Attention&lt;/h3&gt;
  &lt;p id=&quot;vD1b&quot;&gt;Не все пары токенов одинаково важны. &lt;a href=&quot;https://arxiv.org/abs/2411.13745&quot; target=&quot;_blank&quot;&gt;VSA (Variable Sparse Attention)&lt;/a&gt; и Block Sparse пропускают ненужные пары. &lt;a href=&quot;https://github.com/thu-ml/TurboDiffusion&quot; target=&quot;_blank&quot;&gt;TurboDiffusion&lt;/a&gt; комбинирует sparse attention со step distillation и показывает 100-200× суммарный speedup.&lt;/p&gt;
  &lt;p id=&quot;EzPD&quot;&gt;Консервативная оценка sparse attention отдельно: &lt;strong&gt;~3-6×.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;dMc2&quot;&gt;Суммарный эффект&lt;/h3&gt;
  &lt;pre id=&quot;BJPO&quot;&gt;Baseline (1 сек видео 720p):     48 сек на 1×H100

Flash + compile:     ×1.7    → 28 сек
Step distillation:   ×10     → 2.8 сек
CFG removal:         ×2      → 1.4 сек
Sparse attention:    ×4      → 0.35 сек ✅&lt;/pre&gt;
  &lt;figure id=&quot;z7QG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/88/cb/88cb8b46-7d27-4e4c-b53e-812bc6710903.png&quot; width=&quot;2259&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ZcOX&quot;&gt;&lt;strong&gt;Результат: 720p realtime на одном H100 достижим&lt;/strong&gt; с aggressive optimization (4 steps, sparse, no CFG).&lt;/p&gt;
  &lt;p id=&quot;kjSX&quot;&gt;Реалистичный сценарий (8 steps, moderate sparse, partial CFG):&lt;/p&gt;
  &lt;pre id=&quot;sYgc&quot;&gt;×1.7 × 6 × 1.5 × 3 = ×46
48 / 46 ≈ 1.0 сек — на границе realtime&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;nOdj&quot;&gt;Глава 3: Квантизация — меньше бит, больше скорость&lt;/h2&gt;
  &lt;p id=&quot;Fa75&quot;&gt;Современные GPU имеют физически разные Tensor Cores для разных числовых форматов. FP8 Tensor Cores выдают ровно 2× throughput по сравнению с FP16. &lt;/p&gt;
  &lt;p id=&quot;D66K&quot;&gt;&lt;strong&gt;Compute&lt;/strong&gt;: меньше бит → больше операций в секунду.&lt;/p&gt;
  &lt;pre id=&quot;1Hgr&quot;&gt;H100:  FP16 = 989 TFLOP/s  |  FP8 = 1,979 TFLOP/s (×2)
B200:  FP16 = 2,250        |  FP8 = 4,500   |  FP4 = 9,000 (×4)&lt;/pre&gt;
  &lt;p id=&quot;dyVi&quot;&gt;&lt;strong&gt;Memory&lt;/strong&gt;: меньше бит → меньше данных через шину.&lt;/p&gt;
  &lt;pre id=&quot;tzEK&quot;&gt;14B модель: FP16 = 28 GB  |  FP8 = 14 GB  |  FP4 = 7 GB&lt;/pre&gt;
  &lt;p id=&quot;V6qG&quot;&gt;FP8: потеря качества &amp;lt; 1%, стандарт индустрии. FP4: требует calibration, работает на Blackwell через microscaling.&lt;/p&gt;
  &lt;p id=&quot;O6cV&quot;&gt;Пересчёт с FP8:&lt;/p&gt;
  &lt;pre id=&quot;uPUM&quot;&gt;Aggressive opt, FP16:  0.35 сек → с FP8: 0.18 сек ✅
Moderate opt, FP16:    1.0 сек  → с FP8: 0.5 сек ✅&lt;/pre&gt;
  &lt;figure id=&quot;cx4x&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/8d/ee8dff2c-0b65-41b1-b375-6cbf04af6e85.png&quot; width=&quot;2858&quot; /&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;TF4W&quot;&gt;Глава 4: Новое поколение карточек&lt;/h2&gt;
  &lt;blockquote id=&quot;ad35&quot;&gt;⚡ &lt;strong&gt;Граница&lt;/strong&gt;: H100 и B200 — реальность, можно купить/арендовать сегодня. B300 объявлен, поставки H2 2025. Всё дальше — экстраполяция на основе NVIDIA roadmap и исторических трендов.&lt;/blockquote&gt;
  &lt;h3 id=&quot;Mm2b&quot;&gt;GPU Roadmap&lt;/h3&gt;
  &lt;p id=&quot;Ot15&quot;&gt;NVIDIA анонсировала roadmap на GTC 2025: Blackwell Ultra (B300), Rubin (2026), Rubin Ultra (2027), Feynman (2028).&lt;/p&gt;
  &lt;p id=&quot;Nfvx&quot;&gt;Исторический тренд: ~2× achievable FLOPS каждые ~18 месяцев. Memory bandwidth растёт медленнее (~1.5× за поколение), но новые форматы (HBM4, HBM4E) компенсируют.&lt;/p&gt;
  &lt;p id=&quot;JaWw&quot;&gt;*экстраполяция по тренду ~2× за 18 мес&lt;/p&gt;
  &lt;figure id=&quot;BBhT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/af/41/af412e93-7b1a-4627-b0bf-1f1129c110b9.png&quot; width=&quot;2259&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;ZHLf&quot;&gt;Пересчёт для новых GPU &lt;/h3&gt;
  &lt;figure id=&quot;L0y3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/52/bd/52bd0b4a-d398-48c7-aa78-fcd85f55d7ef.png&quot; width=&quot;3658&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gRco&quot;&gt;&lt;strong&gt;Вывод главы 4&lt;/strong&gt;: 720p realtime уже достигнут на 1×H100 с оптимизациями. 1080p realtime — 8×H100 уже сейчас или 1×Rubin в 2026. Дальше — запас.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;PWz9&quot;&gt;Глава 5: Мои предположения о будущих улучшениях&lt;/h2&gt;
  &lt;p id=&quot;WIBH&quot;&gt;По моей интуиции, сейчас основных bottleneck видео-генерации является не эффективное представление данных — видео из 81 кадра != 81 изображению по объему информации и даже темпоральное сжатие не сильно помогает, так как к примеру использование видео-кодеков позволяет сжатие видео намного сильнее.   По этому мне интересно следить за подходами, которые используют более эффективное предстваление видео, к примеру &lt;a href=&quot;https://sayands.github.io/cope/&quot; target=&quot;_blank&quot;&gt;CoPE-VideoLM&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;DiXr&quot;&gt;Поэтому хочется сделать предположение, что для видео генерации будет использоваться более сжатое представления, и как ориентир взять Wan2.2 VAE. Таким образом:&lt;/p&gt;
  &lt;p id=&quot;rVyM&quot;&gt;Wan2.1 VAE: compression 8×8 spatial → 75,600 tokens для 720p.&lt;/p&gt;
  &lt;p id=&quot;VLUa&quot;&gt;Wan2.2 VAE: compression &lt;strong&gt;16×16&lt;/strong&gt; spatial:&lt;/p&gt;
  &lt;ul id=&quot;bh77&quot;&gt;
    &lt;li id=&quot;siBv&quot;&gt;Tokens в &lt;strong&gt;(16/8)² = 4× меньше&lt;/strong&gt; → ~18,900 tokens&lt;/li&gt;
    &lt;li id=&quot;RVNZ&quot;&gt;Attention compute: &lt;strong&gt;4² = 16× меньше&lt;/strong&gt; (квадратичная зависимость!)&lt;/li&gt;
    &lt;li id=&quot;FRCe&quot;&gt;Weighted average (attention ~82%): &lt;strong&gt;~13.6× суммарное ускорение&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dQxF&quot;&gt;С patchification 2×2: total compression 32×32×4 → ещё 4× меньше.&lt;/p&gt;
  &lt;figure id=&quot;7gpg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8d/dd/8ddd9c66-2753-4b8f-8305-42d8498dcde6.png&quot; width=&quot;2258&quot; /&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;3WWK&quot;&gt;Использование более эффективного VAE сравнимо с двумя поколениями GPU это уже 2-4 года.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;IPly&quot;&gt;Если финализировать текущие оптимизации на горизонт 2027 года с более эффективными VAE и оптимизации, то мы получаем, что видео генерации это дело  ближайших пару лет. При этом запас ускорения позволяет сделать архитектуру еще больше, значит мы получим качественную видеогенерацию в реалтайм уже скоро.&lt;/p&gt;
  &lt;figure id=&quot;RZ7x&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c8/4a/c84a9a9d-0228-4f2e-baad-491e2c1b26ca.png&quot; width=&quot;4058&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;RZWP&quot;&gt;Пока писался этот пост вышла realtime видео генерация в 1080p на базе LTX2.3 &lt;a href=&quot;https://haoailab.com/blogs/fastvideo_realtime_1080p/&quot; target=&quot;_blank&quot;&gt;https://haoailab.com/blogs/fastvideo_realtime_1080p/&lt;/a&gt;. А у LTX сжатие 32x пространственное и 8x темпоральное&lt;/blockquote&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;jgqO&quot;&gt;Глава 6: А давайте всё на мобилку засунем&lt;/h2&gt;
  &lt;p id=&quot;gcPa&quot;&gt;Серверные GPU — хорошо, но телефон в кармане — другая история. Хочется взять телефон и например сделать свой персональный  Subwafe Surfer симулятор, чтобы мотивировать себя заниматься бегом. Давайте глянем насколько мы далеко от реальности. За основу возьмем архитектуру 1.3B, т.к на мобильных устройствах слабее железо&lt;/p&gt;
  &lt;h3 id=&quot;vAwL&quot;&gt;Baseline:&lt;/h3&gt;
  &lt;pre id=&quot;jjk3&quot;&gt;Модель: 1.3B, INT8 = 1.4 GB
Разрешение: 480p
FPS на H100 FP8: 24.8
Computational Power H100: 3,958 TFLOPS (FP8)&lt;/pre&gt;
  &lt;h3 id=&quot;xa76&quot;&gt;Текущие мобильные NPU&lt;/h3&gt;
  &lt;p id=&quot;AzUl&quot;&gt;Давайте глянем на вычислительную мощность современных мобильных чипов.&lt;/p&gt;
  &lt;pre id=&quot;wCr5&quot;&gt;Qualcomm X2 Elite  │ 80 TOPS = 80 TFLOPS (FP8)
Snapdragon 8 Elite │ 45 TOPS = 45 TFLOPS (FP8)
Apple A18 Pro      │ 35 TOPS = 35 TFLOPS (FP8)&lt;/pre&gt;
  &lt;figure id=&quot;c4CF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bb/32/bb324a96-c229-4a6a-90c0-4844df7ee935.png&quot; width=&quot;2058&quot; /&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;uqAF&quot;&gt;Видно, что разница колоссальная текущие вычислительные мощности не позволяют даже близко делать реалтайм на мобильном устройстве. При этом мы даже не учли, что стэк для мобильных устройств менее развит и соответственно реальная скорость будет еще медленнее.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;HtSq&quot;&gt;Прогноз TOPS по годам&lt;/h3&gt;
  &lt;p id=&quot;QndP&quot;&gt;Да, всё выглядит грустно, однако, давайте сделаем прогноз по годам&lt;/p&gt;
  &lt;p id=&quot;vPum&quot;&gt;Прогноз TOPS: исторический тренд ~2× каждые 2 года. Следуя данному прогнозу мы получим:&lt;/p&gt;
  &lt;pre id=&quot;VjSk&quot;&gt;2025: 45-80 TOPS (реальность)
2027: ~150 TOPS (Intel Nova Lake анонс + тренд)
2029: ~250 TOPS (экстраполяция ×2 от 2027)
2030: ~400 TOPS
2031: ~600 TOPS
2033: ~1,500 TOPS&lt;/pre&gt;
  &lt;figure id=&quot;sobt&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/99/eb/99eb2ed8-a21c-48cf-baf2-eb8ff5e97aa0.png&quot; width=&quot;2259&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;uqED&quot;&gt;&lt;strong&gt;Вывод&lt;/strong&gt;: мобильный realtime с текущим AR подходом — это долгая история. &lt;strong&gt;480p@1FPS: ~2027&lt;/strong&gt;. &lt;strong&gt;480p@12FPS: ~2031-2033&lt;/strong&gt;. 720p realtime на мобилке — не раньше 2033-2035.&lt;/p&gt;
  &lt;p id=&quot;HN4q&quot;&gt;Но: это без учёта будущих архитектурных прорывов (smaller models, better compression, hardware-aware architectures). Каждое 10× improvement в model efficiency сдвигает timeline на ~3 года влево.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;gT75&quot;&gt;Выводы&lt;/h2&gt;
  &lt;p id=&quot;wgEx&quot;&gt;&lt;u&gt;Глядя на вычисления, качественная реалтайм генерация на серверах вопрос ближайших 2 лет.&lt;/u&gt; Отсюда можно дальше прогнозировать, когда появятся реалтайм игры, я бы поиграл в бесконечный Euro Truck Simulator или Subnautica. Надеюсь это будет к 2030 году.&lt;/p&gt;
  &lt;p id=&quot;mNgo&quot;&gt;Для меня оказалось неожиданным насколько мы далеки до realtime генерации на мобильных устройствах в 2030-е года не выглядит как AGI завтра. Возможно мы получим её за счёт качественного сдвига в инференсе - специальные чипы более оптимизированные архитектуры, где будут решены две проблемы: attention и более эффективное представление видео. &lt;u&gt;Тут прогнозирую ближе к 2030 году&lt;/u&gt;&lt;/p&gt;
  &lt;p id=&quot;xgX1&quot;&gt;Добавлю, что расчеты для архитектуры Wan не слишком реалистичны, потому что более бОльшие архитектуры показывают качественный рост в консистентности, prompt following и эстетике. Чтобы учесть этот фактор и посмотреть, когда будет реалтайм на 30B, 200B архитектурах или попытаться использовать свою интуицию, чтобы оценить время realtime переходите на интерактивное &lt;a href=&quot;https://anvilarth.github.io/realtime-video-calculator.html&quot; target=&quot;_blank&quot;&gt;демо.&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>awesome_dl:llm4robotics</id><link rel="alternate" type="text/html" href="https://teletype.in/@awesome_dl/llm4robotics?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=awesome_dl"></link><title>Применение LLM для синтеза и стилизации поведений агентов</title><published>2023-08-29T15:11:13.983Z</published><updated>2023-08-29T15:11:50.535Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/0d/af/0daf0140-1b5b-4003-96dd-ccc3433e9aa6.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a9/27/a9276c2e-4717-4da2-b468-9bb9b2e23f89.png&quot;&gt;TLDR: Рассмотрим, как можно использовать LLM-ки для управлением роботами и какие от этого можно получить преимущества.</summary><content type="html">
  &lt;p id=&quot;bgWF&quot;&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; Рассмотрим, как можно использовать LLM-ки для управления роботами и какие от этого можно получить преимущества.&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#NrpG&quot;&gt;1. Введение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#9BbK&quot;&gt;2. Reward Design with Language Models (Kwon et al., 2023)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#XlON&quot;&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#qk21&quot;&gt;3. SayTap: Language to Quadrupedal Locomotion (Tang et al., 2023)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Q669&quot;&gt;4. Language to Rewards for Robotic Skill Synthesis (Yu et al., 2023)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#1HNO&quot;&gt;5. Code as Policies: Language Model Programs for Embodied Control (Liang et al., 2023)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Piyg&quot;&gt;6. Заключение&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#i32j&quot;&gt;7 Supplementary: подробнее про MPC&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;NrpG&quot;&gt;1. Введение&lt;/h2&gt;
  &lt;p id=&quot;AVO4&quot;&gt;В нашем &lt;a href=&quot;https://teletype.in/@awesome_dl/rl2robots&quot; target=&quot;_blank&quot;&gt;предыдущем обзоре&lt;/a&gt; мы рассмотрели, как Reinforcement Learning (RL) помогает управлять сложными роботехническими конструкциями, такими как четвероногие роботы. Важную роль в здесь играет дизайн функции награды (reward) — именно награда определяет, какую задачу будет решать агент. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;FdTv&quot;&gt;Функция награды в определенном смысле &lt;strong&gt;формализует&lt;/strong&gt; задачу, которую будет решать RL-алгоритм, и, соответственно, целевое поведение агента, которого мы хотим добиться. &lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;yf9v&quot;&gt;Дизайн функции награды сам по себе может стать отдельной сложной задачей. Эта задача становится ещё сложнее, если мы хотим добиться поведения, которое, с одной стороны, интуитивно понятно человеку, но с другой стороны едва ли возможно явно отобразить с помощью математических выражений в функции награды. RL чаще всего позволяет одновременно решить одну задачу — другими словами, научить робота одному &lt;strong&gt;навыку&lt;/strong&gt;. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;EnjI&quot;&gt;Возникает вопрос: можем ли мы безболезненно комбинировать эти навыки, а также синтезировать новые без обучения?&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;dheQ&quot;&gt;Конечно, для вышеперечисленных проблем у нас есть методы &lt;a href=&quot;https://smartlabai.medium.com/a-brief-overview-of-imitation-learning-8a8a75c44a9c&quot; target=&quot;_blank&quot;&gt;imitation learning&lt;/a&gt;, посвященные обучению политики, имитирующей демонстрации эксперта (им может выступать как какая-то другая политика, так и человек — в этом случае подразумевается наличие датасета демонстраций от человека). Из описаний видно, что главный недостаток этих методов — необходимость достаточного количества экспертных демонстраций, и собрать эти демонстрации, особенно если речь идет о реальных роботах, может быть довольно сложно. &lt;/p&gt;
  &lt;p id=&quot;PgeP&quot;&gt;На тему комбинации навыков (skill combination) работы существуют (например, &lt;a href=&quot;https://arxiv.org/abs/2106.13105&quot; target=&quot;_blank&quot;&gt;первая&lt;/a&gt; и &lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/9981105&quot; target=&quot;_blank&quot;&gt;вторая&lt;/a&gt;), также, возможно, сюда подходит и &lt;a href=&quot;https://pub.towardsai.net/what-is-hierarchical-reinforcement-learning-e61f8a41c8e1&quot; target=&quot;_blank&quot;&gt;Hierarchical Reinforcement Learning&lt;/a&gt; (&lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/3453160?casa_token=p92gmD5nmfEAAAAA:BKQk6hEEhGH0bJ0Pk5Jy4nwFlIVtH0eLiq_s3t6XUR7TEX_xceqc12trwMYl_QEmD78XT4Byj62aSg&quot; target=&quot;_blank&quot;&gt;тык&lt;/a&gt; на survey), но это все пока что, насколько мне известно, не особо исследованные в контексте роботехники направления.&lt;/p&gt;
  &lt;p id=&quot;xgWB&quot;&gt;Поэтому, вдохновившись показателями уровня знаний, заложенных в LLM, и их результатами в reasoning-задачах, исследователи задались вопросом: &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;1WQm&quot;&gt;Достаточно ли у LLM reasoning-способностей и знаний о нашем мире, чтобы синтезировать поведения роботов из только лишь текстовых описаний и, возможно, нескольких примеров (также только в форме текста), и если ответ &amp;quot;да&amp;quot;, то как мы можем &amp;quot;соединить&amp;quot; LLM с роботом?&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;U6UU&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;9BbK&quot;&gt;2. Reward Design with Language Models (Kwon et al., 2023)&lt;/h2&gt;
  &lt;blockquote id=&quot;qkLl&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2303.00001&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;lEMA&quot;&gt;Начнем немного издалека, кратко рассмотрев данную работу из начала 2023 года. Авторы исследуют задачу формализации &amp;quot;неформальных&amp;quot; поведений агента в небольших текстовых играх на тему экономики и бизнес-переговоров с помощью LLM. Сами авторы называют подобных агентов &lt;strong&gt;objective-aligned agents&lt;/strong&gt;. Пример поведений: быть более настойчивым в переговорах, или наоборот, более пассивным.&lt;/p&gt;
  &lt;figure id=&quot;A60I&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/12/8f/128fc6cd-4eca-4095-81a2-e4c729a2ed7c.png&quot; width=&quot;1039&quot; /&gt;
    &lt;figcaption&gt;Схема предложенного подхода (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;EIyq&quot;&gt;Идея заключается в том, чтобы использовать LLM, а именно, GPT-3, в качестве, как они сами её называют, прокси-функцией награды. Конкретно, предлагается следующая схема:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;ol id=&quot;VDPf&quot;&gt;
      &lt;li id=&quot;Ek6t&quot;&gt;Для текущей версии политики запускаем эпизод, и собираем данные с этого эпизода (episode outcomes) — как некий &amp;quot;лог&amp;quot; игры&lt;/li&gt;
      &lt;li id=&quot;3JjT&quot;&gt;Конструируем &lt;s&gt;затравку&lt;/s&gt; промпт для LLM. Этот промпт состоит из следующих блоков:&lt;/li&gt;
      &lt;ul id=&quot;ogfp&quot;&gt;
        &lt;li id=&quot;B8bb&quot;&gt;Описание задачи&lt;/li&gt;
        &lt;li id=&quot;fmkr&quot;&gt;Примеры требуемого поведения&lt;/li&gt;
        &lt;li id=&quot;xIvo&quot;&gt;Собранные данные с эпизода&lt;/li&gt;
        &lt;li id=&quot;k6lz&quot;&gt;Вопрос к LLM о соответствии поведения из эпизода решению описанной задачи и приведенному в пример поведению. На вопрос можно ответить &amp;quot;да&amp;quot; или &amp;quot;нет&amp;quot;.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;li id=&quot;CcXI&quot;&gt;Из ответа LLM парсим награду. В данной работе рассматриваются только бинарная награда. Ответ &amp;quot;да&amp;quot; соответствует получению reward, ответ &amp;quot;нет&amp;quot; соответствует штрафу.&lt;/li&gt;
      &lt;li id=&quot;djFA&quot;&gt;На основе награды, обновляем политику с помощью любого RL-алгоритма (в данной работе использовался &lt;a href=&quot;https://paperswithcode.com/method/dqn&quot; target=&quot;_blank&quot;&gt;Deep Q-Learning&lt;/a&gt;)&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/section&gt;
  &lt;p id=&quot;H38q&quot;&gt;По результатам авторы показали, что с помощью такого подхода вполне можно достичь уровня RL-агента, обученного с помощью ground truth-наград, и требует это меньше примеров в промптах, чем данных для supervised learning-бейзлайна. Целевых &amp;quot;стилизованных&amp;quot; поведений также удалось достичь (или, по крайней мере убедить в этом группу из 10 человек).&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;PLVA&quot;&gt;В целом, подход довольно интересный, но имеет один главный недостаток — учитывая, что источником награды являлась GPT-3, расширить такой подход на реальные роботехнические задачи: во-первых, скорее всего, нужна будет мультимодальная модель, и, во-вторых, скорее всего, обучение будет занимать очень много времени из-за инференса LLM (а на практике зачастую нужны тысячи и десятки тысяч эпизодов). Какие у нас есть альтернативы?&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;XlON&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;qk21&quot;&gt;3. SayTap: Language to Quadrupedal Locomotion (Tang et al., 2023)&lt;/h2&gt;
  &lt;blockquote id=&quot;7oTS&quot;&gt;&lt;a href=&quot;https://saytap.github.io/&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;GtuY&quot;&gt;В данной работе авторы рассматривают задачу управления роботом-собакой с помощью LLM. Управление подразумевает как выполнение простых команд, например, &amp;quot;Иди вперед&amp;quot; или &amp;quot;Иди назад&amp;quot;, так и менее структурированных и более &amp;quot;стилизованных&amp;quot;, как в предыдущей работе, например, &amp;quot;Радуйся, мы идем на пикник!&amp;quot; или &amp;quot;Осторожно, перед тобой белка, отойди!&amp;quot; (отличные видосики смотрите на &lt;a href=&quot;https://saytap.github.io/&quot; target=&quot;_blank&quot;&gt;сайте работы&lt;/a&gt;).&lt;/p&gt;
  &lt;p id=&quot;ZBV3&quot;&gt;Предложенный подход состоит из двух главных блоков:&lt;/p&gt;
  &lt;ol id=&quot;FgiD&quot;&gt;
    &lt;li id=&quot;rNoB&quot;&gt;Блок генерации &lt;strong&gt;паттерна&lt;/strong&gt; (шаблона) походки на основе LLM: языковая модель на основе промпта генерирует шаблон, то есть некоторое описание походки для робота. Важно отметить, что этот блок &lt;strong&gt;не требует никакого обучения&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;7yNs&quot;&gt;Контроллер походки: принимает на вход сгенерированный паттерн и отвечает за то, чтобы робот двигался в соответствии этому паттерну. Данный &lt;strong&gt;блок обучается с помощью RL-я&lt;/strong&gt;, во время обучения генерируются случайные паттерны.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;iUlF&quot;&gt;Пример на картинке ниже:&lt;/p&gt;
  &lt;blockquote id=&quot;HJfq&quot;&gt;Блог генерации паттерна, получив команду &amp;quot;Good news, we are going to a picnic this weekend&amp;quot;, создает последовательность, говорящую роботу, что ты должен прыгать от радости :) Контроллер, принимая, этот паттерн исполняет его и мы видим, как прыгает робот&lt;/blockquote&gt;
  &lt;figure id=&quot;aahc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/92/fa/92fa8fdc-5288-44e2-99e8-4c71903080fb.png&quot; width=&quot;860&quot; /&gt;
    &lt;figcaption&gt;Иллюстрация паттерна походки (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vqMz&quot;&gt;Паттерн походки имеет вид последовательностей из T (число дискретных шагов) нулей и единиц для каждой из ног робота, где 0 означает, что нога должна быть поднята, а 1 — что она должна касаться земли. На рисунках выше ноги обозначены как FL — front left (передняя левая), FR — front right (передняя правая), RL — rear left (задняя левая), RR — rear right (задняя правая). Имхо, чем-то это напоминает игру Guitar Hero :)&lt;/p&gt;
  &lt;figure id=&quot;WxsR&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;iframe src=&quot;https://giphy.com/embed/l0HlNhH1go9seUvrq&quot;&gt;&lt;/iframe&gt;
    &lt;figcaption&gt;Легендарная игра Guitar Hero :)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;GGDE&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/b0/11b05444-7128-4422-8d03-4c9382b9eea6.png&quot; width=&quot;1056&quot; /&gt;
    &lt;figcaption&gt;Структура промпта (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mp7Q&quot;&gt;Теперь самое интересное — как эти паттерны предлагается генерировать. Авторы использовали GPT-4 и промпты, состоящие из следующих блоков:&lt;/p&gt;
  &lt;ol id=&quot;2SBg&quot;&gt;
    &lt;li id=&quot;8HnH&quot;&gt;Общее описание задачи&lt;/li&gt;
    &lt;li id=&quot;Ib37&quot;&gt;Общее описание того, что вообще такое походка, базовая классификация типов походок для робособак&lt;/li&gt;
    &lt;li id=&quot;MiHW&quot;&gt;Общие правила генерации шаблона и походки и его формат. Здесь также указывается, что общая скорость тела робота задается дискретными значениями — это помогает обрабатывать неформальные запросы типа &amp;quot;быстрее&amp;quot; или &amp;quot;медленнее&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;2gfT&quot;&gt;Блок с примерами&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;Ixil&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/75/48/754803e2-ce7e-4504-b21b-fa2535405bd9.png&quot; width=&quot;846&quot; /&gt;
    &lt;figcaption&gt;Общая схема предложенного подхода на этапе обучения и инференса — деплоя на реальном роботе (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8eyd&quot;&gt;В итоге, взаимодействие с человеком выглядит следующим образом:&lt;/p&gt;
  &lt;ol id=&quot;DCWv&quot;&gt;
    &lt;li id=&quot;UAwK&quot;&gt;Пользователь вводит команду для робота&lt;/li&gt;
    &lt;li id=&quot;FYSY&quot;&gt;LLM на основе базового промпта и введенной команды пользователя генерирует паттерн походки&lt;/li&gt;
    &lt;li id=&quot;49hb&quot;&gt;Сгенерированный паттерн походки &amp;quot;исполняется&amp;quot; контроллером походки.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;cwhm&quot;&gt;Контроллер походки обучался с помощью PPO, в ходе обучения генерировались случайные паттерны в соответствии с определенным механизмом, позволяющим получить более-менее информативные и выполняемые сэмплы.&lt;/p&gt;
  &lt;figure id=&quot;8Ps4&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5a/b2/5ab23424-afcb-4df3-a373-b00d1396d48e.png&quot; width=&quot;1039&quot; /&gt;
    &lt;figcaption&gt;Пример команды для робота и соответствующего ожидаемого авторами поведения (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;lWQN&quot;&gt;Предложенный подход показывает важные свойства LLM, касающиеся понимания &amp;quot;динамики&amp;quot; мира на основе лишь текстовых описаний. Однако, хоть с помощью данного подхода и получилось добиться интересных результатов по &amp;quot;стилизации&amp;quot; движения, его расширение на другие типы роботов или на другие задачи в рамках роботов-собак, как отмечают авторы, ограничено за счет привязки предложенной структуры паттерна для узкого круга задач.&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;hUp4&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Q669&quot;&gt;4. Language to Rewards for Robotic Skill Synthesis (Yu et al., 2023)&lt;/h2&gt;
  &lt;blockquote id=&quot;RklZ&quot;&gt;&lt;a href=&quot;https://language-to-reward.github.io/&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;; &lt;a href=&quot;https://ai.googleblog.com/2023/08/language-to-rewards-for-robotic-skill.html&quot; target=&quot;_blank&quot;&gt;пост в блоге Google Research&lt;/a&gt;&lt;/blockquote&gt;
  &lt;figure id=&quot;gs3e&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/7KiKg0rdSSQ?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Zf37&quot;&gt;Данная работа также посвящена управлению и генерации навыков для роботов с помощью LLM, однако, помимо четвероного робота, рассматривается также управление манипулятором. В предыдущей статье &amp;quot;связующим звеном&amp;quot; между LLM и роботом выступал паттерн походки и соответствующий контроллер; в этой же работе таким звеном выступает &lt;u&gt;контроллер на основе подхода &lt;a href=&quot;https://www.mathworks.com/help/mpc/gs/what-is-mpc.html&quot; target=&quot;_blank&quot;&gt;Model Predictive Control (MPC)&lt;/a&gt;&lt;/u&gt;.&lt;/p&gt;
  &lt;p id=&quot;UqFy&quot;&gt;В &lt;a href=&quot;https://teletype.in/@awesome_dl/rl2robots&quot; target=&quot;_blank&quot;&gt;предыдущих постах&lt;/a&gt; мы уже упоминали MPC, и в целом он заслуживает отдельного поста, поскольку совмещение MPC и Deep Learning-методов тема довольно интересная. Для тех, кому прямо сейчас интересен более подробный разбор MPC — добро пожаловать &lt;a href=&quot;#i32j&quot;&gt;в дополнительный раздел после заключения &lt;/a&gt;( через идею шахмат вы легко поймете MPC).Здесь же для краткости просто скажу так: MPC оптимизирует последовательность действий агента за счет &lt;strong&gt;минимизации функции стоимости&lt;/strong&gt; (cost), либо &lt;strong&gt;максимизации функции награды&lt;/strong&gt; (последняя формулировка используется реже, хоть и понятия взаимозаменяемы, но авторы пользуется именно ей). MPC &lt;strong&gt;не требует обучения&lt;/strong&gt; — процесс оптимизации сам по себе является политикой, выдающей действия для агента. Но взамен для этой оптимизации &lt;strong&gt;требуется модель&lt;/strong&gt; агента, и, в зависимости от задачи, среды.&lt;/p&gt;
  &lt;figure id=&quot;DUJt&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/0b/6a0b63bc-c5ce-4376-b3a2-0b77af9ad5c7.png&quot; width=&quot;1047&quot; /&gt;
    &lt;figcaption&gt;Общая схема предложенного подхода и сравнение с альтернативами (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bDr6&quot;&gt;Возвращаясь к статье, авторы предлагают связывать LLM и физическую платформу с помощью функций награды для контроллера на основе MPC: &lt;strong&gt;LLM генерирует набор функций наград, их весов и параметров, которые далее использует MPC &lt;/strong&gt;(как финальная награда используется линейная комбинация из сгенерированных наград и их весов).&lt;/p&gt;
  &lt;figure id=&quot;QPIx&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5b/63/5b632b41-346e-41b2-9d72-ee875cc9d641.png&quot; width=&quot;1030&quot; /&gt;
    &lt;figcaption&gt;Структура промпта (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tS81&quot;&gt;Обращение к LLM (в данном случае — &lt;strong&gt;GPT-4&lt;/strong&gt;) состоит из двух этапов (в тексте это упоминается как использование двух LLM): &lt;em&gt;Motion Description&lt;/em&gt; и &lt;em&gt;Reward Coding.&lt;/em&gt; Вместе эту схему генерации авторы называют&lt;strong&gt; Reward Translator,&lt;/strong&gt; а MPC-контроллер — &lt;strong&gt;Motion Controller.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;hVJn&quot;&gt;&lt;strong&gt;Motion Description&lt;/strong&gt; подразумевает описание требуемого движения робота. Цель — получить от LLM высокоуровневое описание движения робота в соответствии с заданным шаблоном. Промпт имеет следующую структуру:&lt;/p&gt;
  &lt;ol id=&quot;shNF&quot;&gt;
    &lt;li id=&quot;qnYW&quot;&gt;Шаблон, по которому должныо генерироваться описание движения (motion template)&lt;/li&gt;
    &lt;li id=&quot;K3jy&quot;&gt;Разъяснения по шаблону и дополнительные правила для генерации (rules)&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;CcQk&quot;&gt;&lt;strong&gt;Reward Coder&lt;/strong&gt; принимает сгенерированное описание движения с предыдущего этапа, и генерирует необходимые функции награды и их параметры. Промпт имеет следующую структуру:&lt;/p&gt;
  &lt;ol id=&quot;MUJI&quot;&gt;
    &lt;li id=&quot;wgfi&quot;&gt;Описание доступных функций наград и их аргументов (reward API): предполагается, что у нас есть некая библиотека доступных функций наград и краткая документация к ней — за что какая функция отвечает и какие у неё есть аргументы. Задача LLM — подобрать нужные функции и значения их аргументов.&lt;/li&gt;
    &lt;li id=&quot;cvQ0&quot;&gt;Блок с примерами&lt;/li&gt;
    &lt;li id=&quot;u0NN&quot;&gt;Блок с правилами для генерации&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;dogP&quot;&gt;Как и в предыдущем случае, Reward Translator&lt;u&gt; не требует какого-либо дообучения&lt;/u&gt;. Motion Controller на основе MPC также не требует обучения, но зато требует отдельной настройки, как в общем-то любой &amp;quot;классический&amp;quot; контроллер.&lt;/p&gt;
  &lt;figure id=&quot;S8bZ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/db/0a/db0ab165-3f5e-4408-910f-7e37a4885cf8.png&quot; width=&quot;1045&quot; /&gt;
    &lt;figcaption&gt;Результаты — сраванение с упрощенной схемой промпта (Reward Coder Only) и бейзлайном из работы Code as Policies (скрип из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HJon&quot;&gt;Тесты проводились в симуляторе &lt;a href=&quot;https://mujoco.org/&quot; target=&quot;_blank&quot;&gt;MuJoCo&lt;/a&gt; на четвероногом роботе и манипуляторе, а также на реальном манипуляторе. Как показывают авторы, получилось достичь лучших результатов, чем с Code-as-Policies (об этом подходе речь пойдет далее).&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;fj1C&quot;&gt;Резюмируя, авторы предложили метод, позволяющий объединить мощь как LLM, так и MPC, причем предложенная схема является довольно универсальной. Из недостатков, и, соответственно, тем для будущих исследований, авторы отмечают сложности с &amp;quot;продвинутой&amp;quot; стилизацией движения, т.к. генерация сильно зависит от шаблонов, используемых в промптах, а также невозможность использовать изменяющиеся во времени (time-varying) награды.&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;ZaHD&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;1HNO&quot;&gt;5. Code as Policies: Language Model Programs for Embodied Control (Liang et al., 2023)&lt;/h2&gt;
  &lt;blockquote id=&quot;USeh&quot;&gt;&lt;a href=&quot;https://code-as-policies.github.io/&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&lt;/blockquote&gt;
  &lt;figure id=&quot;AX8q&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ae/ee/aeee8a46-beee-404a-8144-80f62e0defe4.png&quot; width=&quot;646&quot; /&gt;
    &lt;figcaption&gt;Общая схема предложенного подхода (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Fj8W&quot;&gt;Вообще, первая версия данной работы вышла раньше, чем &lt;a href=&quot;#Q669&quot;&gt;Language-to-Rewards, &lt;/a&gt;но по смыслу, учитывая остальные рассматриваемые работы, будет удобнее поместить её после. Авторы предлагают применять LLM для генерации программ (такие программы они называют Language Model Programs — LMP) для роботов, использующих как first-party библиотеки (т.е. &amp;quot;внутренняя&amp;quot; библиотека с функциями и классами, касающимися непосредственно управлением роботом), так и third-party библиотеки (сторонние библиотеки, такие как NumPy, Shapely, и др.). В целом, идея заставить LLM генерировать код для решения какой-либо задачи, не связанной напрямую с программированием, не нова (см., например, &lt;a href=&quot;https://viper.cs.columbia.edu/&quot; target=&quot;_blank&quot;&gt;ViperGPT&lt;/a&gt; и &lt;a href=&quot;https://arxiv.org/pdf/2302.04761.pdf&quot; target=&quot;_blank&quot;&gt;Toolformer&lt;/a&gt;). Одно из преимуществ такого подхода — код в общем-то является довольно универсальной и интерпретируемой формой, которая при этом явно предоставляет LLM информацию о возможностях целевой платформы (в частности, как мы увидим далее, за счет описания API и примеров в промптах).&lt;/p&gt;
  &lt;figure id=&quot;hZSY&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/30/51/3051b9d7-0a65-45a6-be58-f398e408d042.png&quot; width=&quot;1301&quot; /&gt;
    &lt;figcaption&gt;Примеры запросов к роботу (скрин из статьи)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;w0NK&quot;&gt;First-party библиотека состоит из двух компонентов: Perception API — функции, касающиеся детекции объектов (в частности, использовались open-vocabulary детекторы &lt;a href=&quot;https://arxiv.org/abs/2104.13921&quot; target=&quot;_blank&quot;&gt;ViLD&lt;/a&gt; и &lt;a href=&quot;https://arxiv.org/abs/2104.12763&quot; target=&quot;_blank&quot;&gt;MDETR&lt;/a&gt;) и оценки состояния робота, и Control API — функции, касающиеся управления роботом. Важно отметить, что обе эти библиотеки написаны и затюнены людьми. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;zONh&quot;&gt;Задача LLM — сгенерировать код, который объединит perception и control модули (авторы называют это perception-to-control feedback logic) необходимым для достижения описанной пользователем цели. &lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;EGd8&quot;&gt;Предлагаемый подход также подразумевает иерархическую генерацию кода, подразумевающую как простое использование API-функций, так и генерацию вспомогательных функций и их объединение в основной программе. LLM, использовавшиеся в работе — варианты &lt;a href=&quot;https://openai.com/blog/openai-codex&quot; target=&quot;_blank&quot;&gt;OpenAI Codex&lt;/a&gt; и GPT-3.&lt;/p&gt;
  &lt;p id=&quot;eznV&quot;&gt;Промпты довольно сложные. В основном состоят из подсказок (hints — по сути просто аннотации того, что делает пример) и примеров (examples). Примеры делятся на две группы: низкоуровневые (low-level) и высокоуровневые (high-level).&lt;/p&gt;
  &lt;p id=&quot;n6eq&quot;&gt;&lt;strong&gt;Низкоуровневые&lt;/strong&gt; примеры показывают LLM, как работать с third-party и first-party библиотеками. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;KGdj&quot;&gt;Из интересного — авторы говорят, что добавление постфиксов к переменным (например, &lt;em&gt;_np&lt;/em&gt; для NumPy-массивов) помогает LLM понять, с какими данными она работает в соответствующей строке, что сильно улучшает качество генерации.&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;rHTO&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/19/bf/19bf3dde-4365-40a2-afb2-9964f0a40e2e.png&quot; width=&quot;646&quot; /&gt;
    &lt;figcaption&gt;Низкоуровневый пример для third-party библиотеки. Серое — промпт, зеленое — входные инструкции для генерации, синее — результат генерации.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;AvPa&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/47/e7/47e78ecc-3e98-4ac4-bc5d-de0dc4ef851d.png&quot; width=&quot;640&quot; /&gt;
    &lt;figcaption&gt;Низкоуровневый пример для first-party библиотеки&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wxkJ&quot;&gt;Также к низкоуровневым примерам авторы относят примеры reasoning-а, например, соотношение объектов с их описаниями.&lt;/p&gt;
  &lt;p id=&quot;ru5E&quot;&gt;&lt;strong&gt;Высокоуровневые&lt;/strong&gt; примеры по большей части посвящены общей структуре кода и возможности иерархической генерации. Из важных моментов — авторы отмечают:&lt;/p&gt;
  &lt;ul id=&quot;gZtA&quot;&gt;
    &lt;li id=&quot;Buc4&quot;&gt;LLM может использовать в генерации функции, для которых был описан только интерфейс, но не реализация, что потенциально это позволяет использовать две отдельные языковые модели, одну для реализации функций, другую — для композиции финальной программы.&lt;/li&gt;
    &lt;li id=&quot;xLP5&quot;&gt;Использование возможностей иерархической генерации сильно улучшает качество генерируемого кода и перформанс робота в соответствующих задачах.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;fUK7&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0a/aa/0aaa3a5f-70ea-486b-9dfb-0b7ba8e55d9c.png&quot; width=&quot;638&quot; /&gt;
    &lt;figcaption&gt;Низкоуровневый пример для reasoning-а&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;9x5C&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/19/a7/19a73d29-dba5-4976-81d4-b481b37b4586.png&quot; width=&quot;633&quot; /&gt;
    &lt;figcaption&gt;Высокоуровневый пример для композиции LMP. Здесь предполагается, что функции, импортируемые из utils, были сгенерированы LLM.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;upYU&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c2/44/c2440e64-8759-460a-a739-7aa05093a411.png&quot; width=&quot;638&quot; /&gt;
    &lt;figcaption&gt;Промпт для генерации функции &lt;em&gt;parse_obj&lt;/em&gt; из примера выше&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ytG2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/dd/18dd19c7-f14d-4599-9534-c4e66b94aa27.png&quot; width=&quot;639&quot; /&gt;
    &lt;figcaption&gt;Пример сгенерированного кода, содержащий control flows и композицию&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;coRf&quot;&gt;Оценка качества генерации кода проводилась на кастомных бенчмарках, и сгенерированные программы-политики запускались на реальных роботах, в частности, для решения задач манипуляции и навигации. &lt;/p&gt;
  &lt;p id=&quot;bxNH&quot;&gt;Предложенный подход частично похож на подход из Language-to-Rewards. Если в последнем был фокус на генерацию скорее псевдокода из списка функций наград и их параметров, то здесь происходит генерация полноценного кода. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;j1ue&quot;&gt;Code-as-policies хорошо подходит для генерации высокоуровневого поведения робота, однако, сильно зависит от доступных Perception и Control API. Language-to-rewards же фокусируется скорее на автоматической настройке низкоуровневых контроллеров. В целом, кажется, что эти два подхода могут в будущем дополнить друг друга, позволив одновременно произвести тонкую настройку необходимых скиллов и объединить их в сложное высокоуровневое поведение.&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;LQl7&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Piyg&quot;&gt;&lt;strong&gt;6. Заключение&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;0fth&quot;&gt;В данном разборе мы увидели, как можно построить &amp;quot;мост&amp;quot; между LLM и реальным железом. Предложенные подходы имеют разную степень универсальности, но одно из их главных общих преимуществ — возможность сократить потребность в обучении агента. Представленные результаты также говорят о том, что LLM способны производить некий reasoning относительно представлений о движении роботов. В будущем, как отмечают многие авторы, одним из главных направлений исследований в этой области станет применение мультимодальных моделей, которые позволят расширить промпты за пределы текстовой модальности.&lt;/p&gt;
  &lt;p id=&quot;ZBG2&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;XeUR&quot;&gt;&lt;strong&gt;Автор: @TimeEscaper&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;i32j&quot;&gt;7 Supplementary: подробнее про MPC&lt;/h2&gt;
  &lt;figure id=&quot;lLmt&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/79/c3/79c35365-7405-4241-8756-1144278111b9.png&quot; width=&quot;632&quot; /&gt;
    &lt;figcaption&gt;Постановка задачи MPC&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;N8Rc&quot;&gt;Дисклеймер: здесь будет много аналогий с RL-ем, поскольку в общем-то MPC и RL имеют общие корни, и некоторые относят MPC к model-based RL, но я все же считаю, что это достаточно сильно разные подходы.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;SiJC&quot;&gt;Для начала, приведем небольшую аналогию. Представьте, что вы играете в шахматы. Чаще всего, вы планируете свои действия &lt;em&gt;на несколько ходов вперед&lt;/em&gt;, на основе некоторых представлений — то есть &lt;em&gt;модели&lt;/em&gt; — действий противника. Имея в голове план на несколько ходов вперед, вы, в соответствии с правилами игры, делаете лишь один ход. Далее, в зависимости от хода противника, вы либо придерживаетесь своего текущего плана, либо составляете новый план, если видите, что действия противника сильно отклоняются от ваших ожиданий. MPC работает по схожей схеме: его задача состоит в создании &lt;strong&gt;плана на &lt;em&gt;H&lt;/em&gt; шагов вперед&lt;/strong&gt; (либо &lt;em&gt;H&lt;/em&gt; секунд, если мы работаем с непрерывной задачей) в соответствии с &lt;strong&gt;заранее известной моделью процессов&lt;/strong&gt;. Обычно величину &lt;em&gt;H&lt;/em&gt; называют &lt;strong&gt;горизонтом&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;aOxF&quot;&gt;На изображении выше представлена базовая математическая формулировка задачи MPC (в дискретном и детерминированном случае; непрерывные и стохастические варианты MPC тоже существуют). Здесь векторы &lt;strong&gt;состояний&lt;/strong&gt; (states) и &lt;strong&gt;управлений&lt;/strong&gt; (controls) имеют те же значения, что и состояния и действия (actions) в RL-е — разница в названиях сложилась исторически. Состояние может включать в себя как непосредственно состояние агента, так и состояние среды, управления же обычно относятся только к агенту. &lt;strong&gt;Модель&lt;/strong&gt; представляет собой математическое выражение того, как изменяется состояние агента (и, возможно, среды) в зависимости от приложенного управления. Эта модель может иметь вид как, например, простейших кинематических формул из школьного курса физики, так и сложную систему дифференциальных уравнений. Модель — это тот компонент, который считается неизвестным в model-free RL.&lt;/p&gt;
  &lt;p id=&quot;ZQMR&quot;&gt;Следующий важный компонент — это &lt;strong&gt;функция стоимости (cost)&lt;/strong&gt;. Стоимость в MPC играет ту же роль, что и награда (reward) в RL — инкапсулируют нашу задачу. Функцию награды на два компонента: &lt;em&gt;стоимость на этапе (stage cost)&lt;/em&gt;, т.е. стоимость на каждом шаге горизонта, и &lt;em&gt;финальную стоимость (final cost)&lt;/em&gt; т.е. стоимость в конечном состоянии горизонта, как показано на изображении выше, но это уже детали реализации.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;QJD0&quot;&gt;Простой пример функции стоимости: расстояние от текущего положения робота до целевой точки в задаче навигации мобильного робота. На практике, правда, добавляются дополнительные члены, связанные с особенностями управления роботом, но об этих деталях мы, возможно, поговорим в отдельном посте.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;8iUp&quot;&gt;Важно отметить, как именно происходит минимизация стоимости. Поскольку у нас в явном виде известны и функция стоимости, и наша модель, то у нас в общем-то есть вполне определенная &lt;strong&gt;задача оптимизации&lt;/strong&gt;, и, соответственно, мы можем воспользоваться аппаратом &lt;em&gt;методов оптимизации&lt;/em&gt;. Оптимизация в MPC — отдельная большая тема, поэтому пока что лишь кратко упомяну, что здесь довольно популярны алгоритмы &lt;a href=&quot;https://en.wikipedia.org/wiki/Convex_optimization&quot; target=&quot;_blank&quot;&gt;выпуклой оптимизации&lt;/a&gt; и &lt;a href=&quot;https://en.wikipedia.org/wiki/Nonlinear_programming&quot; target=&quot;_blank&quot;&gt;нелинейного программирования&lt;/a&gt;. Существуют также и альтернативные методы решения данной задачи, например, за счет &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_dynamic_programming&quot; target=&quot;_blank&quot;&gt;динамического программирования&lt;/a&gt; или &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-entropy_method&quot; target=&quot;_blank&quot;&gt;сэмплирования&lt;/a&gt;, но об этом, возможно, тоже в отдельном посте. Пока что важно усвоить отличие от RL-я: &lt;strong&gt;здесь мы не используем никакого обучения&lt;/strong&gt;, а &lt;em&gt;напрямую&lt;/em&gt; решаем нашу задачу минимизации стоимости в соответствии с используемой моделью.&lt;/p&gt;
  &lt;p id=&quot;NbjZ&quot;&gt;Последний важный компонент в MPC — это &lt;strong&gt;ограничения&lt;/strong&gt; (constraints). Использование методов оптимизации, многие из которых подразумевают решение задачи оптимизации с ограничениями, позволяет нам в явном виде учитывать ограничения системы, с которой мы работаем — это одна из главных причин, по которой MPC стал популярен в индустрии. В простейшем виде ограничения могут иметь вид, например, отрезков, в которых могут находится компоненты вектора управлений (конкретный пример — ограничения на управляющий сигнал скорости робота). Ограничения можно наложить и на состояния агента — возвращаясь к примеру с навигацией мобильного робота, мы можем наложить ограничения на положение робота для избежания столкновений с объектами на карте.&lt;/p&gt;
  &lt;p id=&quot;6NwB&quot;&gt;Выше мы упоминали, что на выходе MPC выдает план — этот план имеет вид последовательности управлений на &lt;em&gt;H&lt;/em&gt; шагов вперед. На практике, из этой последовательности применяется &lt;strong&gt;только первое управление&lt;/strong&gt;, после чего вновь начинается процесс планирования (вспоминаем пример с шахматами выше). Такая схема позволяет, с одной стороны, выработать управление, которое будет оптимально в контексте будущего, и, с другой стороны, быть более устойчивым к внезапным изменениям во внешней среде.&lt;/p&gt;

</content></entry><entry><id>awesome_dl:rl2robots</id><link rel="alternate" type="text/html" href="https://teletype.in/@awesome_dl/rl2robots?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=awesome_dl"></link><title>Reinforcement Learning для управления четвероногими роботами</title><published>2023-08-13T09:50:41.667Z</published><updated>2023-08-13T10:02:56.738Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/d4/66/d466e90e-5add-47fd-9e72-ab12b9bf11a3.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/e3/b9/e3b908e6-9fc2-461c-93c3-5fb07df7c7ea.png&quot;&gt;TLDR: Обзор трех работ от одной из ведущих лабораторий ETH Zürich, посвященных управлению четвероногими роботами с помощью RL-я.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;gi56&quot;&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; Обзор трех работ от одной из ведущих лабораторий ETH Zürich, посвященных управлению четвероногими роботами с помощью RL-я.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;vvvy&quot;&gt;Всем привет! В этом посте перейдем непосредственно к более детальному рассмотрению применения ML в роботехнике, а именно - рассмотрим, как RL помогает управлять робо-собаками (они же legged robots, они же quadruped robots), разобрав 3 статьи от авторов из ETH Zürich. Я выбрал их, т.к. они сами по себе довольно влиятельные, а также хорошо демонстрируют ряд приемов, помогающих RL-ю работать в реальном мире.&lt;/p&gt;
  &lt;p id=&quot;mm0B&quot;&gt;Ко всем разобранным статьям настоятельно рекомендую смотреть видео-презентации, чтобы так сказать сфьюзить информацию из данного разбора и информацию от самих авторов работ, и в целом понять, о каких проблемах идет речь.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;iHNV&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;vIJI&quot;&gt;1. Зачем нам вообще здесь RL?&lt;/h3&gt;
  &lt;p id=&quot;bl8u&quot;&gt;Как мы обсуждали в &lt;a href=&quot;https://t.me/awesome_dl/35&quot; target=&quot;_blank&quot;&gt;вводном посте&lt;/a&gt;, для управления движением роботов используются аппарат теории управления, а также теории оптимального управления. Для управления четвероногими роботами существуют довольно сильные &amp;quot;классические&amp;quot; бейзлайны, в частности, на основе &lt;a href=&quot;https://en.wikipedia.org/wiki/Model_predictive_control&quot; target=&quot;_blank&quot;&gt;Model Predictive Control &lt;/a&gt;(MPC, более детально этот метод, я думаю, мы рассмотрим в следующих постах). Главный недостаток подобных методов - это их &lt;strong&gt;сложность&lt;/strong&gt;. Математические модели для данного типа роботов очень сложные (в отличие, например, от большинства колесных роботов), особенно, если попробовать учесть изменяющиеся параметры внешней среды; для этих моделей сложно определять параметры. Поэтому одна из основных областей робототехники, где был популяризирован RL - это именно четвероногие роботы.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;SG1o&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;LeA1&quot;&gt;2. Learning agile and dynamic motor skills for legged robots (Hwangbo et al., 2019)&lt;/h3&gt;
  &lt;blockquote id=&quot;Xn4Y&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/1901.08652.pdf&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&lt;/blockquote&gt;
  &lt;figure id=&quot;AIIn&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/aTDkYFZFWug?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vEpX&quot;&gt;В первой работе, которую мы рассмотрим, авторы решают 3 типа задач с помощью RL: &lt;/p&gt;
  &lt;ul id=&quot;eyKd&quot;&gt;
    &lt;li id=&quot;UTnb&quot;&gt;Command-conditioned locomotion (движение в соответствии командам с пульта);&lt;/li&gt;
    &lt;li id=&quot;d9rm&quot;&gt;High-speed locomotion (&amp;quot;бег галопом&amp;quot; — движение, обычно, вдоль прямой на высокой скорости);&lt;/li&gt;
    &lt;li id=&quot;NDOY&quot;&gt;Recovery from a fall (учили робота &lt;s&gt;вставать с колен&lt;/s&gt; подниматься из &amp;quot;лежачего&amp;quot; или &amp;quot;полулежачего&amp;quot; положения).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7pBp&quot;&gt;Во всех задачах использовался алгоритм  &lt;a href=&quot;https://openai.com/research/openai-baselines-ppo&quot; target=&quot;_blank&quot;&gt;Proximal Policy Optimization &lt;/a&gt;(PPO) — популярный RL-алгоритм, возможно, известный многим по RLHF. Все сети внутри PPO (если совсем упрощенно, то это сети &lt;em&gt;актора — &lt;/em&gt;отвечает за выходные действия агента, и &lt;em&gt;критика — &lt;/em&gt;отвечает за оценку состояния; именно первую сеть мы далее будем называть &lt;em&gt;политикой&lt;/em&gt;) имеют вид простых MLP. &lt;/p&gt;
  &lt;p id=&quot;RqlE&quot;&gt;Наблюдения включали в себя историю положений и скоростей &amp;quot;тела&amp;quot; робота (имеется в виду основной корпус, к которому крепятся ноги), состояния суставов и ряд вспомогательных компонентов в зависимости от задачи (см. картинку ниже).&lt;/p&gt;
  &lt;figure id=&quot;nTLD&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2c/41/2c411b45-f4eb-47f7-ba59-5d8b2bd44abe.png&quot; width=&quot;519&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wHfq&quot;&gt;Команда представляет собой  вектор, состоящий из:&lt;/p&gt;
  &lt;ul id=&quot;DoYp&quot;&gt;
    &lt;li id=&quot;HJfz&quot;&gt;&lt;strong&gt;Поступательную скорость&lt;/strong&gt; (forward velocity, м/c) - компонент скорости, направленный вдоль тела робота;&lt;/li&gt;
    &lt;li id=&quot;YGtH&quot;&gt;&lt;strong&gt;Боковую скорость&lt;/strong&gt; (lateral velocity, м/c) — компонент скорости, направленный перпендикулярно телу;&lt;/li&gt;
    &lt;li id=&quot;bwJZ&quot;&gt;&lt;strong&gt;Скорость поворота&lt;/strong&gt; (turning rate, рад/c) — по сути, угловая скорость тела робота. &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4a9w&quot;&gt;Так, команда [1., 1., 0.] заставит робота пройтись по диагонали без поворота корпуса, а команда [1., 0., 0.5] — завернуть направо (или налево, в зависимости от ориентации координат). В реальном мире эти скорости задаются с помощью пульта управления, а во время обучения в симуляторе — сэмплируются из равномерного распределения с началом каждого нового эпизода. &lt;/p&gt;
  &lt;p id=&quot;ZHnG&quot;&gt;Функция награды представляет собой взвешенную сумму довольно большого количества компонентов (специально ограничиваюсь смысловым описанием, для тех, кому знакомы основы теоретической механики и хочет разобраться подробнее — добро пожаловать в supplementary materials статьи):&lt;/p&gt;
  &lt;ul id=&quot;Grs4&quot;&gt;
    &lt;li id=&quot;z6PE&quot;&gt;&lt;em&gt;Ошибка по линейным и угловым скоростям&lt;/em&gt;: очевидно, что reward должен поощрять соответствие актуальных скоростей тела входной команде&lt;/li&gt;
    &lt;li id=&quot;GfFm&quot;&gt;&lt;em&gt;Штрафы на моменты на выходе приводов и скорости суставов&lt;/em&gt;: это своего рода регуляризация, ограничивающая величины соответствующих моментов и скоростей. Идея в следующем: мы хотим достигать скорости не за счет использования больших мощностей в лоб, а за счет более &amp;quot;умного&amp;quot; переставления ног — эти штрафы как раз &amp;quot;вдохновляют&amp;quot; агента искать эти более умные схемы.&lt;/li&gt;
    &lt;li id=&quot;pAKh&quot;&gt;&lt;em&gt;Штрафы на положения и скорости ступней&lt;/em&gt;: мы хотим избежать проскальзывания ступней, а также их высокого отрыва от земли&lt;/li&gt;
    &lt;li id=&quot;4dHN&quot;&gt;&lt;em&gt;Штраф на ориентацию тела робота&lt;/em&gt;: для большей устойчивости, мы хотим, чтобы тело робота всегда находилось как можно более параллельно земле&lt;/li&gt;
    &lt;li id=&quot;E6lu&quot;&gt;&lt;em&gt;Штраф за резкое изменение моментов на выходе приводов&lt;/em&gt;: мы хотим достичь более гладкого движения робота, поэтому штрафуем большие разности моментов между двумя последовательными шагами в эпизоде&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;g5jo&quot;&gt;Из интересного стоить отметить сильное влияние discount factor-а в PPO, которое отмечают авторы.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;lBzy&quot;&gt;Самые интересные детали статьи касаются приемов, которые применялись, чтобы вся эта RL-ная история заработала в реальном мире.&lt;/p&gt;
  &lt;figure id=&quot;6JTX&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/42/98/42984ab9-8d30-4ad5-8eb7-1917ed66316a.png&quot; width=&quot;985&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;o4WN&quot;&gt;&lt;strong&gt;Первое - это использование самописного симулятора RaiSim&lt;/strong&gt; (сейчас он является отдельным &lt;a href=&quot;https://raisim.com/&quot; target=&quot;_blank&quot;&gt;проектом&lt;/a&gt; этой лаборатории), который, как утверждают авторы, очень точно моделирует динамику твердого тела, и при этом эффективен с точки зрения вычислений, что также позволяет ускорить обучение.&lt;/p&gt;
  &lt;p id=&quot;dmaS&quot;&gt;&lt;strong&gt;Второе - это предложенный способ моделирования приводов (actuators) робота&lt;/strong&gt;. Как упоминают авторы, задача моделирования приводов, в частности, гидравлических и электрических, которые очень часто применяются в лучших робо-собаках, очень сложна, в связи с чем достичь реалистичной симуляции становится намного сложнее. Авторы предложили следующий интересный подход: они собрали датасет с входными и выходными (т.е. моментами) сигналами на реальных приводах, и обучили соответствующую нейросеть. В итоге они получили нейросетевую модель приводов, которая далее была использована в симуляторе, что позволило сделать симуляцию более реалистичной.&lt;/p&gt;
  &lt;p id=&quot;YZ48&quot;&gt;&lt;strong&gt;Третье - применение техники &lt;a href=&quot;https://lilianweng.github.io/posts/2019-05-05-domain-randomization/&quot; target=&quot;_blank&quot;&gt;Domain Randomization&lt;/a&gt;. &lt;/strong&gt;Как показывает практика, это один из самых эффективных методов решения проблемы sim-to-real transfer и повышения robustness RL-политики (в какой-то степени, его можно сравнить с теми же аугментациями из supervised learning). Идея довольно проста: в ходе обучения в симуляторе рандомизируются разные параметры симуляционной модели, в нашем случае, например, параметры массы робота, трения, начальных положений робота и др.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;eK7E&quot;&gt;Главное результаты, которых удалось достичь с помощью всех предложенных подходов:&lt;/p&gt;
    &lt;ul id=&quot;sxnu&quot;&gt;
      &lt;li id=&quot;s75O&quot;&gt;Упрощенный деплой на реального робота&lt;/li&gt;
      &lt;li id=&quot;iX3R&quot;&gt;Увеличение робастности управления роботом&lt;/li&gt;
      &lt;li id=&quot;MOX2&quot;&gt;Сокращение потребляемых вычислительных ресурсов (все-таки теперь почти вся система управления — это один перцептрон)&lt;/li&gt;
      &lt;li id=&quot;pXZQ&quot;&gt;Повышение энергоэффективности — в первую очередь как раз за приложение меньших моментов для достижения тех же скоростей&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;bqcI&quot;&gt;3. Learning quadrupedal locomotion over challenging terrain (Lee et al., 2020)&lt;/h3&gt;
  &lt;blockquote id=&quot;AkIE&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2010.11251&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;U6G5&quot;&gt;Эта статья развивает идеи предыдущей работы. Если в предыдущей работе рассматривалось управление роботом только на ровных поверхностях в indoor-средах, то в этой работе авторы поставили цель выйти &amp;quot;на природу&amp;quot;, причем довольно экстремальную. То есть, цель работы - расширить предложенный RL-подход на &amp;quot;неровные&amp;quot; ourtdoor-среды. &lt;/p&gt;
  &lt;figure id=&quot;5OAS&quot; class=&quot;m_custom&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/9j2a1oAHDL8?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;BPzB&quot;&gt;Поскольку работа в своей основе переиспользует ряд техник из предыдущей работы (симулятор, domain randomization и нейронную модель приводов), то сразу перейдем к рассмотрению новых приемов, которые позволили достичь впечатляющих результатов в реальном мире.&lt;/p&gt;
  &lt;figure id=&quot;ic9w&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/28/ec/28ecbcc8-64ea-41ac-837b-fb905d704624.png&quot; width=&quot;991&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fHG5&quot;&gt;&lt;strong&gt;Первое - это применение техники на основе подхода &lt;a href=&quot;https://arxiv.org/abs/1912.12294&quot; target=&quot;_blank&quot;&gt;Learning by Cheating&lt;/a&gt;. &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;gwP2&quot;&gt;Суть состоит в следующем: есть две политики - политика-учитель (teacher policy) и политика-студент (student policy). Политика-учитель обучается с помощью RL-я, и её пространство наблюдений состоит из двух компонентов. Первый включает непосредственно те наблюдения, которые будут использоваться на реальном роботе. Авторы называют их &lt;strong&gt;проприоцептивными (proprioceptive)&lt;/strong&gt; наблюдениями, что, говоря простым языком, означает наличие информации только о состоянии робота (в частности, положение тела робота и положения суставов) и отсутствие явных наблюдений о внешнем мире (таких как изображения с камер или данные о контактах ног с поверхностью). Соответственно, политика, которая использует только проприоцептивные наблюдения, называется &lt;strong&gt;проприоцептивной политикой&lt;/strong&gt;. Второй компонент авторы называют &lt;strong&gt;привилегированной информацией (privileged information)&lt;/strong&gt; - это некая ground truth-информация, которую практически невозможно извлечь в реальном мире, но легко извлечь в симуляторе (в частности, она включала в себя информацию о контактах ног робота с поверхностью, профиль поверхности, параметры трения и др.). Привилегированная информация позволяет значительно упростить процесс обучения, и достичь очень хорошего перформанса в симуляторе.&lt;/p&gt;
  &lt;p id=&quot;08Ka&quot;&gt;А далее происходит основной трюк: модель-учитель, которая &lt;u&gt;обучена с добавление привилегированной информации&lt;/u&gt;, дистиллируется на модель-студента, которая использует &lt;strong&gt;только проприоцептивных наблюдений. &lt;/strong&gt;То есть модель студент учится выдавать такие же действия, которые выдала бы политика-учитель на основе тех же проприоцептивных наблюдений и привилегированной информации.&lt;/p&gt;
  &lt;p id=&quot;fPFr&quot;&gt;&lt;strong&gt;Второй прием - это domain randomization и  &lt;a href=&quot;https://arxiv.org/abs/2003.04960&quot; target=&quot;_blank&quot;&gt;curriculum learning&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;Идея curriculum learning в контексте RL, а точнее, как указывают авторы, automatic curriculum learning, заключается в постепенном усложнении среды по мере улучшения перформанса агента. Также наоборот, среду можно упрощать, если вдруг перформанс агента начинает проседать.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;0ttl&quot;&gt;Если модель легко решает задачи мы их усложняем и наоборот.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;y3Zq&quot;&gt;Здесь авторы рандомизируют форму поверхности, используя три паттерна: &amp;quot;впадинки&amp;quot; (steps), лесенки (stairs) и холмики (hills). Для оценки перформанса агента нужна какая-то эвристика, и зачастую ей выступает какая-то статистика наград. Но награды зачастую тяжело интерпретировать, чтобы построить правила и параметры для curriculum-а. Поэтому, авторы предлагают использовать намного более интерпретируемую оценку - проходимость поверхности текущей политикой робота, из которой далее выводятся параметры для сэмплирования поверхностей.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;LyZN&quot;&gt;Результаты из видео-презентации, в общем-то, говорят сами за себя. Один из главных показателей, которых удалось достичь - это адаптация политики на реальном роботе к ситуациям, которые в явном виде не были моделированы в ходе обучения, например, застревание ног робота в земле или растительности.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;kFy5&quot;&gt;4. Learning robust perceptive locomotion for quadrupedal robots in the wild (Miki et al., 2022)&lt;/h3&gt;
  &lt;blockquote id=&quot;15Hq&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2201.08117&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&lt;/blockquote&gt;
  &lt;figure id=&quot;zTHL&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/zXbb6KQ0xV8?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;o0lK&quot;&gt;Наконец, третья статья из 2022 года завершит логическую цепочку в данном обзоре. Настоятельно рекомендую к просмотру видео-презентацию!&lt;/p&gt;
  &lt;p id=&quot;5UfQ&quot;&gt;Как было упомянуто выше, предыдущая работа была посвящена проприоцептивной политике. Главный её недостаток — это определение ситуаций, мешающих движению, пост-фактум. Пример из предыдущей видео-презентации — нога робота сталкивается со ступенькой, только после этого политика понимает, что перед роботом — препятствие, которое нужно пройти. Наличие наблюдений о внешнем мире позволило бы заранее выработать нужную походку для обхождения препятствия. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;lY8M&quot;&gt;Так, авторы ставят цель соединить проприоцептивную информацию и &lt;strong&gt;экстероцептивные (exteroceptive) информацию&lt;/strong&gt; - информацию о внешнем мире, получаемую, в первую очередь, с помощью сенсоров вроде &lt;a href=&quot;https://velodynelidar.com/what-is-lidar/&quot; target=&quot;_blank&quot;&gt;LiDAR-ов&lt;/a&gt; и &lt;a href=&quot;https://www.e-consystems.com/blog/camera/technology/what-is-a-stereo-vision-camera-2/&quot; target=&quot;_blank&quot;&gt;стерео-камер&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;tqyl&quot;&gt;Экстероцептивные информация имеет следующий вид. С помощью LiDAR-а и/или стереокамеры выполняется построения локальной карты высот (elevation map) - эта карта показывает уровень &amp;quot;возвышенностей&amp;quot; на поверхности вокруг робота. Из этой карты сэмплируется множество точек в окрестностях ног робота - это множество относительных высот и является используемой далее информацией о мире (назовем это экстероцептивным наблюдением).&lt;/p&gt;
  &lt;figure id=&quot;jbZl&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b1/89/b189ea40-0c88-44d7-b31a-f3e5a63a1ffc.png&quot; width=&quot;514&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CxPF&quot;&gt;Схема обучения также основана на предыдущих статьях - применяется и learning by cheating, и другие приемы. Однако, структуры и политики-учителя, и политики-студента, модифицированы:&lt;/p&gt;
  &lt;ul id=&quot;lGEz&quot;&gt;
    &lt;li id=&quot;Wjcm&quot;&gt;Политика-учитель, помимо проприоцептивного наблюдения и ground truth-привилегированной информации, также получает GT-экстероцептивное наблюдение, и так же обучается с помощью PPO по схеме с curriculum.&lt;/li&gt;
    &lt;li id=&quot;KI4d&quot;&gt;Политика-студент получает проприоцептивное наблюдение и &lt;strong&gt;зашумленное &lt;/strong&gt;экстероцептивное наблюдение. Теперь студент не пытается &amp;quot;вслепую&amp;quot; повторять за учителем, а пытается сначала &lt;strong&gt;оценить&lt;/strong&gt; привилегированную информацию на основе экстероцептивных наблюдений, и далее использовать эту оценку —точнее, её латент, который авторы называют &lt;strong&gt;belief state&lt;/strong&gt; — для повторения за учителем.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;cfxR&quot;&gt;За эту оценку отвечает автоэнкодер-подобная структура из блоков belief encoder (используется при обучении и деплое) и belief decoder (используется только при обучении). Декодер обучается восстанавливать привилегированную информацию и исходное экстероцептивное наблюдение с помощью &lt;u&gt;reconstruction loss&lt;/u&gt; — расстоянием между GT и восстановленными данными. Цель всей этой схемы — связать belief state с недоступными GT-экстероцептивным наблюдением и привилигерованной информацией. Второй лосс - &lt;u&gt;behaviour loss&lt;/u&gt; - отвечает за соответствие выходных действий политике-учителю, как в предыдущей работе.&lt;/p&gt;
  &lt;figure id=&quot;IrgS&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/e1/eee1b489-d4c8-4f44-8a8f-13d00a573f5c.png&quot; width=&quot;1007&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7xjo&quot;&gt;Важно отметить роль attention-а в belief encoder: сколько использовать информации из экстероцептивного наблюдения. Проблема в том, что построенная карта высот может не всегда быть надежной — из-за шума или от природы самой поверхности. Авторы приводят интересный пример со снегом: на карте он выглядит как возвышенность, но по факту, наступив на него, робот проваливается. В этом случае за счет attention-а и рекуррентной структуры энкодер поймет, что экстероцептивному наблюдению нельзя сильно доверять, и будет использовать больше проприоцептивной информации.&lt;/p&gt;
  &lt;figure id=&quot;3AsB&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/45/7f/457ff109-6c7d-43ae-8d95-f8a5d3035f8f.png&quot; width=&quot;868&quot; /&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;xQFA&quot;&gt;Резюмируя, авторы предложили очень интересную схему, которая, с одной стороны, позволяет эффективно использовать экстероцептивные наблюдения, когда они надежны, что значительно улучшает качество походки, и, с другой стороны, позволяет автоматически переключиться на практически только проприоцептивные наблюдения, что значительно увеличивает робастность политики в &amp;quot;краевых&amp;quot; случаях.&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;RVLc&quot;&gt;5. Заключение&lt;/h3&gt;
  &lt;p id=&quot;zpo3&quot;&gt;На примере данных работ я хотел показать, какие техники позволяют запускать RL в сложных задачах управления на реальных роботах, а также эффективно использовать информацию от различных сенсоров. От этой и других рисерч групп в ETH есть много других статей на тему ML-я для четвероногих роботов (так, они уже вовсю рассматривают возможность &lt;a href=&quot;https://www.youtube.com/watch?v=20gS20EFDe8&quot; target=&quot;_blank&quot;&gt;использования подобных роботов на Марсе&lt;/a&gt;), а также развивают и &lt;a href=&quot;https://www.youtube.com/watch?v=m3rJWJVzYuY&quot; target=&quot;_blank&quot;&gt;более классические бейзлайны&lt;/a&gt;. Вообще, эта тема довольно популярная, и у других лабораторий тоже есть прикольные результаты (например, работа &lt;a href=&quot;https://arxiv.org/abs/2107.04034&quot; target=&quot;_blank&quot;&gt;RMA: Rapid Motor Adaptation for Legged Robots&lt;/a&gt; от ребят из Berkley и CMU). &lt;/p&gt;
  &lt;p id=&quot;dTOM&quot;&gt;Также стоит учесть, что ETH фокусируется на роботах семейства ANYmal - одних из самых продвинутых и крупных в своем роде. Однако, многие из описанных выше методов применялись и для более простых роботов.&lt;/p&gt;
  &lt;p id=&quot;MtBE&quot;&gt;Stay tuned!&lt;/p&gt;
  &lt;p id=&quot;ZYFY&quot;&gt;&lt;strong&gt;Автор: @TimeEscaper&lt;/strong&gt;&lt;/p&gt;

</content></entry></feed>