Исследователи из Колумбийского и Лихайского университетов разработали систему для тестирования алгоритмов глубокого обучения. С помощью этой системы разработчики проверили нейросети, в том числе управляющие беспилотными автомобилями, и обнаружили в них тысячи ошибок, проявляющихся в необычных для нейросетей условиях. Разработка будет представлена на конференции SOSP 2017 в Китае 29 октября.
Для автоматизации сложных задач, таких как управление автомобилем, все чаще используется не фиксированные алгоритмы с набором заранее определенных правил, а машинное обучение. Этот подход требует времени и тренировок на больших наборах данных, но в результате позволяет получить программу, способную выполнять сложные задачи — например, обнаружение неявных закономерностей или распознавание образов.
Несмотря на преимущества, этот подход имеет явный недостаток: устройство алгоритма, а тем более системы из нескольких алгоритмов разных типов, может быть настолько сложным, что даже его разработчикам практически невозможно понять, из-за чего именно возникла та или иная ошибка и как ее исправить.
Для тестирования обычных алгоритмов используются разные методы, в том числе и дифференцированное тестирование, при котором разным программам, выполняющим одну и ту же функцию дают одни и те же входные данные, и, сравнивая результат, разработчики могут обнаружить ошибку. В своей разработке американские исследователи решили использовать похожий подход. Они решили сравнивать аналогичные по функциям нейросети, давая им одинаковые данные, которые выходят за рамки обычных условий. К примеру, в случае с беспилотными автомобилями это может быть слишком темное освещение при слишком быстрой скорости движения.
Поскольку в случае с нейросетями большая часть правил не пишется программистами, а формируется в процессе тренировки, исследователи решили ввести для их тестирования аналог понятия покрытия кода — метрики, которая показывает, какая доля кода программы была выполнена в процессе тестирования. Измерение покрытия кода используется для совершенствования тестов, чтобы они охватывали максимальный объем кода. Новую метрику исследователи назвали покрытием нейронов.
Разработчики протестировали свой алгоритм под названием DeepXplore с помощью больших наборов данных для тренировки алгоритмов разного назначения, например, данные проекта Udacity self-driving car challenge, предназначенного для обучения и сравнения алгоритмов для беспилотных автомобилей, а также наборов данных для тренировки программ, обнаруживающих вредоносное программное обеспечение. Таким образом они смогли обнаружить несколько тысяч ошибок в общедоступных алгоритмах. К примеру, исследователи сделали две версии фотографии резкого поворота на дороге, в которых отличалась только освещенность. В случае с плохой освещенностью управляющий автомобилем алгоритм неправильно оценил обстановку, и неожиданно принял решение свернуть в сторону металлического ограждения дороги.
Особенность DeepXplore заключается еще и в том, что он может генерировать наиболее сложные для тестируемого алгоритма входные данные. Разработчики предлагают использовать это для тренировки поведения алгоритмов в сложных и редко встречающихся условиях. Разработанное ими программное обеспечение опубликовано на GitHub.
В 2015 году американские исследователи создали алгоритм, который умеет самостоятельно исправлять ошибки в исходном коде программ. А недавно австралийские исследователи разработали метод исправления «квантовых ошибок» с помощью машинного обучения. Исследователи надеются, что это позволит увеличить время жизни кубитов квантовых компьютеров и увеличить надежность систем на их основе.
Григорий Копиев
Что такое опенсорс и почему он важен для IT-индустрии
Наверняка вам доводилось слышать выражение «опенсорс». Может быть, вы даже понимаете, что под этим термином скрывается «программное обеспечение с открытым исходным кодом». Но какие возможности такая открытость дает разработчикам и почему может быть выгодна обыкновенным пользователям? Рассказываем о разработке и значимости опенсорс-проектов.