Найти тему
IT. Как это работает?

Функция активации или научим робота вставать

Оглавление

Всем привет! В прошлые выпуски про нейросети мы прошлись по основам их работы и даже затронули простейший алгоритм их обучения. До этих пор на выходах сети мы ожидали какое-то конкретное решение 0 или 1, однако это сильно ограничивает ее возможности. Давайте в этот раз выйдем за рамки этих ограничений.

Поднимаем робота

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

Давайте для определенности возьмем конкретный пример из нашей повседневной жизни. С повседневностью, конечно, перебор, ибо первый ходящий робот в свободной продаже SPOT стоит около 75 тыс. долларов. Он имеет 4 лапы, по 3 электродвигателя в роли сустава в каждой (всего 12 штук).

Внешний вид ходящего робота SPOT
Внешний вид ходящего робота SPOT

Два двигателя используются для перемещения лапы в горизонтальной плоскости (x,y) и один двигатель-сустав для подъема конечности над поверхностью.

Структура программного обеспечения

Система управления роботом состоит из 2 основных частей: внутренние сервисы и наружное пользовательское программное обеспечение (ПО). Пользовательское ПО может размещаться на планшетном компьютере или даже облачном сервисе, в его задачи отнюдь не входит управление 12 двигателями-суставами. Через прикладной интерфейс пользователя (API) ПО обращается к набору функций сервисов внутри робота.

Структура программного обеспечения робота
Структура программного обеспечения робота

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

Как и в большинстве случаев, для конечного потребителя все уже готово, а значит в ближайшей перспективе ждите раздувающих от важности щеки программистов, написавших приложение поиска роботом брошенных с вечера носков. Конечно же, будет поддержка языка Python ;)

Работа, на которую потрачены годы

Все самое сложное и основное скрыто во внутренних сервисах робота. Написать программу, способную привести в действие суставы робота так, чтобы он сменил положение с лежачего на стоячее, находясь при этом на твердой горизонтальной поверхности вполне себе возможно. Однако, в жизни далеко не все так радужно и осложняющих ситуаций может быть великое множество. Может быть робот будет подниматься на песке, камнях или вообще на наклонной поверхности. Заранее все предугадать невозможно. На помощь приходит нейросеть со своей величайшей способностью к обобщению. Об этом есть немного в предыдущем выпуске.

Обученная однажды нейросеть способна выдавать решения в любых похожих ситуациях, предъявляемых ей при обучении. Вся "мышечная" память "мозга" сосредоточена в массиве весовых коэффициентов нейронов w.

Нейросеть в процессе работы находит сумму всех произведений входных воздействий x на весовые коэффициенты w. А выходная реакция сети это функция от этой посчитанной суммы.

Модель нейросети, выдающей решения на 3 электродвигателя
Модель нейросети, выдающей решения на 3 электродвигателя

На изображенном ниже графике по горизонтальной оси отложена сумма произведений, по вертикальной реакция на выходе сети. Эта реакция носит название активационной функции.

Внешний вид активационной функции
Внешний вид активационной функции

Как можно заметить, реакция теперь это не просто "да" или "нет", а любое значение из диапазона чисел. Теперь это можно использовать по назначению, даже при управлении движениями человекоподобных роботов.

Таким образом, активационная функция это функция преобразования суммы произведений в выходную реакцию сети.

Встает вопрос, почему она такой сложной формы и можно ли использовать что-то более простое? Конечно же можно, но экспонента в формулу введена не случайно, это чистой воды махинация с целью дальнейшего удобства математиков. Нужно ждать подвоха с производной этой функции ибо только экспонента в этом очень хороша. Но об этом лучше рассказать в следующем выпуске.

Давайте посмотрим, как вырабатываемые нейросетью управляющие воздействия на двигатели делают свою работу:

Робот лежит вверх лапами
Робот лежит вверх лапами

Робот повернул себя на бок
Робот повернул себя на бок

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

Робот подгибает все конечности
Робот подгибает все конечности

Робот принимает стоячее положение
Робот принимает стоячее положение

На этот раз ноль теории, зато наглядности хоть отбавляй. Впереди еще скрытые слои, более правильное обучение и генетика. Будет интересно)

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

Также не обойдите вниманием канал на YouTube. Подписки и лайки будут приятным ответом от аудитории.