Connect with us

Статьи

Как работает Netflix: что происходит, когда вы нажимаете кнопку Play

Как Netflix удалось создать настолько стабильную и быструю систему для миллионов пользователей по всему миру? Разработчик Маюх Наир рассказал об архитектуре сервиса и пути видео от компании-производителя к пользователю.

Анна Гуляева

Опубликовано

/

     
     

Как Netflix удалось создать настолько стабильную и быструю систему для миллионов пользователей по всему миру? Разработчик Маюх Наир рассказал об архитектуре сервиса и пути видео от компании-производителя к пользователю. AppTractor предлагает вам перевод его статьи. 

Не так давно вышел пятый сезон “Карточного домика”, который положил конец долгим и беспощадным приключениям американского политика. Марафон просмотра для них начать очень просто: нужно только дотянуться до устройства или пульта, открыть приложение Netflix и нажать Play. Просто, быстро и молниеносно.

Но механизм работы Netflix гораздо сложнее. Этот сервис воспроизводит около 250 миллионов часов видео в день для 98 миллионов пользователей в 190 странах. В таком масштабе совсем не просто быстро предоставлять качественный контент каждому пользователю. Такая огромная аудитория означает создание уникальной инфраструктуры, переговоры и компромиссы со многими участниками процесса: от компаний, предоставляющих контент, до интернет-провайдеров, которые имеют дело со всем трафиком Netflix.

Дейв Хан из Netflix показывает всю архитектуру сервиса на одной диаграмме.

Сотни микросервисов, один гигантский продукт

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

Но потом разработчики приложения с картами решили, что лучше будет хранить информацию о вашем местоположении в другом месте, и обновили приложение, которое теперь не хранит этот файл на вашем телефоне. Теперь LocoList не может найти файл locations.txt, и вы не можете получить эту информацию из карт. LocoList перестает работать.

Вся ваша работа над LocoList проведена впустую, потому что изменение в Картах сломало ваше приложение. Это может показаться не таким важным моментом, но в огромном сервисе вроде Netflix изменение в одной части не только разрушит впечатления пользователей, но и приведет к тому, что другие части придется переписывать, чтобы приспособить их к этому изменению. Это называется монолитной архитектурой.

Около десяти лет назад Netflix произвел революцию, создав архитектуру микросервисов, в которой любые приложение, код и ресурсы не зависят друг от друга. Если двум приложениям нужно связаться, они используют API, конкретный набор правил, который действует для обеих программ. Разработчики могут вносить изменения в каждое приложение, если это соответствует API. И так как программы знакомы с API друг друга, обмен информацией не прекратится из-за внесенных изменений.

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

Почему архитектура микросервисов так важна для Netflix? Вот чего им удалось достичь с её помощью:

Центр хранения данных AWS во Франкфурте

Где они запускают все микросервисы?

Чтобы запустить все эти сервисы, вам нужна мощная сеть серверов. У Netflix ранее было собственное оборудование, но они поняли, что при такой скорости роста им будет сложно создавать масштабируемые системы, которые будут поддерживать их сервис. Компания приняла смелое решение избавиться от собственных серверов и переместить всё, что у них есть, в облако, то есть запустить всё на серверах другой компании, которая будет заботиться об оборудовании, пока разработчики Netflix будут писать программы и разворачивать их на серверах. Для своей инфраструктуры они выбрали Amazon Web Services.

Amazon? Компания, которая управляет Prime Video? Как Netflix может доверять всё своему конкуренту?

Что же, многие компании следуют некоторым соглашениям, по которым они работают друг для друга, конкурируя в одних и тех же категориях. Samsung, например, конкурирует с Apple в производстве телефонов, но в то же время некоторые части iPhone производятся корейской компанией. Netflix был клиентом AWS до появления Prime Video, но это не значит, что они должны враждовать друг с другом.

Оказывается, что сотрудничество Netflix и Amazon является win-win ситуацией для обеих компаний. Netflix является одним из крупнейших клиентов AWS и постоянно запрашивает максимум их возможностей, вводя инновационные способы использования серверов AWS для своих целей: запуска микросервисов, хранения фильмов и управления трафиком. AWS, в свою очередь, совершенствует системы, чтобы позволить Netflix справляться с огромной нагрузкой, и использует приобретенные знания, чтобы обслуживать тысячи других корпоративных клиентов. AWS гордится, что Netflix является их главным клиентом, а Netflix может быстро совершенствовать свои сервисы и сохранять стабильность благодаря AWS. Даже если Netflix влияет на популярность Prime Video или наоборот.

