Глубокие нейронные сети как следующий этап развития программного обеспечения


ИНС

Многие люди воспринимают нейронные сети как «ещё один инструмент машинного обучения». У них есть свои плюсы и минусы. Они популярны. И, разумеется, их можно использовать, чтобы выиграть соревнования по машинному обучения (Kaggle).

Однако, Andrej Karpathy (раньше — исследователь из OpenAI, сейчас — директор по ИИ в Tesla), считает, что подобный взгляд на нейронные сети — слишком поверхностен.
Рассматривать нейронные сети, как просто ещё один классификатор — это не видеть леса за деревьями.
На самом деле, современный успех нейронных сетей, представляет собой начало фундаментального сдвига в том, как мы пишем программное обеспечение. Это Software 2.0.

«Классический стек» Software 1.0 — это то, с чем мы все знакомы — это программы на Python, C++ и т.п.
Программа состоит из явных инструкций для компьютера, написанного программистом. Каждая строчка кода, написанная программистом, идентифицирует конкретную точку в программном пространстве с некоторым желаемым поведением.

С другой стороны, Software 2.0 написано в весах нейронной сети. Человек не участвует в написании этого кода, потому что весов очень много (глубокие нейронные сети могут иметь миллионы весовых коэффициентов), а кодировать непосредственно весовые коэффициенты очень сложно.
Вместо этого, мы указываем некоторые ограничения на поведение желаемой программы (например, набор данных входных и выходных параметров) и используем имеющиеся вычислительные ресурсы, для поиска программного пространства для программы, которая удовлетворяет этим ограничениям. В случае нейронных сетей, мы ограничиваем поиск непрерывным подмножеством программного пространства, в котором процесс поиска может быть выполнен с помощью обратного распространения и стохастического градиентного спуска.

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

Software 2.0 не заменит Software 1.0 (для обучения и компиляции 2.0-кода требуется серьёзная инфраструктура в виде стандартного программного обеспечения 1.0), но оно будет занимать всё более значимую часть областей, где пока ещё применяется Software 1.0.

Примеры перехода к Software 2.0

Визуальное распознавание. Раньше — состояло из получения заданных признаков (например, признаки Хаара), которые обрабатывались алгоритмами машинного обучения (например, SVM). Сейчас — широко применяются глубокие нейронные сети (особенно, свёрточные сети), которые самостоятельно формируют признаки в процессе обучения.

Распознавание речи. Раньше — выполнялось большое количество предварительной обработки сигнала, модели гауссовой смеси и скрытых марковских моделей. Сейчас — используется только нейронные сети.

Синтез речи. Раньше — использовались различные механизмы сшивания. Сейчас — крупные нейронные сети (например, WaveNet), которые на выходе генерируют аудиосигнал.

Машинный перевод. Раньше — использовались подходы на основе статистических методов. Сейчас — доминирует использование нейронных сетей. Применяются архитектуры, обучаемые многоязычному переводу, где одна модель переводит с любого исходного языка на любой целевой язык.
Пример: переход Google Translate

Робототехника. Раньше — была традиция разбивать проблему на блоки: восприятия, оценки позы, планирования, управления, моделирования и т.д., используя явное представление и алгоритмы над промежуточными представлениями. Сейчас — идут исследования в UC Berkeley и Google, которые обнадёживают, что Software 2.0 сможет лучше заменить старый подход.

Игры. Раньше — стандартные игровые программы. Сейчас — появилась AlphaGo Zero (свёрточная нейронная сеть, которая смотрит на сырую картинку игровой доски и делает свой ход), которая стала самым сильным игроком в игру Го. Скоро, мы увидим похожие результаты и в других играх. Например, DOTA 2 или StarCraft.

Очень много исследований по использованию ИИ и нейронных сетей, выполняется в компании Google. Это связано с тем, что именно Google, сейчас, переносит начинку своих сервисов на Software 2.0. «Одна модель» (One Model To Learn Them All) даёт первое представление того, как может выглядеть, объединение сил представлений отдельных доменов для единого понимания мира.

Преимущества Software 2.0

Разумеется, возникает вопрос: «Почему мы переносим сложные программы на стек Software 2.0?» На этот вопрос, есть простой ответ: «модели просто лучше работают».
Однако, есть и другие причины. Перечислим некоторые преимущества Software 2.0 (глубокие нейронные сети), по сравнению с Software 1.0 (промышленный код на C++).

