Исследователи подразделения Google Brain, Сандийской национальной лаборатории и кафедры информатики Университета Нью-Мексико внедрили в обычное ПО «усиленную» форму машинного обучения (reinforcement learning) — оно применяется для обучения роботов навыкам ориентирования на незнакомой им территории. Труд ученых «Resilient Computing with Reinforcement Learning on a Dynamical System: Case Study in Sorting» призван опытным путем установить, можно ли создать такое ПО, которое бы не боялось непредсказуемых ситуаций.

Это уже не первые опыты подобного рода. В начале этого года вышла работа, где описывались алгоритмы обучения робототехники и беспилотных летательных аппаратов для навигации по пересеченной местности и в воздухе. По мнению Александры Фэуст из Google Brain, большинство программных продуктов разрабатывалось по классической схеме и не обладает устойчивостью при возникновении внештатных ситуаций, например, при нарушении работы ОЗУ или других сбоях в работе оборудования. Другими словами, надежность работы ПО напрямую зависит от надежности аппаратных средств.

Дэвид Экли из Университета Нью-Мексико прозвал такую схему работы ПО одержимостью «CEO» (Correctness and Efficiency Only, корректность и продуктивность во главе угла). Она предполагает, что софт с четко прописанными действиями выполнит и завершит задачу, это происходит последовательно, но ровно до тех пор, пока алгоритм не столкнется с непредвиденными ошибками. По словам Экли, практика написания ПО десятилетиями фокусировалась на том, что аппаратное обеспечение должно обеспечивать надежность, тогда как роль ПО заключается в превращении алгоритмов в ценные функции

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

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

Чтобы классифицировать пакеты символов, ИИ-программа задействует марковский процесс принятия решений. По словам ученых, он превращает вычисления в «траекторию в пространстве переменных», позволяя программе выполнять сортировку через изменение «состояний» — программных переменных, которые отыскивают путь к правильно отсортированному списку элементов. Всего было протестировано два наиболее популярных способа сортировки — быстрой и сортировки пузырьком, но оба продемонстрировали недееспособность при вводе условий на отказ на уровне 5%, тогда как для RL sort они не служили существенным препятствием. Сравнительный анализ показал, что RL sort превосходит по точности классификации в массиве два других метода, действуя на порядок точнее в неблагоприятных обстоятельствах. Более того, ИИ-алгорит также более эффективен, чем классический софт поскольку требует меньше ручных манипуляций с массивом элементов.