exponenta event banner

Обучить двуногого робота ходить с помощью агентов обучения усилению

В этом примере показано, как обучить двуногого робота ходить, используя как агент глубокого детерминированного градиента политики (DDPG), так и агент двойного задержанного глубокого детерминированного градиента политики (TD3). В примере также сравнивается производительность этих обученных агентов. Робот в этом примере смоделирован в Simscape™ Multibody™.

Дополнительные сведения об этих агентах см. в разделах Агенты градиента глубокой детерминированной политики (инструментарий обучения усилению) и Агенты градиента глубокой детерминированной политики с двойной задержкой (инструментарий обучения усилению).

Для сравнения в этом примере в среде двуногих роботов оба агента обучаются с одинаковыми параметрами модели. В примере также настраиваются агенты, имеющие следующие общие настройки.

  • Стратегия начального состояния двуногого робота

  • Сетевая структура актера и критика, вдохновленная [1]

  • Варианты представления актера и критика

  • Варианты обучения (время выборки, коэффициент дисконтирования, размер мини-партии, длина буфера опыта, шум при исследовании)

Модель двуногого робота

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

Загрузите параметры модели в рабочую область MATLAB ®.

robotParametersRL

Откройте модель Simulink.

mdl = 'rlWalkingBipedRobot';
open_system(mdl)

Робот моделируется с помощью Simscape Multibody.

Для этой модели:

  • В нейтральном положении 0 рад обе ноги прямые, а лодыжки плоские.

  • Контакт стопы моделируется с помощью блока Пространственная сила контакта (Simscape Multibody).

  • Агент может управлять 3 отдельными суставами (лодыжкой, коленом и бедром) на обеих ногах робота, подавая сигналы крутящего момента от -3 кому 3 N· м. Фактические вычисленные сигналы действия нормализуются между-1 и 1.

Среда обеспечивает следующие 29 наблюдений для агента.

  • Y (латеральный) и Z (вертикальный) перемещения центра масс туловища. Перемещение в направлении Z нормализуется в том же диапазоне, что и другие наблюдения.

  • Скорости перемещения X (вперед), Y (поперечные) и Z (вертикальные).

  • Углы рыскания, тангажа и крена туловища.

  • Угловые скорости рыскания, тангажа и крена туловища.

  • Угловые положения и скорости трех суставов (голеностопа, колена, бедра) на обеих ногах.

  • Значения действия из предыдущего шага времени.

Эпизод завершается, если возникает одно из следующих условий.

  • Центр масс туловища робота составляет менее 0,1 м в направлении Z (робот падает) или более 1 м в направлении Y (робот перемещается слишком далеко в сторону).

  • Абсолютное значение крена, шага или рыскания больше 0,7854 рад.

Следующая функция вознаграждения rt, которая предоставляется на каждом шаге времени, вдохновляется [2].

rt=vx-3y2-50zˆ2+25TsTf-0.02∑iut-1i2

Здесь:

  • vx - скорость перемещения в направлении X (вперед к цели) робота.

  • y - боковое поступательное смещение робота от целевой прямолинейной траектории.

  • - нормализованное вертикальное перемещение центра масс робота.

  • ut-1i - крутящий момент от соединения i от предыдущего временного шага.

  • Ts - время выборки среды.

  • Tf - окончательное время моделирования среды.

Эта функция поощрения побуждает агента двигаться вперед, предоставляя положительное вознаграждение за положительную скорость вперед. Он также призывает агента избегать прекращения эпизода, предоставляя постоянное вознаграждение (25TsTf) на каждом шаге времени. Другими терминами в функции вознаграждения являются штрафы за существенные изменения в боковом и вертикальном переводах, а также за использование избыточных усилий контроля.

Создание интерфейса среды

Создайте спецификацию наблюдения.

numObs = 29;
obsInfo = rlNumericSpec([numObs 1]);
obsInfo.Name = 'observations';

Создайте спецификацию действия.

numAct = 6;
actInfo = rlNumericSpec([numAct 1],'LowerLimit',-1,'UpperLimit',1);
actInfo.Name = 'foot_torque';

Создайте интерфейс среды для модели шагающего робота.

blk = [mdl,'/RL Agent'];
env = rlSimulinkEnv(mdl,blk,obsInfo,actInfo);
env.ResetFcn = @(in) walkerResetFcn(in,upper_leg_length/100,lower_leg_length/100,h/100);

Выбор и создание агента для обучения

В этом примере предусмотрена возможность обучения робота с использованием либо DDPG, либо агента TD3. Чтобы смоделировать робота с выбранным агентом, установите AgentSelection соответственно флаг.

