Будущее Kirill Kazakov
5 466

Программное обеспечение 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": "Kirill Kazakov", "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": 1, "is_advertisement": false, "subsite_label": "future", "id": 38879, "is_wide": false, "is_ugc": false, "date": "Wed, 30 May 2018 09:54:16 +0300" }
{ "id": 38879, "author_id": 127882, "diff_limit": 1000, "urls": {"diff":"\/comments\/38879\/get","add":"\/comments\/38879\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/38879"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199118 }

13 комментариев 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

Ответить

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

0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Приложение-плацебо скачали
больше миллиона раз
Подписаться на push-уведомления