Философия управления движениями кибернетической системы и иерархическое управление: популярно о главном

Задача управления движением автономных систем представляет собой весьма серьезный инженерный вызов. Как заставить сложное механическое устройство выполнять задачи в трехмерном пространстве? Например, подойти к столу, взять предмет, перенести его и положить в корзину, при этом не упав и не врезавшись ни в что. Роботы компании Boston Dynamics демонстрируют впечатляющие возможности в этой области. Однако, как достичь подобных результатов в домашних условиях? Как вообще подойти к решению этой задачи и насколько она осуществима? Для успешного управления сложной системой, подобной живому существу, необходимо одновременно решать множество задач различного характера: контроль движения, обработка изображений, планирование траектории, системы избегания препятствий. Размерность такой задачи значительна и охватить её целиком весьма сложно.

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

В книге “Кибернетика или управление и связь в животном и машине” Норберт Винер пишет: “Чтобы взять карандаш, нужно на каждом шаге минимизировать степень того, в какой карандаш ещё не взят”. Если я не могу взять карандаш сам, то для того, чтобы минимизировать степень его невзятости, я просто поручу это тому, кто на это способен. Бесконечное делегирование — это тот способ с помощью которого можно делать очень сложные вещи. Если я правильно сформулировал задачу своей подсистеме, то она, решая вопрос минимизации по сформулированной мной подзадаче, автоматически будет минимизировать степень того, в какой карандаш еще не взят, даже не подозревая об истинной цели всего мероприятия.

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

Пусть у нас есть некий механизм, который необходимо научить двигаться и решать задачи по взаимодействию с объектами. Мы не требуем пока, чтобы он проявлял чудеса интеллекта. Только простые двигательные задачи. Допустим, наш автоматон получил задание положить груз, лежащий в точке А в контейнер находящийся в точке Б. Как такую задачу можно решить в терминах иерархической системы?

Если проанализировать задачу, она состоит из нескольких явно выраженных подзадач. Во первых мы должны добраться до точки А, по пути не умерев. Найти груз. Взять груз, ничего не уронив и не умерев. Переместиться в точку Б, неся груз и по пути не умерев. Найти контейнер. Положить груз в контейнер, ничего на себя не опрокинув и не умерев. Каждая из отдельных задач раскладывается на несколько подзадач. Например, чтобы взять груз, нужно переместить манипулятор (ни с чем не столкнувшись), подвести манипулятор, не деформировал груз, и крепко захватить груз.

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

Как это работает?

Введём некоторый стратегический контроллер. Перед ним поставлена задача перенести объект из точки А в точку Б. На каждом шаге алгоритма он должен оценить текущее состояние.

  • Где находится груз?
  • Может быть груз уже в точке Б? Окей. Задача выполнена.
  • Груз у меня? Тогда я должен положить груз в контейнер в точке Б.
  • Груз не у меня? Я должен взять груз. Где он? Может быть в точке А, или я его уронил. Не имеет значения, я должен взять груз.
  • Теперь я функция, которой велели взять груз. Я оцениваю состояние.
  • Я далеко от груза?
  • Да? Я попрошу контроллер позиционирования тела приблизить меня.
  • Я достаточно близко? Я попрошу систему управления манипуляторами произвести захват объекта.
  • А вот я система управления позиционированием и мне велели двигаться к точке А. Я оцениваю своё состояние.
  • Я могу продолжать движение? Как нет? Я лежу на полу? Думаю, мне стоит активировать программу восстановления вертикального положения.
  • Я могу продолжать движение? Да.
  • Я должен двигаться быстро? Если да, активирую контроллер бега и передаю ему направление.
  • Если нет, передаю направление контроллеру шага.
  • Впереди препятствие? Чуть-чуть скорректируем вектор направления, чтобы обойти препятствие стороной.
  • А вот я контроллер шага. Я смотрю своё состояние.
  • Левая нога занесена, но довольно долго висит в воздухе, её стоит смещать вниз.
  • Скорость смещения корпуса отличается от оптимальной.
  • Перерасчитаем желаемое положение выходного сустава правой ноги.
  • Левая нога может столкнуться с препятствием, сместим её чуть вправо.
  • Есть потеря равновесия? Учтём это при постановке ноги.

А вот я контроллер отдельной конечности. У меня задача простая. Обеспечить требуемое относительное положение стопы и бедра. Я оцениваю состояние, смотрю текущие положения суставов и их скорости и рассчитываю, как надо их поменять, чтобы получить требуемое, а команды эти отправляю контроллерам отдельных узлов.