Долгий путь от съемок до экрана

В чем польза любого сервиса просмотра видео или сериалов если у него нет контента? Для Netflix получение фильмов и сериалов является долгим и сложным процессом.

  • Если сериал/фильм производится не Netflix, им приходится вести переговоры за права на показ с компаниями, распространяющими фильмы или сериалы. Это означает выплату большой суммы, чтобы получить права на трансляцию по всему миру. Может случиться так, что компания-дистрибьютор (или даже сам Netflix) могут подписывать эксклюзивные сделки с другими видеосервисами или ТВ-каналами. Это значит, что Netflix не сможет предоставлять доступ к некоторым сериалам в конкретном регионе или компании придется сдвинуть премьеру на более позднюю дату. Например, премьера пятого сезона “Карточного домика” на Среднем Востоке состоялась 30 июня, на месяц позже, чем в других 150 странах. Netflix даже пришлось выпустить забавное видео, чтобы объяснить сдвиг:

  • Хранение оригинальной цифровой копии фильма или сериала происходит на серверах AWS. Оригинальные копии обычно имеют высокое качество, и Netflix приходится обрабатывать файлы, чтобы любой мог их посмотреть.
  • Netflix работает на тысячах устройств, и каждое из них проигрывает разные форматы видео и аудио. Отдельные серверы AWS конвертируют оригинальный файл в сотни форматов, каждый из которых предназначен для конкретного типа устройства или конкретного размера экрана. Один файл будет предназначен для iPad, другой работает на телефоне Android в Full HD, ещё один на телевизоре Sony, который будет проигрывать видео в 4K c Dolby-звуком и так далее. Каждый из этих файлов может быть с разным качеством видео, чтобы их было легче загружать при плохом соединении с интернетом. Этот процесс называется транскодингом. В эти файлы добавляют специальный код, который называется DRM (digital rights management, технические средства защиты авторских прав). Это технологическое средство защиты фильмов от пиратства.
  • Приложение или сайт Netflix определяет, какое устройство вы используете для просмотра, и выбирает нужный вам файл с нужным качеством, которое зависит от скорости интернета в текущий момент.
  • Последняя часть – получение файла – наиболее критична для Netflix, потому что именно сеть доставляет видео с серверов Netflix на устройство пользователя. Если этот этап проигнорировать, то Netflix станет медленным и сложным в использовании, и это станет концом компании. Интернет – это пуповина, соединяющая Netflix и его клиентов, и компания прикладывает много усилий, чтобы за самое короткое время доставлять пользователю желаемый контент в условиях, когда миллионы сервисов борются друг с другом.

Гонка против времени

Content Delivery Network – CDN

Все операции экосистемы Netflix бесполезны, если соединение пользователя слишком медленное для передачи качественного видео. Так работает примерно всё в интернете: когда вам требуется доступ к сети, запрос отправляется вашему интернет-провайдеру. Он перенаправляет запрос к серверам сайта, которые посылают ответ, от которого зависит результат. Для Netflix и других крупных сайтов, которые передают миллионы часов видео между серверами и пользователями, для поддержания производительности требуется крупная сеть серверов. Они справляются с этой задачей при помощи сети доставки контента (CDN).

CDN берут оригинальный сайт и его содержимое и копируют данные на сотни серверов по всему миру. Например, когда вы входите в Netflix в Будапеште, вы не будете ждать ответа от главного сервера в США, а получите копию контента с ближайшего CDN-сервера. Это сильно сокращает задержку, и всё загружается очень быстро. Благодаря CDN сайты с огромным количеством пользователей вроде Google, Facebook или YouTube загружают контент очень быстро, независимо от вашего местоположения или скорости интернета.

Коробка Open Connect

Ранее Netflix использовали CDN-сети других компаний, таких гигантов, как Akamai, Level 3 и Limelight Networks. Но рост пользовательской базы привел их к необходимости доставки большего количества контента за меньшую стоимость, поэтому компания создала свою собственную CDN-сеть, Open Connect.