AgentSelection = 'TD3';
switch AgentSelection
    case 'DDPG'
        agent = createDDPGAgent(numObs,obsInfo,numAct,actInfo,Ts);
    case 'TD3'
        agent = createTD3Agent(numObs,obsInfo,numAct,actInfo,Ts);
    otherwise
        disp('Enter DDPG or TD3 for AgentSelection')
end

createDDPGAgent и createTD3Agent вспомогательные функции выполняют следующие действия.

  • Создавать актерские и критические сети.

  • Укажите параметры для представлений актера и критика.

  • Создание представлений актера и критика с помощью созданных сетей и заданных опций.

  • Настройка параметров, специфичных для агента.

  • Создать агента.

Агент DDPG

Агент DDPG аппроксимирует долгосрочное вознаграждение, данное наблюдениям и действиям, используя представление функции значения критика. Агент DDPG решает, какое действие следует предпринять для данных наблюдений, используя представление актера. Актерские и критические сети для этого примера вдохновлены [1].

Для получения подробной информации о создании агента DDPG см. createDDPGAgent функция помощника. Дополнительные сведения о настройке параметров агента DDPG см. в разделе rlDDPGAgentOptions(Панель инструментов для обучения усилению).

Дополнительные сведения о создании представления функции значений глубоких нейронных сетей см. в разделе Создание представлений функций политик и значений (панель обучения усилению). Пример создания нейронных сетей для агентов DDPG см. в разделе Train DDPG Agent to Control Double Integrator System (Enharmation Learning Toolbox).

TD3 Агент

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

Агент DDPG может переоценить значение Q. Поскольку агент использует значение Q для обновления своей политики (субъекта), результирующая политика может быть неоптимальной, а накопление ошибок обучения может привести к расхождению в поведении. Алгоритм TD3 является расширением DDPG с улучшениями, которые делают его более надежным, предотвращая завышение значений Q [3].

  • Две критические сети - TD3 агенты изучают две критические сети независимо и используют оценку функции минимального значения для обновления актера (политики). Это предотвращает накопление ошибки на последующих этапах и завышение значений Q.

  • Добавление целевого шума политики - добавление усеченного шума в функции значений сглаживает значения Q-функций по сравнению с аналогичными действиями. Это предотвращает изучение неправильного резкого пика оценки шумного значения.

  • Отложенные обновления политики и цели - для агента TD3 задержка сетевого обновления актера позволяет функции Q уменьшить количество ошибок (приблизиться к требуемой цели) перед обновлением политики. Это предотвращает расхождения в оценках стоимости и приводит к обновлению политики более высокого качества.

Для получения подробной информации о создании агента TD3 см. createTD3Agent функция помощника. Сведения о настройке параметров агента TD3 см. в разделе rlTD3AgentOptions(Панель инструментов для обучения усилению).

Укажите параметры обучения и агента подготовки

В этом примере параметры обучения для агентов DDPG и TD3 одинаковы.

  • Запускать каждую тренировку для 2000 эпизодов с каждым эпизодом длительностью не более maxSteps временные шаги.

  • Отображение хода обучения в диалоговом окне «Менеджер эпизодов» (установите Plots и отключите отображение командной строки (установите Verbose опция).

  • Прекратить обучение только при достижении максимального количества эпизодов (maxEpisodes). Это позволяет сравнивать кривые обучения для нескольких агентов в течение всего сеанса обучения.

Дополнительные сведения и дополнительные параметры см. в разделе rlTrainingOptions(Панель инструментов для обучения усилению).

maxEpisodes = 2000;
maxSteps = floor(Tf/Ts);
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',maxEpisodes,...
    'MaxStepsPerEpisode',maxSteps,...
    'ScoreAveragingWindowLength',250,...
    'Verbose',false,...
    'Plots','training-progress',...
    'StopTrainingCriteria','EpisodeCount',...
    'StopTrainingValue',maxEpisodes,...
    'SaveAgentCriteria','EpisodeCount',...
    'SaveAgentValue',maxEpisodes);

Для параллельного обучения агента укажите следующие варианты обучения. Параллельное обучение требует Toolbox™ параллельных вычислений. Если программное обеспечение Parallel Computing Toolbox не установлено, установите UseParallel кому false.

  • Установите UseParallel опция true.

  • Обучение агента параллельно асинхронно.

  • После каждых 32 шагов, пусть каждый работник отправляет опыт на узел. Агенты DDPG и TD3 требуют от сотрудников отправки опыта на узел.

trainOpts.UseParallel = true;
trainOpts.ParallelizationOptions.Mode = 'async';
trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;
trainOpts.ParallelizationOptions.DataToSendFromWorkers = 'Experiences';

