Программное обеспечение 2.0 Материал редакции

Конспект материала главы отдела ИИ в Tesla Андрея Карпатого о том, какими инструментами будут пользоваться разработчики в будущем.

В закладки

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

К несчастью, такое видение нейронных сетей не позволяет разглядеть главное — они представляют собой не очередной классификатор, а начало фундаментального сдвига в подходе к созданию ПО. Нейронные сети — программное обеспечение второго поколения.

Нам всем знаком традиционный стек для создания ПО 1.0, в него входят языки вроде Python и C++. В каждой строке кода программист определяет особую точку в пространстве программы, задавая её поведение.

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

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

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

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

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

  • Распознавание визуальных образов, как правило, базировалось на разработанных вручную средствах, лишь немного дополненных машинным обучением (SVM). Теперь же у нас есть механизмы, позволяющие создать гораздо более мощные программы по анализу изображений (в семье платформ ConvNet), а не так давно мы начали поиск по архитектурам.
  • Ранее распознавание речи строилось на предварительной обработке данных, смеси гауссовых распределений и скрытых марковских моделей. Сегодня же технологии речевого распознавания почти полностью работают на нейронных сетях. Тут можно вспомнить часто цитируемые слова Фредерика Йелинека: «Каждый раз, когда лингвист покидает коллектив, качество распознавания речи возрастает».
  • Исторически в синтезе речи применялось комбинирование записанных человеком фрагментов речи, сейчас же синтезаторы представляют собой массивные свёрточные нейронные сети, как например WaveNet, которая генерирует звуковой сигнал по семплам.
  • В машинном переводе нейронные сети быстро заняли доминирующее положение, заменив собой техники с опорой на статистику употребления фраз. Мои любимые алгоритмы обучаются сразу на нескольких языках, где одна модель переводит с любого языка на любой другой почти или вовсе без вмешательства человека.
  • Игры. Системы для игры в го существуют уже довольно давно, но только AlphaGo Zero, которая делает ход, опираясь исключительно на положение камней на доске, удалось стать сильнейшим игроком. Думаю, рано или поздно мы увидим нечто похожее в Dota 2 или StarCraft.
  • В робототехнике задачи традиционно разбиваются на блоки: моделирование неопределённости, восприятие, положение, планирование движения и их контроль. Задействованы при этом не промежуточные представления, а представления в явной форме. Обратного добиться пока не выходит, но исследования Калифорнийского университета в Беркли и Google подсказывают: ПО следующего поколения справится с репрезентацией кода гораздо лучше.
  • Базы данных. Более традиционные системы, не задействующие ИИ, также показывают первые признаки перемен. Так, например, обученные индексные структуры заменяют нейронными сетями основные компоненты систем по управлению данными, работая на 70% быстрее B-деревьев с оптимизированным кэшем и при этом сохраняя в памяти порядок величины.

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

Преимущества ПО второго поколения

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

  • Вычислительная гомогенность. Типичная нейронная сеть вплоть до первого порядка состоит из наслоения двух операций — умножения матриц и порогового перехода в нуле (нейроны ReLu). Существующее ПО устроено значительно сложнее и более гетерогенно, набор команд в нём значительно шире. А так как для создания ПО 2.0 потребуется описать лишь небольшое число базовых операций при помощи инструментов ПО 1.0 (например, умножение матриц), обеспечивать корректность и устойчивость кода станет гораздо проще.
  • В результате нейронные сети гораздо легче реализовать в системах на кристалле, используя, например, различные интегральные схемы (ASIC) и нейроморфные чипы. Мир изменится, когда нас полностью окружит более энергоэффективный искусственный интеллект. Так, недорогие чипы можно поставлять с уже обученными нейронной сетью, системами распознавания и синтеза речи, интегрированными в небольшой протомозг, который можно приладить к чему угодно.
  • Постоянное время выполнения. Каждый цикл прямого прохода нейронной сети выполняет одно и то же количество флопов. Такому коду не присуща изменчивость, свойственная, например, «расползающемуся» коду на C++. Конечно, вы можете использовать динамические графы, но поток выполнения всё равно ограничен. Выходит, мы почти полностью защищены от непреднамеренного попадания в бесконечный цикл.
  • Постоянное распределение памяти. В таком случае не происходит динамического выделения памяти, что снижает вероятность сбрасывания на диски и потери доступа к памяти, за которым нужно охотиться в коде.
  • Лёгкое портирование. В вычислительных системах произвольного типа последовательность умножений матрицы запустить куда легче, чем типичные двоичные системы и скрипты.
  • Гибкость. Если вам, скажем, понадобилось увеличить скорость работы кода на C++ в два раза (даже ценой снижения производительности), настроить систему по-новому будет очень нелегко. Задачу облегчит ПО следующего поколения: возьмём нашу сеть, уберём половину синапсов, заново обучим и готово — система работает в два раза быстрее и немногим хуже. Магия. Это работает и в обратном направлении — при необходимости можно добавить синапсов и заново обучить модель.
  • Модули могут соединяться в органичное целое. Программное обеспечение часто разбито на модули, которые общаются между собой через открытые функции, API или конечные точки. Однако при взаимодействии двух модулей ПО 2.0, обученных независимо, мы можем с лёгкостью применить метод обратного распространения ошибки на всю систему. Представьте, как здорово было бы, если бы ваш браузер мог автоматически переписывать низкоуровневый системный код, увеличивая эффективность загрузки веб-страниц. ПО второго поколения будет по умолчанию обрабатывать данные таким образом.
  • Наконец, что наиболее важно, нейронная сеть просто-напросто представляет собой более организованный код, чем вам или мне под силу придумать, — для большого количества направлений: как минимум это касается любых программ по обработке изображений, видео, звука и текста.