Здесь они не полагались на серверы AWS, а создали собственную архитектуру по всему миру. У этой сети одна цель – умно хранить контент и доставлять его пользователям. Netflix заключает договоры с интернет-провайдерами и предоставляет им красные коробки, которые вы можете видеть выше. Провайдеры связывают их со своими серверами. Эти коробки Open Connect загружают библиотеку Netflix с главных серверов в США. Если таких коробок несколько, каждая из них будет хранить контент, наиболее популярный среди пользователей в этом регионе. Тогда непопулярный фильм будет загружаться дольше, чем серия “Очень странных дел”. Когда вы подключаетесь к Netflix, ближайшая коробка Open Connect доставит вам нужный контент, и видео будут загружаться быстрее, чем если бы ваше приложение Netflix пыталось загрузить файлы с главных серверов в США.

Можно сказать, что это жесткие диски, которые хранят видео, и чем ближе они к вам, тем быстрее скачается видео. За кулисами происходит кое-что ещё: как объясняется в этом интервью, когда вы включаете сериал, Netflix обнаружит 10 ближайших коробок Open Connect с этим шоу. Ваше приложение или сайт попытается определить ближайшую из них или ту, с которой видео загрузится быстрее всего, и скачает файлы оттуда. Вот почему видео начинают проигрываться размыто, но потом становятся более резкими – в этот момент Netflix переключает сервер на тот, который предоставит вам наиболее высокое качество видео.

Итог

Вот, что происходит при нажатии кнопки Play:

  • Сотни микросервисов, маленьких независимых программ, работают вместе в большом сервисе Netflix.
  • Легальный контент, защищенный от копирования, конвертируется в файл под размер вашего экрана.
  • Серверы по всему миру создают и хранят копию файла так, чтобы ближайший к вам сервер предоставлял видео с максимальным качеством и скоростью.
  • Когда вы выбираете шоу, ваше приложение Netflix выбирает, с которого сервера оно скачает видео.
  • Так вы наслаждаетесь тактикой Фрэнка Андервуда, переживаете за жизнь коня БоДжека или боитесь технологий в историях “Черного зеркала”.

 

Анна Гуляева
Комментарии Facebook
Продолжить чтение
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Статьи

Применение инженерного подхода к собеседованиям

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

Анна Гуляева

Опубликовано

/

В последнее время я много собеседовался на позицию разработчика, и на каждом интервью я задавал два вопроса, на которые не всегда получал правильные ответы:

  1. Какова ваша цель при проведении собеседования?
  2. Как вы оцениваете достижение этой цели?

Какова ваша цель при проведении собеседования?

От некоторых рекрутеров я слышал фразу “Хм, я не совсем знаю, кого мы ищем”, но обычно многие делятся на такие категории:

  1. Найти лучшего человека.
  2. Понять, подойдет ли кандидат для компании.
  3. Оценить, как хорошо кандидат сможет справляться с той работой, на которую он хочет попасть (это довольно редкий ответ).

Менее 10% компаний сказали, что их процесс собеседования создан, чтобы оценить, насколько эффективно человек будет справляться с работой, на которую хочет устроиться. Найм “лучших” и “подходящих” людей кажется мне нелепой стратегией, основанной на предрассудках рекрутера, а не на способностях кандидата.

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

Как вы оцениваете достижение цели?

Большинство компаний отвечают, что не производят оценку. Если вы оптимизируете программу, и вашим показателем успеха является “Не знаю, я что-то изменил, и оно стало работать лучше”, то вас высмеют. Но мы применяем эту тактику к процессу собеседования. Хотя люди и говорят, что команда является самой важной частью стартапа, большинство компаний поверхностно относятся к процессу найма и не применяют инженерный подход.

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

Это лучше, чем ничего, но есть и вторая часть уравнения. Что насчет людей, которых вы не нанимаете? Люди часто говорят, что менее рискованно отвергнуть хорошего кандидата, чем нанять плохого, но я думаю, что это бессмысленно. Я постоянно слышу, что лучшие компании жаждут талантливых разработчиков и что на рынке труда их сложно найти, но те же самые компании отвергают множество людей, потому что они не там учились или они не так быстро решили тестовое задание. Даже если вы думаете, что менее рискованно сократить (и так уже маленький) пул людей, которых вы нанимаете, чем нанять неправильного человека, вам стоит быть уверенными, что вы ищете среди правильной группы людей.

Это действительно сложная проблема: если бы у вас была информация, которая бы изменила ваше мнение о кандидате, вы бы уже наняли этого человека. Несмотря на все это, проблему можно отчасти решить:

