STL-робастность: почему робот нарушает правило незаметно
Семь шарниров, захват, деталь в руке. Манипулятор Franka Panda должен взять её вне зоны, зарезервированной за человеком, и передать из руки в руку уже внутри этой зоны. На пути к позе захвата конец эффектора проскакивает внутрь шара радиусом 0.2 метра и проводит там 0.3 секунды. Дальше робот стоит и ждёт, пока откроется окно передачи.
С точки зрения спецификации это провал: траектория нарушает требование оставаться вне зоны, пока деталь не взята. С точки зрения оптимизатора, который эту спецификацию навязывает как ограничение, всё в порядке. Гладкая аппроксимация робастности положительна, ограничение выполнено, солвер спокойно возвращает нарушающую траекторию. Именно этот разрыв разбирает работа SparseMax-dSTL (arXiv 2610.23837): про нижние приближения экстремумов, у которых вес градиента на нарушенных сэмплах не падает с ростом горизонта.
Что такое STL-робастность
Signal Temporal Logic (STL) описывает требования к траектории во времени: не входи в зону, пока не взял деталь, держи дистанцию не меньше 10 см, снизь скорость рядом с человеком. Каждому предикату ставится в соответствие вещественное значение со знаком, а робастность всей спецификации собирается из них вложенными минимумами и максимумами по сэмплам времени. Неотрицательная робастность означает, что траектория требование выполняет, отрицательная означает нарушение, а модуль показывает запас или глубину.
Негладкость здесь принципиальная: минимумы и максимумы ломают производную. Поэтому практические солверы заменяют каждый экстремум гладкой функцией и считают траекторию допустимой, когда сглаженная робастность неотрицательна. Дальше всё зависит от того, какая именно замена стоит в узле графа вычислений. Она определяет и множество траекторий, из которого выбирает солвер, и то, как градиент распределяется между сэмплами.
Две проблемы, которые обычно решают по отдельности
Первая проблема про знак. Классическая замена максимума через log-sum-exp (LSE) даёт верхнюю оценку максимума, а не нижнюю. При m одинаковых значениях превышение равно σ ln m. Звуковая версия вычитает эту величину и становится нижней оценкой, так что отрицательное значение теперь гарантирует нарушение. Но у неё появляется вторая проблема.
Вторая проблема про распределение. Градиент LSE это softmax, он даёт положительный вес каждому сэмплу. Пока горизонт короткий, нарушенные сэмплы получают заметную долю. Как только ожидание в спецификации растягивается на тысячи сэмплов, их вес стремится к нулю: k нарушенных сэмплов делят градиент с n−k соседями, чьи значения лежат в пределах σ. Generalized-mean robustness (GMR) ведёт себя похоже, потому что усредняет нарушенные сэмплы по всем n.
Авторы формулируют оба требования сразу: нижняя оценка с бюджетом ошибки, известным до оптимизации, и вес на нарушенных сэмплах, ограниченный снизу независимо от горизонта. Меры, которые есть сегодня, дают не больше одного из двух. Сравнивать их корректно при равной худшей ошибке на узел, потому что любая гладкая замена сходится к точному экстремуму при σ → 0, но градиент при этом становится резче.
Почему оператор until создаёт ничьи
У оператора until левый операнд должен выполняться до момента, когда выполнится правый. Каждый сэмпл окна это свидетель, робастность оператора есть максимум по свидетелям, а внутри каждого свидетеля стоит минимум по префиксу.
Если самое глубокое нарушение левого операнда случилось до открытия окна, префикс каждого свидетеля содержит этот сэмпл. Все внутренние минимумы получают одно и то же значение, и внешний максимум вырождается в ничью из m равных элементов. LSE в такой точке даёт ровно σ ln m сверху. Значит, при глубине нарушения меньше σ ln m сглаженная робастность остаётся положительной, и солвер видит допустимую траекторию там, где её нет.
На уницикле из статьи окно даёт 21 свидетеля, и обычный LSE положителен на траектории, которая заходит на 0.015 метра внутрь запретной области. На манипуляторе свидетелей 51, потому что робот стоит в позе захвата всё окно. Ничьи растут вместе с окном, а вместе с ними растёт и ложный запас.
Sparsemax вместо softmax
Авторы берут максимум, регуляризованный квадратичным штрафом по вероятностному симплексу. Задача строго вогнутая, её максимизатор это евклидова проекция на симплекс, то есть отображение sparsemax. Градиент такой функции это сами веса sparsemax, и здесь появляется главное свойство: у сэмплов ниже порога производная ровно ноль.
Сдвиг на две константы превращает регуляризованный максимум в нижние приближения обоих экстремумов, минимума и максимума. Полоса ошибки не зависит от числа входов в узле: она одинакова и для двух сэмплов, и для трёх тысяч. Композиция по графу вычислений даёт бюджет ошибки как сумму полос вдоль пути от корня до листа, и этот бюджет известен до запуска оптимизации. Узел until добавляет две полосы на путь при любой длине окна.
Отсюда первое требование выполняется по построению. Сглаженная робастность не больше точной, значит отрицательная оценка гарантирует нарушение, а запас на нижней оценке есть запас на точной.
Равная ошибка, разный вес
Второе требование про градиент. При равной худшей ошибке на узел вес звукового LSE на k нарушенных сэмплах равен k / (k + (n−k)e^(−Δ/σ)), где Δ это зазор между нарушенными и остальными. С ростом n знаменатель растёт, и вес падает. Sparsemax при том же зазоре отдаёт нарушенным сэмплам весь вес: 1.0, без зависимости от n.
Следствие в статье формулирует это как оценку. Если k сэмплов отстоят от остальных на зазор Δ, вес на них ограничен снизу величиной, которая не зависит ни от числа остальных сэмплов, ни от их значений. В пределе, когда зазор превышает порог, нарушенные сэмплы забирают всю производную, а остальные получают ноль.
Это и есть смена режима. Вместо усреднения сигнала по тысячам спокойных сэмплов солвер получает сосредоточенный сигнал от тех девятнадцати, где робот действительно нарушил правило.
Уницикл: 0.058 метра внутрь
Первый пример это планарный уницикл в квадрате 10 на 10 метров с четырьмя дисками. Спецификация требует не входить в красный диск, пока не оказался в зелёном в пределах двухсекундного окна. Затем нужно дойти до синего и остаться там на две секунды, не заходя в препятствие и не покидая рабочую область.
Фиксированная траектория режет красный диск по дуге, а потом ждёт снаружи, пока откроется окно. Ожидание растягивают с 3 до 130 секунд, что добавляет до 1301 сэмпла с зазором над нарушением. Вес sparsemax на нарушенных сэмплах остаётся 1.000 на обоих концах, вес LSE падает с 0.68 до 0.19, у GMR он ещё ниже.
Дальше идёт оптимизация: минимизация усилий при ограничении на сглаженную робастность, первый порядок, augmented Lagrangian, single shooting, 400 обновлений с backtracking Армихо, множители пересчитываются каждые десять шагов. Все сглаженные ограничения удерживаются с точностью 0.0003 метра.
При нулевом запасе ограничение обычного LSE выполняется на траектории, которая врезается в красный диск на 0.058 метра. Звуковой LSE и sparsemax удерживают уницикл снаружи на 0.045 и 0.087 метра. При запасе 0.1 метра только нижние оценки возвращают траекторию с точной робастностью не ниже запаса, ценой 1% и 4% дополнительных усилий. При более высоком запасе обычный LSE снова отдаёт нарушающую траекторию.
Манипулятор: 1–2 обновления против 17
Второй пример ближе к производству. Семишарнирная Franka Panda под моментным управлением делит стол с человеком. Зона это шар радиусом 0.2 метра в половине метра перед основанием. Предикаты нормированы: дистанция 0.10 метра между сферами робота и человека, скорость 0.30 метра и 0.25 м/с рядом, допуск 0.05 метра по позам захвата и передачи. Симуляция в MuJoCo через Warp, дифференцирование в обратном режиме.
Четыре начальные траектории отличаются одной промежуточной конфигурацией, конец эффектора везде проскакивает внутрь зоны на 0.3 секунды, это 19 сэмплов, и потом ждёт в позе захвата. На горизонтах 20, 40 и 80 секунд ожидание содержит 787, 1787 и 3787 сэмплов.
Вес LSE на нарушенных сэмплах падает с 0.216 до 0.036, и это в пределах 5% от аналитической формулы. Sparsemax держит 1.000 на всех горизонтах. Ещё нагляднее по моментному градиенту: часть градиента, проходящая через нарушенные сэмплы, у LSE падает в 5.4 раза, у GMR в 10 раз, у sparsemax не меняется вовсе (16.82 на десяти секундах и 16.82 на восьмидесяти).
В оптимизации по моментам, где шаг нормализован и размер градиента не влияет на апдейт, медиана первого точно удовлетворяющего обновления у sparsemax равна 1 на горизонтах 10, 20 и 40 секунд, с квартилями [1, 2]. У звукового LSE она растёт вместе с горизонтом: 4.5, 10 и 17 обновлений, с квартилями [14, 22] на сорока секундах. После 100 обновлений медианная точная робастность у sparsemax 0.172, у звукового LSE 0.097, у обычного LSE около нуля, потому что его ограничения выполняются уже на нарушающей стартовой траектории и первые шаги уменьшают только усилия.
Чем за это платят
Цена у метода есть, и авторы её не прячут. Полоса минимума достигается на ничьей, поэтому при равной худшей ошибке sparsemax даёт меньшее значение и отбрасывает траектории, чей точный запас ниже реализованной ошибки: 0.17 против 0.13 у звукового LSE. Там, где допустимость на пределе, это может оставить задачу вообще без плана. В эксперименте 3 из 32 траекторий на 40 секундах не удовлетворили даже собственное ограничение солвера, а усилия оказались выше, чем у обычного LSE: 0.97 против 0.61 от начальной траектории.
Второй изъян структурный. Сэмпл за порогом получает ровно нулевую производную, поэтому ничто не предупреждает солвер о сэмпле, который вот-вот станет критическим. Во вложенной спецификации ноль на внутреннем узле скрывает этот сэмпл от узлов выше. Операторы всего один раз непрерывно дифференцируемы, а выигрыш по числу обновлений измерен только для методов первого порядка. Для второпорядковых солверов авторы оставляют на будущее разреженный гессиан и sparse autodiff.
Что это значит на практике
Разрыв между «ограничение выполнено» и «требование выполнено» в робототехнике стоит дорого. Гладкая замена экстремума это не деталь реализации, а часть постановки задачи: она задаёт и множество, из которого солвер выбирает, и направление, в котором он идёт. Пока спецификация короткая, разница незаметна. На длинных горизонтах она накапливается: сигнал от редких нарушений размывается, и оптимизатор честно сходится к траектории, которая формально проходит проверку и физически задевает человека.
Тот же механизм виден за пределами STL. В обучении с подкреплением длинные эпизоды размывают кредит на редких событиях, в длинном контексте редкие токены теряются в softmax. Разреженное распределение веса это общий ответ: не сглаживать всё подряд, а оставить сигнал там, где он есть.
Ограничение работы в том, что всё проверено в симуляции: уницикл и Franka Panda в MuJoCo. Переносимость на железо, шум сенсоров и задержки управления остаются открытыми. Но постановка задачи сформулирована чисто, и это уже половина результата.
Часто задаваемые вопросы
Почему просто не уменьшить σ?
Уменьшение σ приближает гладкую замену к точному экстремуму, но делает градиент резче: константа Липшица растёт. У LSE при этом всё равно нет нижней оценки веса, независимой от горизонта: как только n растёт при фиксированном отношении Δ/σ, вес нарушенных сэмплов падает. Sparsemax даёт границу при любом n, а при равной худшей ошибке его градиент Липшица ниже, чем у LSE.
Подходит ли метод для policy gradient и safety-фильтров?
Авторы говорят, что те же два свойства нужны policy gradient и градиентным фильтрам безопасности, которые дифференцируют робастность. Но численно проверена только оптимизация траекторий, причём выигрыш по числу обновлений заявлен для методов первого порядка. Для обучения с подкреплением нужны отдельные эксперименты.
В чём главный риск при выборе sparsemax?
Реализованная ошибка больше, чем у звукового LSE: 0.17 против 0.13 в примере с манипулятором. Если запас задан жёстко и близко к этой величине, ограничение может оказаться несовместным. Плюс нулевой градиент за порогом: солвер не видит сэмпл, который через шаг станет критическим.
Итог
STL-робастность нужна ровно для того, чтобы отличать допустимую траекторию от нарушающей. Обычный LSE этого не гарантирует: на операторе until он даёт положительное значение там, где спецификация нарушена, а его градиент размывается по горизонту. Sparsemax-экстремумы закрывают обе дыры: нижняя оценка с бюджетом ошибки, известным заранее, и вес нарушенных сэмплов, который не зависит от числа остальных.
Если вы строите safety-фильтр или оптимизатор траекторий на STL, проверьте, какая гладкая замена стоит у вас в узлах, и посчитайте вес градиента на нарушенных сэмплах при худшем горизонте. Числа из статьи дают готовый тест: если вес падает с ростом окна, ограничение защищает не то, что вы думаете.