И вот я система управления суставом. Всю свою сознательную жизнь я решал одну, строго одну и только одну задачу: Следил за тем, чтобы положение сустава не сбивалось относительно положения уставки. Что я делаю? Оцениваю состояние. Если положение не совпадает или скорость отлична от требуемой, я чуть-чуть поднапрягу мышцы. Я молодец!

Верите ли вы, что такая система может решить задачу?

В приведённом выше обзоре не хватает нескольких деталей. Во первых в ней неявно присутствует обработка сенсорной информации. Действительно, кто сказал, контроллеру шага, что нога находится в том состоянии, в котором она находится? Вы, кстати, обратили внимания, что в системе не задействовано никакой памяти? Есть два канала получения информации: восходящий и оценочный. Восходящий канал — это информация, которую предоставляет подсистема. Подсистема имеет некоторую оценку своего состояния и трактует его для вышестоящего уровня. Это локальная система. Канал оценки — это информация полученная из прочих источников, например в результате визуальной оценки состояния собственных конечностей. Оценочные каналы идут от внутренней модели, строящейся по результатом работы всех сенсоров системы. Это глобальная модель. Локальная модель работает быстро, но она ограничена своим уровнем понимания. Глобальная модель работает медленно, но даёт оценку на основе большего количества информации.

Системы управления можно дробить по-разному. Низкие уровни достаточно хорошо оформлены и понятны, поскольку завязаны на аппаратную часть. С высшими сложнее. Иерархия может расти вверх достаточно долго. Пусть, например, задача по переносу груза — часть задачи по переносу содержимого всего склада. А что, если складов два. Это не то, что эффективно можно решить простым масштабированием.

Пара слов про исток

Так или иначе, сверху всегда есть то, что принимает решение и вызывает нужную программу. Некий исток всего поведения. Контроллер стратегического планирования решает строго одну задачу. Максимизирует некоторый параметр, который может иметь, а может не иметь физического смысла. В нашем примере с карандашом смыслом всего было взятие карандаша, а оценка всего сущего выражалась в томительной мере неудовольствия тем простым фактом, что карандаш до сих пор не взят. Но, программа взятия карандаша может быть инициирована другой системой, что выражает лютое негодование тем фактом, что картина до сих пор не нарисована. Что за функция будет поставлена во главу угла — это вопрос применения системы. Потенциально система неограниченно растёт вверх, на каждом уровне решая всё более и более абстрактные задачи, но такое построение ограничено соображениями обозримости. Рано или поздно встаёт вопрос о некоем более разумном планировании, то есть о специальной системе, которая целенаправленно занимается планированием и генерацией цепочек подзадач. Эта система должна быть близка к истоку.

Исток поведения неизменен. Есть два способа заставить систему работать дольше одного цикла — первый связан с изменением среды. Если счастье робота определяется фактом наличия груза в контейнере, то до тех пор, пока груз на месте, робот не будет делать ничего. Но если груз выкинуть из контейнера, он пойдёт его возвращать. Другой способ в правильном формировании истока. Если функция хорошечности всё время падает, роботу придётся постоянно совершать действия по её повышению.

В книге “Автономный искусственный интеллект (Адаптивные и интеллектуальные системы)” за авторством профессора Жданова А.А., максимизируемый (минимизируемый) системой параметр называется оценкой хорошечности, а исток поведения хорошометром. Книга посвящена обучению и автономному поведению. Материал, изложенный в ней можно использовать, чтобы внести мотив обучения в автоматона. Хотя может показаться, что концепция обучаемых машин противна тем механистическим констрактам, о которых идёт речь в этой статье, принципы, на которых строятся эти системы отлично стыкуются. Можно даже сказать, что это та же самая система. Вопросы о том, как и когда использовать обучение, и когда этого делать не нужно, я постарался прояснить в ниже. В ней показано, что кибернетическая система должна разворачивать функции обучения поверх некоторой наперёд заданной структуры, а структуру эту нужно разработать настолько тщательно, насколько это вообще возможно. Чем больше высокоуровневых функций будет у адаптивных механизмов к моменту начала обучения, тем проще ему будет учиться, и тем меньшая размерность будет у задачи обработки информации.

Реиспользуемость и план работы

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

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

Как и когда использовать обучение, и когда этого делать не нужно

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

Говорят, что глубокое обучение, генетические алгоритмы и прочие новомодные дисциплины могут решать задачи любой сложности. И по видимому это действительно так. Если конечно у вас есть очень много времени и все данные этого мира.

Один из наиболее фундаментальных методов машинного обучения — генетический алгоритм. Как вы, несомненно знаете, великий генетический алгоритм матери природы работал два миллиарда лет, прежде чем появилась многоклеточная жизнь. Восемьсот миллионов лет спустя генетический алгоритм построил вид, представитель которого набирает данный текст. Есть ли у нас терпение на три миллиарда лет вычислительных экспериментов и можем ли мы позволить себе пойти этим путём?