Ограничения ПО второго поколения

Разумеется, такое ПО имеет и свои недостатки. После оптимизации у нас на руках остаются огромные отлаженные сети, но о принципах их работы мы едва ли можем что-то сказать. Область применения таких разработок очень широка, и рано или поздно нам придётся выбирать между понятными нам моделями с точностью 90% и моделями, точность которых близится к 100%, но мы их не будем понимать вовсе.

Кроме того, причины сбоев ПО 2.0 могут оказаться бессознательными и досадными, или ещё хуже — сбои могут проходить незаметно, допустим, система молча принимает смещения в тренировочных данных, которые сложно проанализировать и изучить должным образом, ведь их объёмы зачастую исчисляются миллионами.

И последнее: мы всё ещё обнаруживаем новые особенности инструментов этого стека. Так, существование состязательных примеров и атак подчёркивает их неинтуитивную природу.

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

Более того, смотря под таким углом, вы тут же заметите, сколько ещё предстоит сделать. Для примера: в нынешнем наборе инструментов LLVM IR формирует средний слой между языками и архитектурой, давая возможность для оптимизации. В случае с нейронными сетями мы уже наблюдаем взрыв и в языках (PyTorch, TF, Chainer, mxnet), и в архитектуре (CPU, GPU, TPU?, IPU?). Но что насчёт IR — промежуточного представления кода? Что оно собой представляет и как его можно оптимизировать (нечто похожее на Halide)?

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

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

И наконец, в долгосрочной перспективе будущее ПО второго поколения вселяет уверенность, так как для многих становится всё более очевидным: при разработке сильного искусственного интеллекта мы будем пользоваться новыми инструментами.

А что до третьего поколения ПО, то его судьба полностью в руках ИИ.

{ "author_name": "Кирилл Казаков", "author_type": "editor", "tags": ["\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430","\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b","\u0431\u0443\u0434\u0443\u0449\u0435\u0435"], "comments": 13, "likes": 36, "favorites": 35, "is_advertisement": false, "subsite_label": "future", "id": 38879, "is_wide": false, "is_ugc": false, "date": "Wed, 30 May 2018 09:54:16 +0300", "is_special": false }
0
13 комментариев
Популярные
По порядку
Написать комментарий...
1

Кирилл, спасибо за конспект! Жутковато.

Неужели традиционная профессия программиста отмирает? Как когда-то умение писать остроумный машинный код для определенных ЭВМ (их заменили оптимизирующие кроссплатформенные компиляторы)?

Ответить
1

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

Ответить
1

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

А что до довода, дескать, нейросеть еще надо написать, так с этой задачей 90% существующих программистов не справятся (если мы про реализацию архитектуры), т.к. для этого хорошая математическая подготовка нужна.

Ответить
1

Вы гуманитарий и фантазер. Сейчас тоже есть конструкторы сайтов и цмс. Wix, WP и другие. И что. Все сайты в мире разрабатывают на таких платформах? Нет. 99% разработанных на них сайтов -- шлак и шаблонный мусор. Для более менее качественной кастомтзации уже нужен дизайнер, верстальщик, программист фронта и бэка. Так же и ваш воображаемый ИИ может и где-то в далёком будущем во времена межпланетных путешествий и колонизаций и будет самостоятельно создавать программы, но на наш век, для нормальных уникальных программ и сервисов программисты необходимы.

Ответить
0

А ты отстал от жизни … лет на 10 ;-)

Ответить
2

Да, да. Ничего что я занимаюсь разработкой ПО последние 15 лет (коммерческой и для международных клиентов). А ты лишь в таких статьях про это читаешь. Ты мне расскажи, как вот ИИ сам решит и сделает такой сайт как Букинг? А? Где сотни интеграций с другими системами (курсы валют, платежные системы, отели, туроператоры и т.п.). Давай, еще расскажи, как ИИ проведет А-Б тесты с целью выявления прибыльных пользовательских сценариев. Еще потом добавь, как он по SEO адаптирует элементы шаблонов. И, главное, ответь, откуда в ИИ будет задача "сделать сайт Букинг с таким-то функционалом"?

Ответить
0

Да, да Ну давай померяемся ;-) Ничего, что я первую программу написал 30 лет назад. Когда ты то и читать не умел

Учи математику в ней все ответы на твои вопросы (и про букинг и пр)

Ответить
0

первую программу я написал в 16 лет

Ответить
0

Слишком поздно ;-) но лучше поздно, чем никогда

Ответить
0

Программа программе рознь. Мало ли что ты там написал.

Вопрос:
1) ИИ -- это ведь не магия, а ПО.
2) Откуда у ИИ постановка задач и подзадач?

Неужели ответы:
1) ПО само себя пишет.
2) ПО само анализирует окружающий мир.

А?

Ответить
1

Ссылку подправьте на слово "атак".

Ответить
1

Глава отдела ИИ в Tesla Андрей Карпатый!

Молодец, приятно что славяне делают великие вещи. Одну из главных фишек Tesla

Ответить

Комментарий удален

Прямой эфир