Проведите ваше собеседование на существующих сотрудниках

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

Составьте “набор для оценки”

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

У этого подхода есть несколько проблем:

  1. Он необъективен к людям, у которых нет GitHub/Twitter/блога или другого присутствия онлайн.
  2. Существует много кандидатов, которые не умеют программировать, поэтому нахождение проблем в процессе собеседования может занять время.

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

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

Заключение

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

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

Анна Гуляева
Комментарии Facebook
Продолжить чтение

Разработка

Почему не надо патентовать идею мобильного приложения

Студия AppCraft рассказала нам, стоит ли патентовать идею мобильного приложения, а если нет, то как лучше подойти к развитию своего продукта.

AppCraft

Опубликовано

/

Автор:

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

В этой статье мы тезисно перечислим причины этого не делать.

Что такое патент

Патент – это охранный документ, удостоверяющий исключительное право, авторство и приоритет изобретения, полезной модели либо промышленного образца. В случае с разработкой мобильного приложения, являющегося программным обеспечением, получить патент в России и Европе на алгоритмическую часть (непосредственно программу) не удастся: статья 52 европейской патентной конвенции прямо запрещает патентование программ для ЭВМ.

Поэтому в случае с мобильными приложениями, как правило, защищается не сам продукт, а общая идея функционирования сервиса, отражающая некоторую новизну подхода к решению той или иной задачи. Запатентовать код тоже можно, но только в некоторых юрисдикциях, например, в США или Южной Корее.

Это долго и дорого

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

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

Вы потратите минимум 50–100 тысяч рублей (если часть работы будете делать самостоятельно) и не меньше 3–4 месяцев, если делать все очень быстро.

После этого вы можете получить отказ на регистрацию от патентного бюро, потому что описание недостаточно детальное, не содержит инновационности, дублирует уже существующие патенты и т.д. Только 56% патентов регистрируется, соответственно, 44% – отклоняется.

При этом, по статистике, 97% (!) патентов генерируют прибыли меньше, чем стоимость их оформления.

Вы патентуете не то, что нужно

Практически всегда желание защитить бизнес возникает на стадии первой идеи. Как только прошло достаточно времени на обдумывание плана, сразу возникает мысль о защите еще будущего предприятия. Желание понятно, однако идея и ее реализация – всегда разные вещи.

Пол Грэм, один из известнейших предпринимателей в IT и основатель Y Combinator, говорит, что по его опыту от 70 до 100% проектов имеют разные ключевые идеи на старте и через 3 месяца операционной работы.

Так происходит из-за того, что бизнес – это решение реальных проблем. Он развивается и растет в синергии с потребностями людей, которые:

  1. вам досконально неизвестны на стадии идеи;
  2. меняются со временем;
  3. решаются так, как хочется им, а не вам.

Как только вы начнете запускать идею, с вероятностью близкой к 100% вам придется если не полностью изменить вашу задумку, то значительно ее переработать. Зачем в этом случае патентовать в самом начале то, от чего в последствие вы сами откажетесь?

Забывается главное

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

Фокусируясь на защите идеи, вы сразу же отстаете в скорости ее развития и реализации.

Патент – не единственный способ защититься

Если патент – неэффективный способ защиты бизнеса в самом его начале, то это вовсе не означает, что не нужно принимать вообще никаких оборонительных мер. В силу простоты и дешевизны можно использовать такие способы:

  • Купите домен с именем продукта. Хорошее имя дает сильный эффект, а при решении любых споров покупка вашего домена в более ранний срок, чем оформление торговой марки конкурента, решает многие вопросы.
  • Создайте группы в социальных сетях с названием проекта. Как и в случае с доменом, хорошие названия имеют и хорошие поисковые позиции, и неплохо запоминаются, и становятся недоступны конкурентам.
  • Зарегистрируйте торговую марку. Это не быстро в некоторых юрисдикциях (например, в России), но во многих странах осуществляется в течение нескольких дней и с минимальными затратами.

Итого

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

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

AppCraft
Комментарии Facebook
Продолжить чтение

Разработка

Программное обеспечение 2.0

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

Анна Гуляева

Опубликовано

/

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

“Классический стек” программного обеспечения 1.0 — это то, с чем мы уже давно знакомы, он написан на языках вроде Python, C++ и так далее. Он состоит из четких инструкций для компьютера, написанных программистами. С каждой строкой кода программист указывает определенную точку в программном поле с нужным поведением.

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