Кибернетический корень зла

Кибернетика — сложная междисциплинарная область знаний. В своей книге “Кибернетика, или управление и связь в животном и машине” Норберт Винер указывает на то, что работы по кибернетике требует понимания биологии, инженерии, математики и информатики.

“Если трудность физиологической проблемы по существу математическая, то десять не сведущих в математике физиологов сделают не больше, чем один не сведущий в математике физиолог”, — пишет Винер.

В кибернетике всё переплетено. Ответ на вопрос, возникший в одной области знаний лежит в другой. Кибернетика совмещает несовместимое, впихивает невпихуемое и находит общность там, где на первый взгляд общности быть не может. Сказано “Что могут делить кусок кремния и комок биологической слизи?”. Ответ на этот вопрос даёт кибернетика.

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

Не те нейросети. Всё ли нейросети учатся?

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

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

Нейросеть — это вычислительная архитектура. Такая архитектура, какую смогла создать эволюция. Строго говоря, нейросеть — это, не единственный известный природе вычислитель. Задолго до появления нейросетей живые существа обрабатывали информацию с помощью химических веществ. Но химические вычисления имеют малую производительность и множество недостатков. И тогда великий генетический алгоритм создал нервную систему. Это эволюционное изобретение во много раз ускорило обработку информации. Внезапно всё стало происходить очень быстро. Если ты хочешь поспевать за миром и отслеживать переменные среды в реальном времени, ты вынужден ставить себе вычислитель. И единственная архитектура, которая тебе доступна — нейронная сеть.

У живого нет выбора. Нет другой вычислительной системы, которая была бы сопоставима по параметрам. Люди используют центральные процессоры и процессоры параллельных вычислений для решения алгоритмических задач и даже эмулируют нейросети их мощностями. Но у эволюции нет ЦПУ! Что удивительного в том, что живые организмы эмулируют возможности ЦПУ на нейросетях? То, что в природе какая-то задача решается нейросетью не означает, что такое решение оптимально. Просто у эволюции руки связаны теми возможностями, которые были получены методом малых изменений.

Считается, что одна из основных задач нервной системы — обучение. Известно, что обучение позволяет увеличить эффективность организма. Но можно ли без него обойтись? У эволюции нет задачи создать что-либо интеллектуальное. Эволюция создаёт стабильное. Обучение предполагает изменения, а изменения, если они работают недостаточно хорошо, не увеличивают стабильность, а напротив ухудшают её. Обучение — обоюдоострый меч. Нет ничего удивительного в том, что многие живые системы отказываются от обучения в пользу выточенных эволюцией жестко заданных нейронных сетей. Эти нейросети не учатся. Обучение — сложная необязательная эволюционная адаптация. Необязательные адаптации затратны и не всегда полезны. Нейросети стали нужны, когда выросла потребность в быстрой реакции. А обучение? Раньше было не нужно. Многим видам не нужно и сейчас.

А вот высшие многоклеточные решили, что им нужно учится. Они имеют развитые и разнородные системы обработки информации и возможность формировать новые навыки за счет изменения структуры специальных отделов мозга. Но все ли их функции строятся на обучении? Ответ — нет. Строго говоря, большая часть функций вообще не предполагает никакого обучения и даже никакой настройки. В мозге человека есть зоны, ответственные за обучение, обработку информации и построение новых навыков. Однако эти зоны работают поверх наперёд построенного и неизменного механизма. На низших уровнях организации нейронная сеть, ответственная за зрение не обучается, сеть ответственная за дыхание не обучается, сеть ответственная за слух не обучается, и сеть ответственная за двигательные функции не обучается тоже. У младенца все эти системы предсозданы, преднастроены и ждут только, пока системы верхнего уровня научатся пользоваться предоставляемой ими просеянной рафинированной информацией и зафильтрованными, безопасными выскоуровневыми методами управления. Если бы высшие нервные функции могли дотянутся до отдельных актуаторов, индивид бы умер сиюмоментно. Эволюция не допускает доступа гибких, способных к изменению систем к прямому контролю актуаторов, поскольку ошибка такой системы, а такая система ошибается несравнимо чаще автомата, может мгновенно убить индивида. Со временем ошибку обучения можно исправить, но только в том случае, если автомат предотвратил худшее.

Вездесущий автомат

Если одноклеточное — термодинамический автомат, то человек — это интеллектуальная обучаемая система, построенная поверх термодинамического автомата.

