ACT: action chunking
Политика, которая решает заново на каждом шаге, на 50 Гц принимает 50 решений в секунду. Она дрожит, копит ошибки и застревает там, где оператор останавливался подумать. ACT, политика двуручного робота ALOHA, отвечает на это пачками: по одному кадру предсказывает сразу сто действий и исполняет их подряд. Разберём, почему пачка помогает, сколько действий в неё брать, чем за неё платят — поздней реакцией и рывками на стыках — и как стыки склеивают большие модели. Урок завершает основную линию части 1.
Дешёвые руки и 50 демонстраций
Чтобы учить робота по демонстрациям, нужны руки, на которых человеку удобно показывать двуручную работу, и данные, которых хватит для обучения. Точные двуручные системы дороги, а на дешёвых трудно делать тонкую работу.
В 2023 году Тони Чжао, Викаш Кумар, Сергей Левин и Челси Финн собрали систему телеоперации из недорогих рук. Оператор двигает две маленькие ведущие руки WidowX, а две большие ведомые руки ViperX повторяют их углы сустав в сустав, поэтому обратная кинематика не нужна. Неспециалист собирает систему меньше чем за 2 часа. На рисунке в статье цена — «<$20k»: базовый комплект стоит $18k, с опциями вроде камер — $20k; ведомая рука ViperX — около $5600, ведущая WidowX — $3300. Четыре камеры Logitech C922x смотрят сверху, спереди и с двух запястий и снимают 480×640 при 30 кадрах в секунду, а телеоперация и запись идут на 50 Гц. Частота важна: при 5 Гц операторы тратят на задачу на 62% больше времени.
Железо неточное: ViperX ошибается на 5–8 мм, полезная нагрузка — 750 г. Если просто повторять записанные углы, такой ошибки хватает, чтобы промахнуться мимо мелкой детали.
Недостающую точность авторы добирают обучением: политика ACT (Action Chunking with Transformers) смотрит в четыре камеры и поправляет движение по кадрам. Её обучали отдельно для каждой задачи на 50 демонстрациях, это 10–20 минут данных, и проверяли каждую задачу 25 раз.
Успех ACT на реальных задачах
Для Thread Velcro записали 100 демонстраций. Лучший из базовых методов, BeT, получил 0%.
Видео авторов
Видео загружается с сайта авторов, когда нажмёшь на обложку. Ролики с реакцией ACT на помехи — на странице проекта.
На дешёвых руках ACT справлялась с тонкими задачами в 64–96% попыток, кроме Thread Velcro, где успех — 20%. Главным приёмом авторы называют пачку действий. Чем плоха обычная политика, которая выдаёт одно действие на кадр?
Пятьдесят решений в секунду
Чем плоха обычная политика? Она выдаёт одно действие на каждый кадр. На 50 Гц это 50 решений в секунду и 500 за десять секунд, и каждое решение немного ошибается.
Ошибка уводит руку туда, где демонстраций меньше, а там следующее решение ошибается сильнее. Ошибки складываются: в уроке 1.1 их рост оценивали как , то есть с квадратом длины эпизода.
DAgger из урока 1.2 добавлял примеры туда, куда съезжает политика. Для этого нужен эксперт, который размечает каждое новое состояние, а у ALOHA есть только 50 записанных демонстраций.
Другой выход — решать реже: по одному кадру предсказать пачку из действий и исполнить её целиком. Решений станет в раз меньше, но между решениями рука едет вслепую. Проверим на 200 эпизодах простой модели, когда это выигрыш. В модели отклонение кружки от пути за каждый шаг умножается на — это устойчивость системы без управления. При рука сама возвращается к цели, как позиционный регулятор. При отклонение растёт само, как у робота, который балансирует.
По горизонтали — отклонение кружки от пути в конце эпизода, см. Высота столбика — сколько прогонов из 200 закончились с таким отклонением. Стрелки по краям — прогоны, которые ушли дальше графика.
Под капотом: модель и что говорит теория
Здесь — отклонение кружки от пути в сантиметрах, — стандартный шум. Эпизод — 200 шагов по 20 мс, то есть 4 с; прогонов 200, у каждого своё фиксированное зерно, поэтому картинка повторяется в точности. см — ошибка на каждом решении. — ошибка, которая растёт с отклонением: вдали от данных политика ошибается сильнее. — поправка, которую политика выучила у эксперта: на неустойчивой системе эксперт всё время гасит рост отклонения, и в данных это есть. Последнее решение у любой политики приходится на последний шаг, поэтому сравнение честное. Разброс — стандартное отклонение конечного .
Теория. Simchowitz, Pfrommer и Jadbabaie (COLT 2025) показали, что гладкая детерминированная марковская политика при исполнении ошибается экспоненциально по горизонту сильнее, чем на данных, даже при устойчивой динамике. Обойти это помогают немарковские, негладкие и стохастические политики, и авторы прямо называют пачки действий и диффузию. Zhang и соавторы (ICLR 2026) доказали: при достаточно длинной пачке накопление ошибки ограничено, если система устойчива без обратной связи. Механизм — устойчивость в смысле теории управления. Для неустойчивых систем нужен шум при сборе демонстраций, чтобы в данных были поправки.
Спор не закончен. В препринте Lazzati и соавторов (август 2026) сокращение горизонта успех не объясняет: работают немарковская выразительность и «неявное ансамблирование». Zeng и соавторы из группы Тедрейка (август 2026) считают главным немарковость демонстраций, а при длинном контексте лучше всего у них работают замкнутые политики.
Пачка сужает разброс, если система сама гасит отклонения, и вредит, если раскачивает их. Но у пошаговой политики есть вторая беда, которой в этой модели нет: она застревает там, где оператор останавливался подумать. Справится ли с этим пачка и сколько действий в неё брать?
Плавность против реактивности
Справится ли пачка с паузами? Оператор ведёт руку неравномерно: посередине пути он останавливается подумать, и пошаговая политика в этом месте застревает.
В точке паузы на каждую демонстрацию приходится много кадров «стоять» и один кадр «ехать». Политика видит только текущий кадр и не знает, сколько уже стоит, поэтому снова и снова выбирает «стоять».
Больше демонстраций не поможет: оператор останавливается в каждой, и кадров «стоять» станет столько же больше.
Пачка несёт продолжение движения: в ней есть и пауза, и то, что оператор сделал после неё. Захват Ады ведёт кружку по столу к полке, вид сверху. Политика обучена на десяти демонстрациях и в похожем положении берёт медиану того, что делал оператор, — так ведёт себя сеть, обученная с L1. Сравним на одной сцене пачки из 1, 10 и 100 действий, толкнём кружку посреди пачки и подберём длину.
Ада — домашний гуманоидный робот, на котором построены лабораторные работы курса. Подробнее о ней — в уроке 0.1.
Под капотом: как устроена лаборатория
- Демонстрации. 10 проездов на 0,8 м со скоростью около 0,25 м/с, запись на 50 Гц. Оператор останавливается у отметки 34 см. Короткие паузы — от 12 до 19 шагов, в среднем 0,31 с; длинные — от 22 до 35 шагов, в среднем 0,58 с.
- Политика. По положению кружки берём кадры демонстраций рядом, с гауссовыми весами ( мм). Для каждого шага пачки — взвешенная медиана положений, в которых эти кадры оказались через j шагов. Это абсолютные целевые положения, как в ACT. К пачке добавляется сдвиг около 3 мм в случайную сторону, вдали от данных он растёт: в 3 см от них — вдвое. Захват догоняет цель с запаздыванием: за шаг проходит 80% расстояния.
- Почему застревает . В точке паузы в данных десять раз по 12–19 кадров «стоять» и по одному кадру «ехать». Медиана следующего положения — «стоять», и захват стоит, сколько бы ни прошло времени. Пачка проходит паузу, если больше половины кадров уже едут к её концу: тогда и медиана едет.
- Толчок сдвигает кружку в захвате на 6 см вбок. Захват идёт по старому плану, и кружка едет со сдвигом, пока новая пачка его не учтёт. В миссиях 3 и 4 толчок приходит после паузы, сразу после начала новой пачки, то есть в худший момент. Время реакции — от толчка до первой пачки, которая его видит. С temporal ensembling считаем, когда кружка вернулась на путь хотя бы наполовину.
- Исходы. Кружка на полке, если её поставили не дальше 3 см от отметки. На путь даётся 8 с. Рывок — шаг, на котором ускорение захвата больше 4 м/с².
Пачка проходит паузу, но пока она исполняется, рука не видит толчка. Рабочее окно в игрушке — от 14 до 25 действий, и большие системы тоже исполняют только часть пачки. У ACT пачка — 100 действий. Как одна сеть выдаёт сразу сто действий?
Сто действий за один проход
Как одна сеть выдаёт сразу сто действий? Ей нужно превратить четыре кадра и положения суставов в 100 действий по 14 чисел, причём быстро: ACT опрашивают на каждом шаге, 50 раз в секунду.
Сеть из урока 1.1 устроена под одно действие: кадр на входе, действие на выходе.
Можно выдавать действия по одному, как языковая модель выдаёт слова. Но тогда на пачку уходит сто проходов сети подряд, а на каждом шаге столько не успеть.
ACT берёт трансформер из урока 1.6. Кадр с каждой камеры проходит через свёрточную сеть ResNet18 и превращается в карту признаков 15×20×512. Карту разворачивают в 300 токенов и добавляют 2D-синусоидальные позиции, чтобы сеть знала, из какого места кадра каждый токен. С четырёх камер выходит 1200 токенов, к ним добавляют токен суставов и токен «стиля» z — всего 1202. Энкодер перемешивает токены, а декодер получает фиксированных запросов, по одному на будущее действие, и через cross-attention выдаёт все действий сразу. Каждое действие — 14 абсолютных целевых положений ведущих рук, по 6 суставов и захват на каждую; с приращениями результат был хуже. Собери эту схему из блоков: на каждом стыке видна размерность.
Нажми на блок, потом на место в схеме, или перетащи блок. Блок в схеме можно вернуть нажатием. Среди блоков есть лишние.
Под капотом: числа ACT
Энкодер — 4 слоя, d = 512, 8 голов. По статье в декодере 7 слоёв, но в исходном коде на выход идёт только первый (issue #25 в репозитории ACT; в LeRobot стоит 1). ResNet18 начинает с весов ImageNet. Всего около 80 млн параметров, обучение — около 5 часов на RTX 2080 Ti, AdamW, шаг обучения 1e-5, батч 8, своя модель на каждую задачу. Вывод занимает около 10 мс.
Целевые положения отрабатывает ПИД-регулятор в моторах Dynamixel. Предсказывают положения ведущих рук, а не ведомых: расхождение между ними через ПИД неявно задаёт силу. Почему приращения хуже, статья не объясняет. Возможное объяснение — из урока 0.3: позиционные цели вместе с регулятором дают систему, устойчивую без обратной связи, а это условие, при котором пачки помогают.
На входе 1202 токена, на выходе 100×14, около 80 млн параметров и около 10 мс на вывод. В схеме есть блок, который на выводе не работает, — энкодер CVAE. Зачем он нужен при обучении?
Латентная переменная «стиль»
Зачем ACT энкодер CVAE? Люди показывают одну задачу по-разному: один объезжает вазу слева, другой справа.
Регрессия со среднеквадратичной ошибкой усредняет манеры: среднее двух объездов ведёт прямо в вазу. Это вывод урока 1.3.
ACT учат с L1 вместо MSE. L1 не усредняет, а берёт медиану — сторону, где демонстраций больше. В вазу политика не едет, но вторая манера теряется.
Чтобы не терять манеры, ACT учат как условный вариационный автоэнкодер, CVAE. При обучении отдельный энкодер смотрит на суставы и на k действий из демонстрации, без картинок, и сжимает манеру в вектор из 32 чисел. Политика получает вместе с картинками и восстанавливает действия. Функция потерь — с : слагаемое тянет к стандартному нормальному распределению. На выводе действий демонстрации нет, поэтому энкодер выбрасывают и подают . Что это даёт, объясняют двумя способами. Выбери одно объяснение и проверь опытом: оператор объезжал вазу 26 раз слева и 24 справа, на схемах робот едет снизу вверх.
z — это стиль. На выводе политика выбирает манеру и объезжает вазу то слева, то справа, как оператор.
z нужен только при обучении. На выводе z = 0, и политика каждый раз делает одно и то же, как регрессия с L1.
Под капотом: игрушечный CVAE
Сторона объезда — единственное, что можно закодировать. Энкодер переводит «слева» в , «справа» — в . Декодер с выдаёт медиану, то есть ту сторону, которая вероятнее при данном . и подобраны перебором так, чтобы минимизировать сумму двух слагаемых: доли неверных сторон (цена ошибки — 1, в тех же единицах, что ) и .
При энкодер ничего не кодирует: не знает о стороне. При он различает стороны. При энкодеру выгоднее ничего не кодировать: каждый бит о стороне стоит дороже, чем он экономит в L1. Регрессия с без выдаёт медиану всех демонстраций — сторону, где их больше. Если демонстраций слева и справа поровну, медиана не определена: L1 одинаково хороша для любой траектории между сторонами, в том числе прямо в вазу. Случайные z — десять чисел из генератора с зерном 21.
На выводе ACT детерминирована и ведёт себя как регрессия с L1. У авторов без CVAE успех на данных человека падал с 35,3% до 2%, но независимый перезапуск — препринт 2026 года с говорящим названием «The Latent That Never Was» — это падение не воспроизвёл. А когда данных стало много, авторы ALOHA сами перешли на диффузию: в ALOHA Unleashed на задаче ShirtMessy диффузионная функция потерь дала 70%, вариант ACT с L1 — 25%. Осталась проблема из лаборатории: пачка из 100 действий видит мир раз в 2 секунды. Как ACT реагирует быстрее, не укорачивая пачку?
Смешивание перекрывающихся пачек
Как реагировать быстрее, не укорачивая пачку? Пачка из 100 действий исполняется 2 секунды, и всё это время рука не видит новых кадров.
Новый кадр учитывается только в следующей пачке.
В лаборатории мы исполняли только часть пачки и составляли новую чаще. Реакция стала быстрее, но каждая новая пачка начинается немного иначе, чем шла старая, и на стыках появляются рывки.
ACT опрашивает модель на каждом шаге, а для текущего шага усредняет все предсказания, которые для него накопились, — при k = 100 их до ста. Это temporal ensembling. Веса — , где — самое старое предсказание; в коде ACT . Заглянем внутрь и перемотаем процесс по шагам. Наверху лента: по горизонтали шаги, по вертикали боковое смещение захвата; тонкие линии — пачки, которые предсказали выбранный шаг, толстая — что захват исполнил. Внизу — вес каждого предсказания, от самого старого слева до самого свежего справа.
Под капотом: формула и лента
где — самая старая пачка. В коде ACT предсказания для текущего шага лежат в порядке, в котором появлялись пачки, и веса идут от самой старой. При сумма весов ≈ 63,5, поэтому самое старое предсказание даёт ≈ 1,6% действия, самое свежее — ≈ 0,6%. Чем меньше , тем быстрее учитываются новые наблюдения.
В ленте новая пачка начинается на каждом шаге из того места, где захват сейчас, и за 12 шагов сходится к выбранному объезду. В режиме двух стратегий пачки до шага 100 выбирают объезд сверху, а начиная с шага 100 — снизу. Препятствие занимает шаги 132–168 и ±4 см по высоте.
Смешивание сглаживает движение, но больше доверяет старым предсказаниям, а среднее двух разных стратегий может вести в препятствие. На практике у ACT temporal ensembling добавил к успеху 3,3 процентного пункта, в π0 он ухудшал работу, а в ALOHA Unleashed не понадобился: пачку из 50 действий там исполняют целиком, а перепланирование раз в секунду авторы называют ограничением. Опрашивать модель на каждом шаге можно, потому что ACT быстрая: вывод занимает около 10 мс. Что делать, если модель думает в десятки раз дольше?
Пока модель думает, робот едет
Что делать, если модель думает долго? π0 выдаёт пачку за 73 мс на RTX 4090, у Gemini Robotics путь от наблюдения до пачки — около 250 мс. Всё это время робот должен что-то делать.
Новая пачка приходит с опозданием и посчитана по кадру, который уже устарел: робот за это время уехал.
Ждать новую пачку стоя — робот замирает. Переключаться на неё сразу, как пришла, — на стыке скачок. Смешивать пачки, как temporal ensembling, — усредняются разные стратегии.
Real-Time Chunking (RTC; Black, Galliker, Levine, NeurIPS 2025) генерирует следующую пачку, пока исполняется текущая. Действия, которые успеют исполниться за время вывода, замораживаются, а остальные дорисовываются так, чтобы продолжать старую пачку; переобучать модель не нужно. Проверим на роботе, который объезжает препятствие сверху или снизу. Политика генеративная, как π0: пачка из 50 действий, сторону объезда она выбирает случайно, пока робот не отъехал от оси. Сначала нарисуй прогноз скорости при синхронном исполнении, потом сравни четыре режима при задержке 200 мс.
Под капотом: режимы и другие решения
- Синхронно. Исполнить 25 действий, остановиться, подождать вывод, начать новую пачку с того места, где стоим.
- Наивно асинхронно. Вывод новой пачки начинается за время задержки до конца 25 действий, по кадру того момента. Когда пачка приходит, робот переключается на неё сразу с нужного шага, не сглаживая стык.
- TE. Новая пачка приходит на каждом шаге, посчитанная по кадру шагов назад. Действие — среднее всех пачек с весами , как в ACT.
- RTC (упрощённо). Первые действий новой пачки — те же, что у старой. Дальше новая пачка смешивается со старой с весом старой , последние 25 действий — только новые. Новая пачка продолжает ту же сторону объезда: в настоящем RTC это делает наведение при генерации.
- Критерии. Пауза — шаги, на которых робот едет медленнее 5 см/с; пройти нужно с паузами меньше 0,1 с суммарно. Скачок скорости — наибольшее изменение скорости между соседними шагами по 20 мс, порог — 0,15 м/с. Препятствие — круг радиусом 7 см, робот — 2 см.
Есть и другие решения. BID (ICLR 2025) на каждом шаге сэмплирует несколько пачек и выбирает одну по согласованности с прошлым решением; относительный прирост — 32%, с EMA — 46%, ценой примерно вдвое больших вычислений. Асинхронный вывод в SmolVLA сократил время на задачу с 13,75 до 9,7 с.
В игрушке задержку 200 мс выдерживает только RTC. В статье на π0.5 при искусственной задержке +100 и +200 мс RTC не деградирует, синхронный режим деградирует линейно, а temporal ensembling раскачивает робота до защитной остановки. RTC выполняет то же движение на 20% быстрее синхронного режима и зажигает спичку при задержке больше 300 мс. В версии RTC с обучением (декабрь 2025) задержку имитируют прямо при обучении, поэтому лишних вычислений на выводе нет; на π0.6 результат на уровне исходного RTC. Какие пачки в итоге берут большие системы и сколько из них исполняют?
Сколько действий в пачке в 2023–2025 годах
Какие пачки берут большие системы? Почти все современные политики выдают пачки и чаще всего исполняют их не целиком: длинная пачка даёт связное продолжение, частый вывод — реакцию.
| Система | Пачка | Исполняется до нового вывода | Частота |
|---|---|---|---|
| ACT, 2023 | 100 (на сайте 90) | с TE — опрос на каждом шаге; без TE — все k | 50 Гц, пачка — 2 с |
| Diffusion Policy, 2023 | 16 | 8 | 10 Гц |
| Mobile ALOHA (ACT), 2024 | 45 | н/д | 50 Гц |
| ALOHA Unleashed, 2024 | 50 (1 с) | 50, без TE | 50 Гц |
| π0, 2024 | 50 | 25 (0,5 с) на роботах с 50 Гц; 16 (0,8 с) на UR5e и Franka | 50 / 20 Гц |
| π0.5 + RTC, 2025 | 50 | синхронно 25; с RTC — асинхронно | 50 Гц |
| GR00T N1, 2025 | 16 (63,9 мс на пачку) | н/д | действия 120 Гц, VLM 10 Гц |
| TRI LBM, 2025 | 16 (1,6 с) | 8 (0,8 с) | 10 Гц |
| Atlas LBM, 2025 | 48 (1,6 с) | 24 (0,8 с) | 30 Гц |
| SmolVLA, 2025 | 50 | асинхронно, по порогу очереди | н/д |
| Gemini Robotics, 2025 | н/д | н/д | «эффективно 50 Гц» |
Что выросло из ALOHA
- Mobile ALOHA (2024) — ALOHA с подвижной базой за $32k, 3 камеры, пачка ACT — 45. Совместное обучение со статичными демонстрациями ALOHA (825 штук) по аннотации повышает успех «до 90%». В таблице для ACT: Call Elevator — с 0 до 95%, Rinse Pan — с 0 до 80%, Wipe Wine — с 50 до 95%.
- ALOHA 2 (2024) — ведущим захватам нужно примерно в 10 раз меньше усилия, пассивная компенсация гравитации, 4 камеры RealSense D405, модель для MuJoCo.
- ALOHA Unleashed (2024) — больше 26 000 демонстраций на 5 задач, трансформер с диффузионной функцией потерь на 217 млн параметров, вывод за 0,043 с на RTX 4090.
- Atlas LBM (Boston Dynamics и TRI, 2025) — 450 млн параметров. Исполнение можно ускорить в 1,5–2 раза без заметной потери качества.
Пачки, стыки и задержка разобраны. Какие из этих идей легче всего понять неправильно? Проверим.
Восемь вопросов о типичных заблуждениях
Итоги урока
- Action chunking: по одному кадру предсказать действий. Решений в раз меньше, и пачка проходит паузы, на которых застревает пошаговая политика.
- У длины пачки есть окно: короткие застревают, длинные поздно реагируют на неожиданное. Большие системы исполняют часть пачки: π0 — 25 из 50.
- ACT: ResNet18 → 1200 токенов, плюс суставы и z, энкодер-декодер, 100 запросов → 100×14 абсолютных положений за один проход.
- CVAE нужен только при обучении. На выводе , и ACT детерминирована.
- Temporal ensembling больше доверяет старым предсказаниям ( — самое старое). Он сглаживает, но усредняет разные стратегии и плохо переносит задержку.
- RTC склеивает пачки при задержке вывода: замораживает то, что успеет исполниться, и дорисовывает остальное.
- Пачка помогает на системе, устойчивой без обратной связи, и может навредить на неустойчивой.
ACT учат отдельно на каждую задачу: 50 демонстраций на навык, одна политика — одна задача. Политика повторяет движения оператора, но не знает геометрии сцены и не понимает слов, поэтому не может понять, что именно делать в новой ситуации. С этой проблемы начинается часть 2.
Открытые вопросы
Задержка вывода 150 мс, робот управляется на 50 Гц. Какую длину пачки и какой способ исполнения выберешь и почему?
150 мс — это 7–8 шагов. Пачка должна с запасом покрывать задержку, а исполняемая часть — укладываться во время, за которое нужно успевать реагировать. Например, пачка из 50 действий (1 с), исполнять около 25 (0,5 с), как у π0. Синхронный режим давал бы паузу 150 мс на каждые полсекунды движения, наивное переключение — скачки на стыках. Лучше асинхронно с RTC: заморозить 8 действий, которые исполнятся за время вывода, и дорисовать остальные. Temporal ensembling опасен, если политика генеративная и соседние пачки могут выбрать разные стратегии.
Почему пачка действий помогает на устойчивой системе, но может навредить на неустойчивой, например при балансировании?
Пачку исполняют без обратной связи. Если система устойчива сама — например, позиционный регулятор держит цель, — отклонения между решениями гаснут, а решений и их ошибок меньше. Если система неустойчива, за время пачки отклонение растёт в раз и исправить его некому до следующего решения. По ICLR 2026 для таких систем нужен шум при сборе демонстраций, чтобы политика выучила поправки; пачки при этом приходится делать короткими.
Гид по статье
- Читать внимательноОписание ACT: пачки действий, temporal ensembling, CVAE и схему архитектуры. Абляции: длина пачки, temporal ensembling, CVAE и частота телеоперации.
- Можно пропуститьДетали конструкции ALOHA, если не собираешься её собирать.
- Вопрос по ходуПочему ACT предсказывает положения ведущих рук, а не ведомых? Подсказка — в разделе про архитектуру.
Материалы
- ALOHA и ACTСайт проекта: автономные прогоны и реакция на помехи
- Код ACTTemporal ensembling — в imitate_episodes.py
- LeRobot: ACTКак обучить ACT самому
- LeRobot: асинхронный выводПачки при задержке на практике
- Real-Time ChunkingБлог Physical Intelligence: спичка и сравнение с temporal ensembling
- Mobile ALOHAZ. Fu, T. Zhao, C. Finn, CoRL 2024
- ALOHA UnleashedШнурки и рубашка: диффузия на 26 000 демонстраций
- Bidirectional DecodingВыбор пачки по согласованности с прошлой, ICLR 2025