exponenta event banner

Развертывание обучающих политик для обученного усиления

После обучения агента обучения усилению можно создать код для развертывания оптимальной политики. Можно создать:

  • Код CUDA ® для глубоких политик нейронных сетей с использованием GPU Coder™

  • Код C/C + + для таблиц, глубоких нейронных сетей или политик линейных базисных функций с использованием MATLAB ® Coder™

Генерация кода поддерживается для агентов, использующих нейронные сети прямой связи в любом из входных трактов, при условии, что поддерживаются все используемые уровни. Генерация кода не поддерживается для непрерывных действий агентов PG, AC, PPO и SAC, использующих повторяющуюся нейронную сеть (RNN), или для любого агента, имеющего несколько входных путей и содержащего RNN в любом из путей.

Дополнительные сведения об обучении агентов обучения усилению см. в разделе Обучение агентов обучения усилению.

Чтобы создать функцию оценки политики, которая выбирает действие на основе данного наблюдения, используйте generatePolicyFunction команда. Эта команда создает сценарий MATLAB, содержащий функцию оценки политики, и MAT-файл, содержащий оптимальные данные политики.

Для развертывания этой функции политики можно создать код с помощью кодера графического процессора или кодера MATLAB.

Создание кода с помощью кодера графического процессора

Если ваша обученная оптимальная политика использует глубокую нейронную сеть, вы можете создать код CUDA для политики с помощью GPU Coder. Дополнительные сведения о поддерживаемых графических процессорах см. в разделе Поддержка графических процессоров по выпуску (Панель инструментов параллельных вычислений). Существует несколько обязательных и рекомендуемых продуктов для создания кода CUDA для глубоких нейронных сетей. Дополнительные сведения см. в разделах Установка необходимых продуктов (GPU Coder) и Настройка необходимых продуктов (GPU Coder).

Не все уровни глубоких нейронных сетей поддерживают генерацию кода GPU. Список поддерживаемых уровней см. в разделе Поддерживаемые сети, уровни и классы (кодер графического процессора). Дополнительные сведения и примеры создания кода графического процессора см. в разделе Глубокое обучение с помощью кодера графического процессора (GPU Coder).

Создание кода CUDA для политики глубоких нейронных сетей

В качестве примера создайте код GPU для агента градиента политики, обученного в системе Train PG Agent to Balance Cart-Pole.

Загрузите обученного агента.

load('MATLABCartpolePG.mat','agent')

Создайте функцию оценки политики для этого агента.

generatePolicyFunction(agent)

Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученного актера глубокой нейронной сети. Для данного наблюдения функция политики оценивает вероятность для каждого потенциального действия с использованием сети субъектов. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.

Код для этой сети можно создать с помощью кодера графического процессора. Например, можно создать функцию CUDA, совместимую с MEX.

Сконфигурируйте codegen для создания CUDA-совместимой функции C++ MEX.

cfg = coder.gpuConfig('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');

Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае наблюдения выполняются в четырехэлементном векторе.

argstr = '{ones(4,1)}';

Создание кода с помощью codegen функция.

codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');

Эта команда генерирует функцию MEX evaluatePolicy_mex.

Создание кода с помощью кодера MATLAB

Можно создать код C/C + + для таблиц, глубоких нейронных сетей или политик линейных базисных функций с помощью кодера MATLAB.

С помощью кодера MATLAB можно создать:

Создание кода C для политики глубоких нейронных сетей без использования какой-либо сторонней библиотеки

В качестве примера создайте код C без зависимостей от сторонних библиотек для агента градиента политики, обученного по программе Train PG Agent to Balance Cart-Pole System.

Загрузите обученного агента.

load('MATLABCartpolePG.mat','agent')

Создайте функцию оценки политики для этого агента.

generatePolicyFunction(agent)

Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученного актера глубокой нейронной сети. Для данного наблюдения функция политики оценивает вероятность для каждого потенциального действия с использованием сети субъектов. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.

Сконфигурируйте codegen для создания кода, подходящего для создания MEX-файла.

cfg = coder.config('mex');

В объекте конфигурации установите целевой язык на C++ и установите DeepLearningConfig комуnone'. Этот параметр создает код без использования какой-либо сторонней библиотеки.

cfg.TargetLang = 'C';
cfg.DeepLearningConfig = coder.DeepLearningConfig('none'); 

Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае наблюдения выполняются в четырехэлементном векторе.

argstr = '{ones(4,1)}';

Создание кода с помощью codegen функция.

codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');

Эта команда генерирует код C++ для агента градиента политики, содержащего актор глубокой нейронной сети.

Создание кода C++ для политики глубоких нейронных сетей с использованием сторонних библиотек

Например, создайте код C++ для агента градиента политики, обученного в системе Train PG Agent to Balance Cart-Pole с использованием библиотеки Intel Math Kernel Library for Deep Neural Networks (MKL-DNN).

Загрузите обученного агента.

load('MATLABCartpolePG.mat','agent')

Создайте функцию оценки политики для этого агента.

generatePolicyFunction(agent)

Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученного актера глубокой нейронной сети. Для данного наблюдения функция политики оценивает вероятность для каждого потенциального действия с использованием сети субъектов. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.

Сконфигурируйте codegen для создания кода, подходящего для создания MEX-файла.

cfg = coder.config('mex');

В объекте конфигурации установите целевой язык на C++ и установите DeepLearningConfig в целевую библиотеку "mkldnn'. Этот параметр генерирует код с помощью библиотеки Intel Math Kernel Library for Deep Neural Networks (Intel MKL-DNN).

cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); 

Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае наблюдения выполняются в четырехэлементном векторе.

argstr = '{ones(4,1)}';

Создание кода с помощью codegen функция.

codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');

Эта команда генерирует код C++ для агента градиента политики, содержащего актор глубокой нейронной сети.

Создать код C для политики таблицы Q

Например, создайте код C для Q-обучающего агента, обученного по программе Train Enharmation Learning Agent in Basic Grid World.

Загрузите обученного агента.

load('basicGWQAgent.mat','qAgent')

Создайте функцию оценки политики для этого агента.

generatePolicyFunction(qAgent)

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

Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае существует единственное одномерное наблюдение (принадлежащее дискретному набору возможных значений).

argstr = '{[1]}';

Сконфигурируйте codegen функция для создания встраиваемого кода C, подходящего для нацеливания на статическую библиотеку, и установка для папки вывода значения buildFolder.

cfg = coder.config('lib');
outFolder = 'buildFolder';

Создание кода C с помощью codegen функция.

codegen('-c','-d',outFolder,'-config','cfg',...
    'evaluatePolicy','-args',argstr,'-report');

См. также

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