Живое не учится с нуля. Обучение работает поверх преднастроенных, отработанных эволюцией механизмов. Вычленять базовые фичи из изображения методами обучения с нуля — сложная и неблагодарная задача. Именно поэтому вместо того, чтобы скармливать нейросетям пиксели, их сначала пропускают через построенные инженерами свёрточные сети. Нейросеть смогла бы сформировать свёрточную сеть сама, рано или поздно, но какой в этом смысл, если свёрточную сеть можно разметить и построить алгоритмически и математически строго. Так делают с изображениями и так же действуют при анализе речи, когда понижают размерность, сворачивая спектр по немногочисленным окнам.

Но раз такое дело, может обучение вообще не нужно?

Обучение хорошо показывает себя на задачах, которые не поддаются формализации. Крайне сложно построить алгоритм, отличающий кошечку от собачки. Когда мы выделили базовые фичи из изображения, мы можем послать их выше. Обучение позволит решить задачу классификации и решить её хорошо. Что значит хорошо? Решить хорошо значит решить не хуже или лучше, чем прочими методами. Мы не можем отличить кошку от собаки без обучения! Наши учёные и инженеры не обладают математическим аппаратом, позволяющим отличить кошку от собаки, кроме как методами обучения, то есть, используя статистику и оптимизацию. Обучение нужно там, где среда быстро меняется, а размерность задачи не предполагает единственного решения. Обучение работает с контекстом и позволяет выбрать один вариант из бесконечного числа возможных.

Но как насчёт задач, где инженеры могут, а решение имеет явно выраженный оптимум?

Можно видеть работы, где мы пытаемся решать задачи управления движением примерно так же, как по началу пытались решать задачи обработки изображения. Давайте заведём все мышцы и рецепторы на обучаемую нейросеть и посмотрим, что получится. Получится плохо! Обучение несомненно способно строить системы управления движением с нуля, если у вас есть пара свободных миллионов лет.

В контексте задач управления движением, обучение необходимо при формировании сложных программ поведения, которые иначе просто невозможно построить, поскольку их невозможно формализовать, но на уровне простейших движений обучение ненадёжно. Нельзя доверить обучению базовые программы управления движением без того чтобы мириться с девяносто девяти процентной вероятностью получить несбалансированный результат. Чтобы получить надёжную систему, всё, что может делать автомат, должен делать автомат. Базовые паттерны управления движением не меняются никогда. Все четвероногие сотни миллионов лет имеют три способа перемещения — три аллюра: шаг, рысь, галоп. Всё. Других способов нет. Эти способы не меняются никогда. Эта задача изначально преднастроена. Могут меняться коэффициенты системы, период шага, могут вноситься коррективы, если одна из ног неисправна, но сам алгоритм строго зашит в головной и спинной мозг настолько тщательно, что мы, люди, за сотни тысяч лет так и не разучились махать руками при ходьбе, хотя давно не ходим на передних конечностях. Эти движения руками происходят в полном соответствии с программами всех четвероногих.

Движение — это механика. Мы знаем механику лучше, чем любую другую инженерную науку. Механика оформлена. Механика твёрдых тел завершена. Теория управления, теория оптимизации позволяют строить системы управления динамическими объектами. Для построения системы управления базовыми движениями нет смысла привлекать обучение, как нет смысла привлекать его для построения свёрточных сетей.

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

Граница необучения

В лекции посвященной двигательной системе мозга Вячеслав Дубынин [1] приводит кажущийся парадокс. Если организм получает нарушение простой системы, то вероятность её восстановления значительно меньше, чем если нарушенной окажется сложная система. В случае нарушения сложной системы нейронная сеть со временем переобучится и восстановится. Простые системы так себя не ведут.

Это не сложно понять. Есть всего один и только один способ сделать простую вещь. Этот способ заранее предразмечен и прошит. Нет смысла ставить его в зависимость от обучения. Так работает эволюция, когда создаёт стабильную форму жизни. Так поступает инженер, когда создаёт стабильно работающее изделие.

Но где же начинается потребность в обучении? Итак, обучение не повсеместно и по всей видимости разрозненно. Системы управления иерархичны и учатся независимо. Чем выше связность обучаемой системы, тем более затратно и опасно обучение и тем менее качественным может быть результат. Каждая выделенная система может иметь собственную внутреннюю систему обучения. Некоторые системы имеют очень простое обучение, которое и не обучение вовсе, а скорее, адаптивная настройка. Местные системы адаптивной настройки реализуемых на этом уровни автоматов полезны. Далеко не вся информация передаётся вышестоящим системам. Осуществление местной коррекции параметров — выгодная стратегия.

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

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

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

Биология в технике и наоборот

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

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

Автор: netricks
Источник: https://habr.com/