Вычислительная однородность. Типичная нейронная сеть, в первом приближении, состоит из выполнения всего двух операций: матричного умножения и порогового преобразования (ReLU). Сравните это с набором инструкций классического программного обеспечения — более сложным и разнообразным.
Так как нужно реализовать Software 1.0 для выполнения небольшого количества основных вычислительных примитивов (матричное умножение), то легче реализовать гарантированную правильность выполнения и производительность кода.

Простая реализация в виде специализированных микросхем. Следствием небольшого количества набора команд нейронной сети, становится упрощение реализации этих сетей в виде специализированных микросхем (пользовательские ASIC, нейроморфные чипы и т. д.). Мир изменится, когда повсеместно будут использоваться низкопотребляющие интеллектуальные системы. Например, маленькие недорогие микросхемы поставляются с предварительно обученной свёрточной нейронной сетью для распознавания речи и нейронной сетью для синтеза речи (WaveNet) — объединённые вместе в небольшой «мозговой модуль», который можно будет использовать где угодно.

Постоянное время работы. Каждая итерация прохода типичной нейронной сети, требует одинаковое число вычислительных операций (FLOPS). Разумеется, возможна изменчивость, связанная с разными путями выполнения кодовой базы на C++, но поток выполнения, как правило, значительно ограничен. Таким образом, мы почти гарантированно никогда не оказываемся в непреднамеренных бесконечных циклах.

Постоянное использование памяти. Отсутствует динамически распределенная память, поэтому снижена вероятность утечки памяти.

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

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

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

Простота использования. Есть такая шутка: «глубокое обучение неглубоко». Это не ядерная физика и вам не нужно иметь учёную степень, чтобы сделать что-нибудь полезное. Требуются знания: основных понятий базовой линейной алгебры, Python и лекции из CS231n. Разумеется, ещё потребуется опыт и интуиция, которые можно получить со временем, поэтому можно утверждать, что стек Software 2.0 легко начать использовать, но трудно освоить.

Лучше чем что-либо. Самое главное, нейронная сеть работает лучше, чем всё, что было придумано раньше. По крайней мере, в областях связаных с распознаванием изображений, видео, речи, текстов.

Ограничения Software 2.0

Стек Software 2.0, разумеется, имеет свои недостатки. После оптимизации, мы получаем большие сети, которые хорошо работают, но очень сложно сказать, как они это делают. Во многих областях применения мы будем иметь возможность выбора: либо модель которую мы понимаем и которая работает с 90% точностью, либо модель, которую мы не понимаем, но которая работает с 99% точностью.

Стек Software 2.0 может потерпеть неудачу самым неинтуитивным и неловким образом, или, что ещё хуже, он может «тихо провалиться», например, подстроившись под тренировочные данные, а это очень трудно правильно проанализировать и проконтролировать.

Наконец, мы всё ещё находим некоторые специфические свойства этого стека. Например, целенаправленные атаки, направленные на дискредитацию систем распознавания, подчеркивают неинтуитивный характер этого стека.

Заключение

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

В долгосрочной перспективе, будущее Software 2.0 видится очень многообещающим, потому что многие понимают, что разработка Сильного ИИ (AGI — Artificial general intelligence), будет вестись при помощи Software 2.0.

А Software 3.0? Вероятно, будет полностью соответствовать Сильному ИИ.

Будущее глубинного обучения

Прогноз будущего глубинного обучения от Francois Chollet (автор Keras).
* Модели приблизятся к компьютерным программам общего предназначения
* Появятся новые формы обучения, которые позволят моделям отойти просто от дифференцируемых преобразований.
* Модели будут требовать меньшего участия разработчика
* мета-обучаемые системы на основе повторно используемых и модульных подпрограмм

… программный синтез, в частности, нейронный программный синтез

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

Рекомендую к прочтению его же отличную статью о том, почему прогнозы о появлении супер-ИИ не соответствуют действительности:
The impossibility of intelligence explosion.

Ссылки
Software 2.0
The limitations of deep learning
The future of deep learning
CS231n: Convolutional Neural Networks for Visual Recognition.

По теме
Будущее глубокого обучения
Проблемы применения машинного обучения для решения реальных задач

Нейронная сеть
Нейронная сеть — введение
Принцип обучения многослойной нейронной сети с помощью алгоритма обратного распространения
Пример работы самоорганизующейся инкрементной нейронной сети SOINN

Автор: Vladimir (noonv), 2017

Эксклюзивно для robocraft.ru
копирование на другие ресурсы и публикация
без разрешения автора запрещены.


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение