В статье описано решение задачи стабилизации положения подвижных элементов в технических системах. Реализована нейронная сеть с различными вариантами персептрона средствами языка Python, библиотеки tensorflow[1] и её расширения tflearn. Проведена имитация процесса стабилизации положения подвижного элемента технической системы в среде OpenAI средствами библиотеки gym[2]. Сформированы наборы данных для обучения нейронной сети, проведено обучение и тестирование нейронной сети средствами языка Python и библиотеки gym. В результате тестирования даны рекомендации по выбору архитектуры нейронной сети для разработки систем стабилизации подвижных объектов.
Данная работа выполнена в рамках курсового проекта по дисциплине «Machinelearning. Обучающиеся технические системы», научный руководитель – д.ф.-м.н., профессор Л.И. Воронова [3].
Постановка задачи
Разработчикам современных мобильных роботов, инженерам на некоторых предприятиях и др. необходимо решать задачу стабилизации положения и автоматического удерживания равновесия разрабатываемых систем [4]. При решении данной задачи используются современные методы принятия решений и интеллектуального анализа данных.
Разработка системы управления (СУ) таким объектом возможна как на аппаратном, так и на программном уровне. Классическим примером является замкнутая система автоматического регулирования, воздействующая на объект на основе информации о состоянии объекта, получаемой по контуру обратной связи.
Современный уровень робототехники характеризуется разработкой цифровых СУ, в том числе и для систем стабилизации подвижных объектов. Такие СУ могут иметь гибкую структуру, являются кроссплатформенными, лёгкими в разработке и настройке по сравнению с аналоговыми СУ. Программное обеспечение таких СУ позволяет реализовать методы машинного обучения: дерево решений, случайный лес, нейронные сети, кластеризация и др. [4].
Разрабатываемый алгоритм может быть использован в подсистеме для промышленных фрезерных станков с числовым программным управлением (ЧПУ) для стабилизации резца, что поможет повысить качество изделия [5].
Инструментарий Gym
Gym - это инструментарий для разработки и сравнения алгоритмов обучения. Его библиотека gym представляет собой набор тестовых задач — сред, которые можно использовать для разработки алгоритмов обучения. Эти среды имеют общий интерфейс, позволяющий писать общие алгоритмы[2].
Инструментарий gym предоставляет собой имитацию более 2,5 тысяч вариантов окружающей среды, каждая из которых может использоваться для разработки алгоритма обучения.
В библиотеке Gym есть среда CartPole-v1 (рис. 1), представляющая собой тележку, на которой балансирует шест. Управление тележкой происходит при помощи функции step(), которая имеет единственный входной аргумент: 0 или 1, что соответствует передвижению тележки влево или вправо соответственно.
Рисунок 1 –Окно среды CartPole-v1 [2]
Функция step()возвращает три значения:
Наблюдение (observation): специфичный для окружающей среды объект - в данном случае – положение тележки.
Награда (reward): вознаграждение, полученное в результате предыдущего действия. Масштаб варьируется в зависимости от среды, но цель всегда состоит в том, чтобы увеличить награду. Программа увеличивает количество очков на 25 единиц за каждую секунду незавершенной игры.
Завершение (done): информация о том, нужно ли перезапускать среду. Критическое отклонение шеста от нормального положения (больше 15 градусов) [2].
В начальный момент времени, когда шест находится в исходном состоянии, система принимает решение, в какую сторону подвинуть тележку. После этого система получает данные о передвижении тележки на предыдущем шаге и принимает решение о следующем действии (рис.2).
Рисунок 2 – Пример принятия решения
Если шест не отклонен от нормального положения в сторону более чем на 15 градусов, возвращаемая булева переменная doneпринимает значение falseи работа алгоритма продолжается. Как только переменная done возвращает значение true, игра заканчивается (рис.3).
Рисунок 3 – Пример завершения игры
Генерация обучающего набора данных
Для обучения нейронной сети необходимо подготовить обучающий набор данных. Созданная функция random_starts() запускает среду и в случайном порядке смещает тележку влево или вправо, пока работа алгоритма не будет завершена значением переменной done.
Создаютсямассивыtraining_dataиaccepted_scores. В массив training_dataзаписывается информация обо всех передвижениях тележки во время генерации тренировочных данных. Однако если записывать абсолютно все перемещения тележки, то туда попадут и данные, непригодные для обучения. Например, если при старте среды шест сразу отклонился от нормали более чем на 15 градусов и завершил работу алгоритма (рис.3).
Для решения проблемы создан массив accepted_scores. Эмпирическим путем установлено, что набор данных можно считать подходящим для обучения, если перемещения тележки позволили получить награду в 50 очков и более.
При генерации обучающего набора данных, в среде проводится 10 тысяч тренировочных запусков, в результате которых в массив training_dataзаписываются только запуски, набравшие более 50 очков.
Проектирование нейронной сети для автоматического удержания равновесия объекта
Как правило, нейронные сети могут иметь различную архитектуру: сверточные, рекуррентные нейронные сети и персептрон. Для решения задачи принятия решения на основе изменяющихся входных данных можно использовать персептрон.
Для реализации нейронной сети используются язык программирования Python, библиотека tensorflow и её расширение tflearn [1]. Tensorflow – одна из наиболее распространенных библиотек для машинного обучения. Tensorflow обладает обширной документацией, что существенно упрощает процесс обучения нейронной сети и её дальнейшее использование. Tflearn – модульная библиотека глубокого обучения, построенная поверхtensorflow, которая содержит все базовые учебные функции.
Библиотека tensorflow позволяет разработчику упростить построение нейронной сети, благодаря встроенным функциям.
Подбор оптимальной модели персептрона возможен эмпирическим путем, поэтому в качестве исходной модели использован персептрон с одним скрытым слоем (рис.4).
В качестве входных данных выступают положение шеста, предыдущее положение шеста и положение тележки. В качестве выходных данных – решение, в какую сторону сдвинуть тележку.
Рисунок 4 – Персептрон с одним скрытым слоем
Для оценки эффективности модели персептрона, создан массив Score, в котором хранятся все полученные в ходе тестирования очки. После тестирования находится среднее арифметическое значение элементов массива Score, которое и будет рассматриваться как эффективность.
Далее происходит обучение нейронной сети в 5 эпох при помощи функции train_model(), показанной на рисунке 5.
Рисунок 5 – Функция обучения нейронной сети
В ходе тестирования персептрона с одним скрытым слоем был получен график зависимости среднего результата от количества нейронов в скрытом слое, показанный на рисунке 5.
Рисунок 6 – График зависимости среднего результата
Как видно из графика, добавление нейронов на скрытый слой после 100 не изменяет результат. Для увеличения показателей принято решение изменить структуру персептрона, добавив больше скрытых слоёв. Протестировано много видов многослойного персептрона и самые показательные результаты показаны в Табл.1.
Таблица 1 - Варианты моделей персептрона
Средний результат |
L1 |
L2 |
L3 |
L4 |
L5 |
10 |
2 |
4 |
2 |
||
56 |
8 |
8 |
8 |
||
178 |
16 |
32 |
32 |
16 |
|
192 |
32 |
32 |
32 |
32 |
|
201 |
32 |
64 |
64 |
32 |
|
243 |
32 |
64 |
128 |
64 |
32 |
258 |
64 |
128 |
128 |
128 |
64 |
298 |
128 |
128 |
128 |
128 |
128 |
342 |
128 |
256 |
512 |
256 |
128 |
где:
Средний результат – среднее количество очков набранных за время тестирования
L1..L5 – количество скрытых слоёв;
число на пересечении – количество нейронов на каждом скрытом слое.
При использовании трёх скрытых слоёв с количеством нейронов L1/L2/L3 получен самый низкий средний результат - 10 очков.
При увеличении количества нейронов, результат заметно улучшился, но наиболее эффективным оказался способ, в котором происходит увеличение количества скрытых слоёв и нейронов.
В результате была сформирована модель из 5 скрытых слоёв, с количеством нейронов 128/128/128/128/128. Однако такая модель не позволяла получить более 326 очков.
Модель персептрона с 5 скрытыми слоями и количеством нейронов 128/256/512/256/128 показала наиболее эффективный результат. Итоговая модель показана на рисунке 6.
Рисунок 7 – Итоговая модель многослойного персептрона
Заключение
В статье была решена актуальная проблема контроля равновесия элементов мобильных и человекоподобных роботов. Проблема решена при помощи технологий машинного обучения, а именно использования одного из видов нейронных сетей – персептрона. Для реализации персептрона была использована библиотека tensorflowи её расширениеtflearn. Обучение сети проводилось в среде OpenAI с использованием библиотеки Gym.
В ходе тестирования различных вариантов персептрона наилучший результат был достигнут при использовании многослойного персептрона с 5 скрытыми слоями.
Разработанная нейронная сеть может быть использована в реальных системах для стабилизации подвижных частей, гашения вибрации объектов с помощью подвижных механизмов.
Список источников и литературы
Открытая библиотека машинного обучения TensorFlow [Электронный ресурс]. – Режим доступа: https://www.tensorflow.org/(дата обращения: 09.12.2018)
Открытая библиотека машинного обучения Gym.OpenAI [Электронный ресурс]. – Режим доступа: http://gym.openai.com/ (дата обращения: 09.12.2018)
Воронова Л.И., Воронов В.И. Machine Learning: Регрессионные методы интеллектуального анализа данных: учебное пособие – МТУСИ, 2017 – 81 с.
Юревич Е.И. Основы робототехники. - 4 изд. - СПб.: БХВ-Петербург, 2018.
Гаранин В.Н., Гришкевич А.А. Способ подвижного взаимодействия фрезерного инструмента с приводом механизма резания станка // Древообрабатывающая промышленность. - 2015. - С. 155-156.
Воронов В.И., Воронова Л.И., Генчель К.В. Применение параллельных алгоритмов в нейронной сети для распознавания жестового языка // Актуальные проблемы инфотелекоммуникаций в науке и образовании (АПИНО 2018). VII Международная научно-техническая и научно-методическая конференция. Сборник научных статей. В 4-х томах. Под редакцией С.В. Бачевского. – СПб.: СПбГУТИ им. проф. М.А. Бонч-Бруевича, 2018. – С. 207-212.
Воронцов К.В. Машинное обучение: электронная книга [Электронный ресурс]. – Режим доступа: http://www.intuit.ru/goods_store/ebooks/9758
Essential Data Science, Machine Learning & Deep Learning Cheat Sheet [Электронныйресурс]. –Режимдоступа: https://www.kdnuggets.com/2017/09/essential-data-science-machine-learning-deep-learning-cheat-sheets.html/3 (датаобращения: 20.11.2018)
МachineLearning.ru [Электронный ресурс]. – Режим доступа: http://machinelearning.ru/wiki/index.php?title=Машинное_обучение(дата обращения: 12.11.2018).
Курс машинного обучения Andrew Ng Machine Learning [Электронный ресурс]. – Режим доступа: https://www.coursera.org/learn/machinelearning (дата обращения: 01.12.2018)
Cybernetics Wiki [Электронный ресурс]. – Режим доступа: http://ru.cybernetics.wikia.com/wiki/Обучение_без_учителя(дата обращения: 12.11.2018).
Воронова Л.И. Интеллектуальные базы данных: учебное пособие / М.: МТУСИ, 2013. -35 с.