Что читать, смотреть и где учиться машинному обучению

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

ПО 2.0 не заменит ПО 1.0 (большое количество инфраструктуры 1.0 необходимо для обучения и “компиляции” кода 2.0), но оно будет выполнять большую часть задач, за которые сегодня отвечает ПО 1.0. Давайте рассмотрим некоторые примеры этого перехода:

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

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

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

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

Робототехника имеет давнюю традицию разбивать проблему на блоки восприятия, оценки поз, планирования, управления, моделирования неопределенности, используя явные, а не промежуточные представления и алгоритмы. Мы еще не совсем достигли это, но исследования в UC Berkeley и Google намекают на то, что ПО 2.0 может значительно улучшить работу всего этого кода.

Игры. Игровые программы существовали долгое время, но AlphaGo Zero (сверточная сеть, которая смотрит на состояние доски и делает ход) стала самым сильным игроком в игре. Я ожидаю, что мы увидим очень похожие результаты в других областях, например, в Dota 2 или StarCraft.

Искусственному интеллекту для игры в Го больше не нужны люди

Вы могли заметить, что множество ссылок включают работы Google. Это потому, что сейчас Google переписывает большую часть своей инфраструктуры на Код 2.0. Подход “Одна модель, чтобы править всеми” показывает, как это может выглядеть, когда статистические мощности отдельных областей объединены в одно непрерывное понимание мира.

Преимущества программного обеспечения 2.0

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

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

Проще реализуется в оборудовании. Так как набор инструкций нейронной сети относительно мал, эти сети гораздо проще воплотить в оборудовании при помощи кастомных ASIC, нейроморфных чипов и так далее. Мир изменится, когда искусственный интеллект, требующий низкой производительности, распространиться вокруг нас. То есть когда небольшие недорогие чипы получат предварительно натренированные нейронные сети, получат речевое распознавание и синтез речи WaveNet – и все это встроится в небольшой протомозг, который вы можете подсоединить к чему угодно.

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

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

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

Высокая гибкость. Если у вас есть код на C++, и кто-то хочет, чтобы вы сделали его в два раза быстрее (пусть даже в ущерб производительности, если это необходимо), было бы очень нетривиально настроить систему под новые спецификации. Однако для ПО 2.0 мы можем взять нашу сеть, удалить половину каналов, переквалифицировать — и она будет ​​работать ровно в два раза быстрее и немногим хуже. Это магия. И наоборот, если вам нужно получить больше данных или провести больше вычислений, вы можете сразу улучшить свою программу, добавив больше каналов и переквалификацировав ее.

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

Его легко изучить. Я люблю шутить, что глубокое обучение не так уж и глубоко. Это не ядерная физика, где вы должны получить PhD до того, как сделать что-то полезное. Основные концепции требуют знаний базовой линейной алгебры, вычислений, Python и некоторых лекций из курса CS231n. Конечно, некоторые интуитивные знания придут с опытом, поэтому точнее будет сказать, что к стеку ПО 2.0 легко подойти, но его непросто освоить.

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

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

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

Стек 2.0 может допускать постыдные ошибки, воспринимая предрассудки в данных для обучения, которые очень сложно обнаружить в таких больших объемах.

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

Финальные мысли

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

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

А программное обеспечение 3.0? Он будет уже полностью зависеть от этого сильного искусственного интеллекта.

 

Анна Гуляева
Комментарии Facebook
Продолжить чтение




Календарь

ноябрь

17ноя - 19Весь деньТИЛТЕХ МЕДХАК

24ноя - 26Весь деньWhat the hack?!

25нояВесь деньSmart Taler 2017

25нояВесь деньLadies Code: время технологий

30нояВесь деньSmart Cars & Roads 2017

декабрь

5дек18:30- 22:00Яндекс изнутри: глазами iOS-разработчика

8дек - 9Весь деньКубок СTF России

9дек - 10Весь деньGames Gathering 2017

9декВесь деньЛекционный день по игровой индустрии

Наша рассылка

Каждому подписавшемуся - "1 час на UI аудит": бесплатный ускоренный курс для разработчиков веб и мобильных приложений!

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Наш Facebook

Популярное

X

Спасибо!

Теперь редакторы в курсе.