Я не смог воспроизвести собственный лучший результат

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

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

Результат, который я не смог вернуть

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

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

Результат, который нельзя воспроизвести, — это не результат

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

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

Скрытое состояние, которое делает вещи невоспроизводимыми

Чего я не сумел оценить — это сколько невидимых вещей тихо определяют результат. Случайный seed, инициализирующий всё. Точная версия данных, вплоть до того, что в тот день было или не было очищено. Каждое значение в конфигурации. Точное состояние кода именно в тот момент, включая изменения, которые я нигде не закоммитил. Порядок, в котором всё запускалось.

Измени любое из этого — пусть молча, пусть случайно — и результат может сдвинуться. Я не зафиксировал ни одного из них. Мой «эксперимент» был бурлящим супом из движущихся частей, а я обращался с его выводом так, будто это чистое, повторяемое измерение с калиброванного прибора. Ничего подобного. Это было разовое событие в системе, которую я не контролировал до конца и не удосужился записать.

Детерминизм — это выбор, который нужно сделать

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

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

Скучная дисциплина, которая всё исправила

Лекарство, когда я наконец его принял, было почти оскорбительно скучным. Я начал относиться к каждому эксперименту как к чему-то, что должно быть восстановимо из записи. Какие данные. Какой код. Какие настройки. Что произвело что. Если результат не был привязан к достаточному количеству информации, чтобы породить его заново, то, с моей точки зрения, этого результата не существовало.

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

Почему здесь это важнее, чем почти где-либо

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

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

Более глубокий урок: доверяй записям, а не воспоминаниям

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

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

— Никаких сигналов, никакой доходности, не инвестиционная рекомендация.