Оригинал опубликован 30 июля 2019 года.
Грег Брокман — американский предприниматель, инвестор и разработчик ПО, один из основателей и президент компании OpenAI. Начал свою карьеру в компании Stripe в 2010 году и стал ее CTO в 2013 году. Покинул Stripe в 2015 году, чтобы стать соучредителем OpenAI, где он также взял на себя роль технического директора.
Статья кратко рассказывает о том, как президент OpenAI «вкатывался» в машинное обучение.
Содержание
Первые три года существования OpenAI я мечтал стать экспертом в области машинного обучения, но мало продвигался к этой цели. За последние девять месяцев я наконец-то перешел к практической работе в области машинного обучения. Это было трудно, но не невозможно, и я думаю, что большинство людей, которые хорошо программируют и знают (или готовы изучать) математику, тоже могут это сделать. Существует множество онлайн-курсов для самостоятельного изучения технической стороны (тык, тык, тык и тык), и то, что оказалось моим самым большим препятствием, было ментальным барьером — смириться с тем, что я снова новичок.
Ранние дни
Основополагающий принцип OpenAI заключается в том, что мы одинаково ценим исследования и инженерные разработки — наша цель заключается в создании работающих систем, решающих ранее невозможные задачи, поэтому нам нужны и те, и другие. (На самом деле, наша команда на 25 % состоит из людей, которые в основном используют навыки работы с программным обеспечением, на 25 % — навыки машинного обучения, и на 50 % — гибрид этих двух направлений). Поэтому с первого дня работы в OpenAI мои навыки работы с программным обеспечением были постоянно востребованы, и я все откладывал приобретение нужных мне навыков машинного обучения.
После того как я помог создать OpenAI Gym, меня позвали работать над Universe. А когда работа над Universe подошла к концу, мы решили начать работу над Dota — и нам нужен был человек, который превратил бы игру в среду обучения с подкреплением, прежде чем приступать к машинному обучению.
Dota
Превращение такой сложной игры в исследовательскую среду без доступа к исходному коду было потрясающей работой (тык и тык), и волнение команды каждый раз, когда я преодолевал новое препятствие, вызывало глубокое одобрение. Я понял, как вырваться из песочницы Lua, LD_PRELOAD в GRPC-сервере Go, чтобы программно управлять игрой, инкрементально сбрасывать все состояние игры в Protobuf, а также создать библиотеку Python и абстракции с будущей совместимостью для множества различных мультиагентных конфигураций, которые мы, возможно, захотим использовать.
Но я чувствовал себя наполовину слепым. В Stripe, хотя я и тяготел к инфраструктурным решениям, я мог вносить изменения в любом месте стека, поскольку досконально знал код продукта. В Dota я был вынужден смотреть на все проблемы через призму программного обеспечения, что иногда означало, что я пытался решить сложные проблемы, которых можно было избежать, просто сделав машинное обучение немного по-другому.
Я хотел быть похожим на моих товарищей по команде Якуба Пахоцкого и Шимона Сидора, которые совершили основной прорыв, обеспечивший работу нашего бота Dota. Они поставили под сомнение общепринятое в OpenAI мнение о том, что алгоритмы усиления не масштабируются. Они написали распределенный фреймворк для обучения с подкреплением под названием Rapid и масштабировали его по экспоненте каждые две недели или около того, и мы никогда не упирались в стену. Я хотел иметь возможность внести такой же важный вклад, как этот, объединив навыки работы с программным обеспечением и машинным обучением.
В июле 2017 года казалось, что у меня появился шанс. Программная инфраструктура была стабильной, и я начал работу над проектом по машинному обучению. Моя цель состояла в том, чтобы использовать клонирование поведения для обучения нейронной сети на основе данных обучения человека. Но я не был готов к тому, что буду чувствовать себя новичком.
Меня постоянно расстраивали мелкие детали рабочего процесса, из-за которых я не был уверен в прогрессе, например, я не мог точно определить, какой код использовался в том или ином эксперименте, или понимал, что мне нужно сравнить с результатом прошлой недели, который я не успел должным образом заархивировать. Что еще хуже, я постоянно обнаруживал мелкие ошибки, которые все время портили мои результаты.
Я не чувствовал уверенности в своей работе, но, что еще хуже, это делали другие люди. Люди упоминали о том, как сложно клонировать поведение на основе человеческих данных. Я всегда старался поправить их, указывая на то, что я новичок, и это, вероятно, больше говорит о моих способностях, чем о проблеме.
Когда мой код попал в бот, Цзе Танг использовал его в качестве отправной точки для блокировки крипов, которую он затем доработал с помощью обучения с усилением. Но вскоре Цзе понял, как добиться лучших результатов без использования моего кода, и мне нечем было похвастаться за свои усилия.
Я больше не пробовал использовать машинное обучение в проекте Dota.
Перерыв
После того как мы проиграли две игры в The International в 2018 году, большинство наблюдателей решили, что мы исчерпали все возможности нашего подхода. Но мы знали по нашим показателям, что находимся на грани успеха и в основном нуждаемся в дополнительном обучении. Это означало, что требования к моему времени ослабли, и в ноябре 2018 года я почувствовал, что у меня есть возможность рискнуть, выделив три месяца своего времени.
Лучше всего я учусь, когда у меня в голове есть что-то конкретное, что я хочу построить. Я решил попробовать создать чатбота. Я начал самостоятельно изучать учебный план, который мы разработали для нашей программы Fellows, выбирая только те модули, которые имеют отношение к NLP. Например, я написал и обучил языковую модель LSTM, а затем модель на основе трансформатора. Я также изучал такие темы, как теория информации, и прочитал множество статей, вникая в каждую строчку, пока не усвоил ее полностью.
Работа шла медленно, но в этот раз я ожидал этого. Я не испытывал состояния потока. Мне вспомнилось, как я чувствовал себя, когда только начинал программировать, и я все время думал о том, сколько лет ушло на то, чтобы достичь ощущения мастерства. Честно говоря, я не был уверен, что когда-нибудь стану хорошим специалистом в машинном обучении. Но я продолжал упорствовать, потому что… ну, честно говоря, потому что я не хотел ограничиваться пониманием только одной части своих проектов. Я хотел видеть всю картину целиком.
Моя личная жизнь также была важным фактором, который помогал мне держаться. Я начал отношения с человеком, который дал мне понять, что ничего страшного не случится, если я потерплю неудачу. Наш первый совместный отпускной сезон я провел, бьясь головой о стену машинного обучения, но она была рядом со мной, независимо от того, сколько запланированных мероприятий пришлось пропустить.
Одним из важных концептуальных шагов было преодоление барьера, который я не решался сделать в Dota: внести существенные изменения в чужой код машинного обучения. Я доработал GPT-1 на найденных мною наборах данных чатов и внес небольшое изменение, добавив свой собственный код выборки. Но он стал настолько болезненно медленным, когда я пытался генерировать более длинные сообщения, что мое разочарование пересилило страх, и я внедрил GPU-кэширование — изменение, которое затронуло всю модель.
Мне пришлось попробовать несколько раз, отбрасывая изменения, поскольку они превышали сложность, которую я мог удержать в голове. Когда через несколько дней у меня все заработало, я понял, что научился тому, что раньше считал невозможным: Теперь я понимал, как была собрана вся модель, вплоть до мелких стилистических деталей, например, как кодовая база элегантно обрабатывает диапазоны переменных TensorFlow.
Пересобрался
После трех месяцев самостоятельного обучения я почувствовал, что готов к работе над реальным проектом. Это также был первый момент, когда я почувствовал, что могу воспользоваться услугами многих экспертов, которые есть в OpenAI, и я был рад, когда Якуб и мой сооснователь Илья Суцкевер согласились меня проконсультировать.
Мы начали получать очень интересные результаты, и Якуб и Шимон присоединились к проекту на постоянной основе. Я испытываю гордость каждый раз, когда вижу коммит от них в кодовой базе машинного обучения, которую я начал.
Я начинаю чувствовать себя компетентным, хотя еще не достиг мастерства. Я вижу, как это отражается на количестве часов, которые я могу мотивировать себя тратить на работу по машинному обучению — сейчас я нахожусь примерно в 75 % от того количества часов кодирования, которое было исторически.
Но впервые я чувствую, что нахожусь на траектории. Поначалу я был ошеломлен кажущимся бесконечным потоком новых концепций машинного обучения. В течение первых шести месяцев я понял, что могу добиться прогресса без постоянного изучения совершенно новых примитивов. Мне все еще нужно получить больше опыта в освоении многих навыков, таких как инициализация сети или настройка графика скорости обучения, но теперь эта работа кажется постепенной, а не потенциально невозможной.
Из наших программ Fellows и Scholars я знал, что инженеры-программисты, имеющие прочные основы линейной алгебры и теории вероятности, могут стать инженерами машинного обучения всего за несколько месяцев самостоятельного обучения. Но я как-то убедил себя, что я — исключение и не могу учиться. Но я ошибался — даже находясь в центре OpenAI, я не смог перейти на новый уровень, потому что не хотел снова становиться новичком.
Вероятно, вы тоже не исключение. Если вы хотите стать практиком глубокого обучения, вы можете это сделать. Вам нужно дать себе пространство и время для неудач. Если вы научитесь на достаточном количестве неудач, вы добьетесь успеха — и, вероятно, это займет гораздо меньше времени, чем вы ожидаете.
В какой-то момент становится важно окружить себя уже существующими экспертами. И здесь мне невероятно повезло. Если вы отличный инженер-программист, который достиг этого момента, имейте в виду, что у вас есть возможность оказаться в окружении таких же людей, как и я — подайте заявку в OpenAI!
Другие переводы
Раз вы дочитали до конца, буду рад видеть вас в своём тг канале. Aктивно выжимки из эссе Пола Грэма (находятся по #пг) Ежедневно по 1-2. Так же пишу про мой EdTech стартап и разные технические материалы, которые нахожу в процессе работы. Силой никого не тяну 🙂