Обучение агента с помощью train(Панель инструментов обучения для усиления). Этот процесс требует большого объема вычислений и занимает несколько часов для каждого агента. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно подготовленный агент путем установки doTraining кому false. Чтобы обучить агента самостоятельно, установите doTraining кому true. Из-за случайности в параллельном обучении можно ожидать различных результатов обучения от следующих графиков. Предварительно обученные агенты обучались параллельно с использованием четырех рабочих.

doTraining = false;
if doTraining    
    % Train the agent.
    trainingStats = train(agent,env,trainOpts);
else
    % Load a pretrained agent for the selected agent type.
    if strcmp(AgentSelection,'DDPG')
       load('rlWalkingBipedRobotDDPG.mat','agent')
    else
       load('rlWalkingBipedRobotTD3.mat','agent')
    end  
end

Для предыдущих примерных тренировочных кривых среднее время на тренировочный этап для агентов DDPG и TD3 составляет 0,11 и 0,12 секунды соответственно. Агент TD3 занимает больше времени обучения за шаг, поскольку обновляет две критические сети по сравнению с единственным критиком, используемым для DDPG.

Моделирование обученных агентов

Зафиксируйте начальное число случайного генератора для воспроизводимости.

rng(0)

Для проверки работоспособности обучаемого агента смоделируйте его в среде двуногих роботов. Дополнительные сведения о моделировании агентов см. в разделе rlSimulationOptions(инструментарий для обучения по усилению) и sim(Панель инструментов для обучения усилению).

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
experience = sim(env,agent,simOptions);

Сравнение производительности агента

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

Для агентов DDPG и TD3 постройте график среднего и стандартного отклонения вознаграждения за эпизод (верхний график) и значения Q0 эпизода (нижний график). Значение Q0 эпизода - критическая оценка дисконтированного долгосрочного вознаграждения в начале каждого эпизода с учетом первоначального наблюдения за окружающей средой. Для хорошо разработанного критика стоимость эпизода Q0 приближается к истинному обесцененному долгосрочному вознаграждению.

comparePerformance('DDPGAgent','TD3Agent')

На основе графика сравнения обучающих кривых:

  • Агент DDPG, похоже, быстрее набирает обучение (в среднем около эпизода № 600), но достигает локального минимума. TD3 начинается медленнее, но в конечном итоге достигает более высоких вознаграждений, чем DDPG, поскольку позволяет избежать завышения значений Q.

  • Агент TD3 показывает устойчивое улучшение своей кривой обучения, что предполагает улучшение стабильности по сравнению с агентом DDPG.

На основе сюжета сравнения эпизодов Q0:

  • Для агента TD3 критическая оценка дисконтированного долгосрочного вознаграждения (за 2000 эпизодов) ниже по сравнению с агентом DDPG. Это различие связано с тем, что алгоритм TD3 использует консервативный подход при обновлении своих целей, используя минимум две функции Q. Это поведение дополнительно улучшается из-за задержки обновления целевых объектов.

  • Хотя оценка TD3 для этих 2000 эпизодов является низкой, агент TD3 показывает устойчивое увеличение значений Q0 эпизода, в отличие от агента DDPG.

В этом примере тренировка была остановлена на 2000 эпизодах. В течение более широкого периода обучения TD3 агент с его постоянным увеличением оценок показывает возможность сходиться к истинному дисконтированному долгосрочному вознаграждению.

Другой пример обучения робота-гуманоида ходить с помощью агента DDPG см. в документе Train Humanoid Walker (Simscape Multibody). Пример обучения робота-четверостишия шагу с использованием агента DDPG см. в разделе Перемещение робота-четверостишия с использованием агента DDPG (инструментарий обучения усилению).

Ссылки

[1] Лилликрап, Тимоти П., Джонатан Дж. Хант, Александр Притцель, Николя Хеесс, Том Эрез, Юваль Тасса, Дэвид Сильвер и Даан Верстра. «Непрерывный контроль с глубоким усилением обучения». Препринт, представлен 5 июля 2019 года. https://arxiv.org/abs/1509.02971.

[2] Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tasa, et al. «Появление локомотивного поведения в богатых средах». Препринт, представлен 10 июля 2017 года. https://arxiv.org/abs/1707.02286.

[3] Фудзимото, Скотт, Херке ван Хуф и Дэвид Мегер. «Ошибка аппроксимации функции адресации в методах актера-критика». Препринт, представлен 22 октября 2018 года. https://arxiv.org/abs/1802.09477.

См. также

(инструментарий для обучения по усилению)

Связанные темы