Knowledge Accumulator
5.45K subscribers
138 photos
277 links
Реалистичный взгляд на технологии и мир
Download Telegram
Loss of plasticity in deep continual learning [2024]

Сегодня посмотрим на статейку от Саттона, которую мне недавно скинули в комментариях. В ней разбирается проблема потери пластичности - способности обучаться со временем - в нейросетях. Я уже кстати давно писал про статью на эту тему в контексте RL.

Рассмотрим эксперимент с так называемым Class-incremental CIFAR-100. На самом деле это облегчённый вариант Class-incremental, если сравнивать с моими недавними постами.

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

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

В чём причина? Авторы объясняют это появлением так называемых Dormant Units - "нейронов", которые скатываются в константное предсказание - например, в 0, если используется ReLU. Градиенты перестают течь и нейрон становится бесполезным.

В статье протестировали метод под названием Shrink and Perturb - это добавление L2-регуляризации + зашумление весов, которые как бы помогают весам вернуться в точку "инициализации". С его помощью, пластичность теряется сильно медленнее.

Авторы предлагают и новый подход под названием Continual Backpropagation. Он предполагает более точечную работу с плохими юнитами.

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

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

Доля пересоздаваемых юнитов не должна быть большой - всего 10^-5 от всех юнитов за шаг. Этого хватает, чтобы полностью решить проблему потери пластичности на задаче Class-incremental CIFAR-100 и удерживать долю Dormant Units достаточно близкой к нулю.

Может показаться, что этот метод является Free Lunch - мы получили плюс к пластичности, ничего не теряя. Но на самом деле мы скорее съедаем больший кусок ланча, за который уже заплатили до этого, выделив N памяти, который потом начинает простаивать.

Чем менее тривиальная перед нами задача, тем меньший кусок ланча мы умеем есть, и больший выбрасываем в мусорку. Съедать всё, что есть, мы научимся, когда люди осознают реальный смысл Bitter Lesson, степень своей ограниченности и начнут, наконец, гонять meta-meta-learning.

@knowledge_accumulator
1👍53🔥2
Я отупел от прочтения Hierarchical Reasoning Model [2025]

На бумаге идея следующая - делаем такую модель, которая состоит из 2 компонент - "медленной" и "быстрой". Медленная будет применяться реже и отвечать за более "глобальное" планирование, а вот быстрая будет дорабатывать детали. Как обычно, приводится неуместная аналогия с человеческим мозгом, который как бы умеет оперировать на разных частотах одновременно. Работает примерно так:

Есть 2 скрытых состояния, который обновляются двумя разными трансформерами. То, что авторы называют forward pass, состоит из N * T шагов. На каждом из них "быстрая сеть" берёт быстрое состояние, медленное состояние, эмбеддинг входа, и выдаёт обновлённое быстрое состояние. Раз в T шагов просыпается медленная сеть, берёт быстрое и медленное состояние, и выдаёт новое медленное состояние. Спустя N * T шагов применяется модель, которая превращает медленное состояние в выходное предсказание.

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

На вопрос "Схуяли?" авторы отвечают "Consider an idealized HRM behavior", приводят пачку невыполняющихся в данной ситуации формул и вуаля - 1-step gradient approximation готов. Unbiased, мамой клянусь.

На самом деле, то, что авторы называют forward pass, это в реальности только 1 шаг применения, и настоящий forward pass это несколько вот этих циклов по N*T шагов, вплоть до 16. Там ещё есть обучаемый на основе Q-learning модуль, который может сказать моделям "Астанавитесь" и тем самым сэкономить ресурсы, если модель нашла решение быстрее.

Вот этот самый 1-step approximation применяется на каждом шаге внешнего цикла, то есть получается, градиенты сквозь время всё-таки пробрасываются, но делается это раз в N*T шагов. По мнению авторов, это уже не так скучно.

Схема вроде работает и показывает неплохой результат, несмотря на подозрительную схему аппроксимации градиентов. Но пока вам рассказывали про сложную схему, фокусник утаил главную деталь. Знаете, какое значение N и T используется во всех экспериментах? Знаете, во сколько раз так называемая быстрая модель применяется чаще, чем медленная? Знаете, сколько памяти экономит one-step gradient approximation?

Ответ убил: N=2, T=2.

Вся эта мишура с "иерархичностью" не имеет большого смысла. Один шаг применения HRM - это суммарно 6 вызовов трансформера. Там в коде есть for-loop размером в 4 строки, который суммарно вызывает выполняет 4 вызова модели. Посмотрите на картинку поста - там есть многоточия между применениями L Module, которых в реальности нет! На иллюстрации буквально весь граф.

Думаете, в статье есть Ablation о том, как разные значения N и T влияют на результат? Нет, интересно почему? Может быть, от очень честной one-step аппроксимации у модели разболелась голова? Вместо этого авторы оформили куда более интересный подгон - анализ того, как мозг мыши можно представить в виде HRM.

Авторы ARC-бенчмарка, на котором был зарепорчен основной результат, провели анализ модели, и ключевые факты следующие:

- Если вместо HRM применить обычный трансформер такое же количество раз, результат получается почти такой же.
- Буст в качестве достигается засчёт того, что модель применяют много раз. Скор между 1 применением и 16 отличается примерно в 2 раза.

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

@knowledge_accumulator
1👍34😁193❤‍🔥2🐳2
Верните мне мой 2016

Январь. Мне недавно исполнилось 18 лет, и я сделал свой главный на тот момент выбор - между геймдевом и ML - в пользу второго. Всё происходило на 3 квадратных метрах в углу моей общажной комнаты. Сидя на кровати, как на стуле, перед ноутом, я смотрел Воронцова на курсере, а на парах читал Deep Learning Book.

В марте мы с другом пришли на Datafest и поучаствовали в хакатоне по real-time предсказанию результатов игр в доте. Я собрал какой-то кошмарный ансамбль моделей и мы заняли 2 место. Благодаря данному событию меня позвали в слак ODS, так я и вырвался из социального вакуума.

Ближе к лету кто-то в ODS обсуждал статью про DQN, и я, прочитав её, сразу же понял - это то, чем я хочу заниматься. Когда я поинтересовался какими-то деталями, то меня отправили читать книжку Саттона.

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

В августе я изучил Theano + Keras и с нуля реализовал DQN вот в этом репозитории. Примерно в том же месяце я пришёл в слак с вопросом "Чем мне заняться в жизни, если я умею реализовать DQN?". В ответ на это со мной связались и я нанялся в ресёрч-проект по применению RL в HFT. Мне это показалось идеальной опцией.

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

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

Даже не знаю, на что я рассчитывал. За внезапно нарисовавшимся ужином в шоколаднице родилась идея - а давайте вместе сделаем ещё одну лекцию про RL в яндексе. Было очень страшно, но потенциальный стыд в случае слива был ещё сильнее. Так и появилась вот эта лекция. Хоть и волос на голове тогда было побольше, выглядел я стрёмненько.

После этой лекции мне написал Ёж с предложением - а давай ты будешь со мной преподавать курс по RL в ШАДе? От такого предложения я офонарел, но, как бы не старался, я не нашёл повода отказать. Было странно быть младше своих студентов, и тем более преподавать курс в магистратуре своего универа, учась в бакалавриате. Я ни разу не был харизматичным лектором, но уж простите.

Мои 18 лет ещё не закончились. Осенью, анализируя произошедшее за год, я понял - наглость города берёт. У меня была цель - заниматься передовым RL-ресёрчем. А знаете, у кого ещё была такая цель в 2016-м? У OpenAI. И что же я сделал? Написал Суцкеверу на почту, мол, возьмите на стажировку.

Ответа не последовало, и, рассказав про ситуацию на работе в качестве прикола, мой менеджер сказал - так а я щас поеду на NIPS, давай я там к Суцкеверу подойду и пну по поводу тебя. Оказалось, что это не прикол. После NIPS мне взяли, да ответили, позвав в Skype пройти собес.

И тут мой поезд на полной скорости врезался в стену. Я мог сколько угодно разбираться в RL, но говорить на английском я умел ужасно, так что обосрался. Одновременно с этим, на работе дела шли не особо. Задача, которую мне дали, оказалась мне абсолютно не по зубам.

В свои 19 лет я вступал уже другим человеком - чего-то добившимся, но завязжим в неподъёмном проекте. Со знаниями RL, но без понимания, как прийти к своей цели. Я учился, работал, преподавал одновременно, и было окей, но я потерял ориентир, а в России в 2017-м стало много политики, которая казалась интереснее, и мой фокус сбился.

Я ни о чём не жалею. Может я и мог бы оказаться в Superintelligence Lab, но тогда бы я не встретил свою любимую жену - так меня утешает моя жена. Я не боюсь кризиса среднего возраста, идентичности и т.д, потому что у меня было время повзрослеть и пожить вне ML, а не начать гриндить по 80 часов с 19 лет. Не дай бог, стал бы леваком.

@knowledge_accumulator
149🔥17👍11💩7😁4💯4👎2🤔2😢1😭1
Less is More: Recursive Reasoning with Tiny Networks [2025]

Одному человеку, как и мне, не понравилась статья про Hierarchical Reasoning Model. Он тоже хотел написать о том, какая она отстойная, и чтобы все поржали. Но у него созрел хитрый план. Чтобы привлечь хайп, он придумал свою статью с новой моделью, и оформил обсёр HRM как аж 2 главы в ней.

Мой пост про HRM был уже написан после прочтения этой, так что самое интересное про HRM я уже рассказал. А теперь пришло время посмотреть, что же предлагает критик в качестве альтернативы. Встречайте, Tiny Recursive Model.

Иерархичность, биологические аналогии, хитровыведенные градиентные аппроксимации - всё это на помойку.

Просто, твёрдо и чётко, заводим 2 скрытых состояния - y и z. Из первого мы в конце строим финальный ответ, а второе это пространство для latent reasoning. Будем использовать одну и ту же сетку для обновления обоих. Если мы подаём в неё входные данные, y и z, то выходом будет новый z. А если подаём в неё только y и z, то выход используем, как новый y.

Один цикл применения TRM это n обновлений состояния z и 1 обновление скрытого состояния y, и потом из y отдельной головой получается ответ.

Вместо кринжовых отмазок про Fixed Point Theorem, как в HRM, здесь автор говорит - да я просто не хочу пропускать градиенты через несколько циклов применения TRM, и буду пропускать его только через последний. Как оправдывается автор этой работы?

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

Давайте ещё раз поймём разницу между подходами, потому что на первый взгляд, это 2 вида одного и того же скама. Оба подхода применяют к скрытому состоянию T * n раз какую-то модель. В HRM градиенты пропускаются внутри каждого n-ного шага в течение всего процесса, А в TRM градиенты пропускаются внутри последних n шагов.

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

Спор может разрешить столкновение лоб в лоб. Согласно Ablation, если в TRM начать использовать эту самую 1-step gradient, как в HRM, то точность падает с 87% до 56.5%. Из текста я не понял, начинает ли он пропускать градиенты в предыдущих итерациях применения, как это делается в HRM. Если нет, то автор героически победил соломенное чучело.

В TRM тоже есть early stopping и голова, предсказывающая, что пора остановиться. Но вместо использования RL, который, как все знают, terrible, автор отменяет delayed reward и учит голову на то, правильный ли ответ получился на текущем шаге.

Автор провёл небольшой ресёрч по скейлингу качества HRM и TRM с увеличением количества применений и глубины рекурсии. Кажется, что ни тот, ни тот, особо не улучшаются после n=3, T=3, а TRM вообще быстро начинает дохнуть по памяти. Оба на пересдачу.

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

@knowledge_accumulator
1👍9😁62🔥1
Обожаю научное сообщество

В самом начале своего подкаста с Суцкевером Лекс Фридман спрашивает его - расскажи, как вообще вы пришли к идее AlexNet?

Илья начал объяснять, что где-то в 2010-2011 году пришло понимание, что можно обучать большие нейросети end-to-end. Он отметил Deep learning via Hessian-free optimization [2010], как статью, после которой у него щёлкнуло в голове.

Он говорит - в ту пору они с Хинтоном были за антихайп. До начала 2010-х никто вокруг не верил, что нейросети работают, и что их можно просто обучать вот так просто.

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

Очень романтично. Гении, мудрецы, чисто на своей интуиции, пёрли наперекор мэйнстриму.

Чуть позже в этом подкасте Илья говорит - до AlexNet ML-сообщество недооценивало Deep Learning, потому что не было свидетельств того, что он работает. Он говорит - это задним числом кажется, что все остальные глупцы, но на самом деле нейросети плохо работали на практике, и недооценивать их было рационально.

...

Телепортируемся в 1998-й. Статья Лекуна - Gradient-Based Learning Applied to Document Recognition. Итак, я попытался вчитаться и понять - а какого секретного ингридиента тут не хватает? Она обучается end-to-end градиентным спуском, там 2 свёрточных и 2 полносвязных слоя. 60000 обучаемых весов - больше, чем тренировочных объектов - оверпараметризация налицо. Переобучения почти нет - ошибка на тесте 1%.

В статье буквально изложен дизайн современных DL-фреймворков - они это называют "Graph Transformer Networks". Идея в том, что достаточно определить какое-то количество операций, описать в них forward и backward методы, а дальше можно сцеплять их в виде графа произвольным образом, и это позволяет обучать сложные функции end-to-end.

...

Прошло 14 лет перед тем, как ничем не отличающуюся (помимо совсем уж мелочей типа функции активации) схему применили на масштабе побольше и тем самым совершили "революцию". Раньше бы я подумал - да быть такого не может, чтобы 14 лет абсолютно рабочий метод лежал на полке, и его никто не пытался масштабировать. Но сейчас я всё понимаю.

Хинтон, Лекун и его друзья - не сумасшедшие гении-провидцы, прущие наперекор рациональному научному сообществу. Они были всего лишь единственными, у кого глаза не на жопе. Имея на руках работающий, как часы, метод, они говорили - да вот же, го обучать, я создал. А им отвечали:

- Математики: "Ой мы тут у себя в тетрадке нарисовали ваши нейросети, у них там VC-размерность больше чем 3.14, поэтому доказано, что они не работают"
- Ресёрчеры: "Ой нам тут грантик выдал европейский союз на развитие SIFT-фичей, и ещё дедлайн на конференцию через 3 месяца, у нас нет времени делать что-то такое"
- Прикладные ML-щики: "У нас тут цель на Q1 - увеличить качество на 1%, и поэтому не можем потратить год, чтобы увеличить его сразу на 20%"

Так все сидели и пердели, а за 14 лет компьют и данные развились так сильно, что революцию стало возможно совершить в гараже силами 3-х калек (изобретательных) на 2 видеокартах. А представляете, если бы хоть кто-то из этих исследователей не сидел на нищем пайке своей конторы, а инвестировал бы миллион долларов в разработку где-нибудь в 2005?

...

Самое смешное, что ситуация точь в точь повторяется сейчас. Есть метода, которая позволяет обучать обучающиеся алгоритмы в произвольной постановке ML-задачи (Supervised, RL, Continual и т.д.). Есть несколько статей [раз, два, три], где подобное успешно применяют на маленьких задачах, и я не видел за всю жизнь ни одного хорошего аргумента против того, что оно будет работать и дальше (в том числе и потому, что эти статьи вообще никто не обсуждает).

Уже 4 года всё это лежит на полке, и у меня есть ещё примерно 10, чтобы применить её где надо и заработать миллиард. Почему я не скрываю свой план? Ну так вы же всё равно не поверите...

@knowledge_accumulator
1👍32😁187❤‍🔥2🔥1
LLM + Эволюционные стратегии = ?

Напомню основную суть Evolution Strategies, про которые я уже когда-то писал:
Итак, вы находитесь в текущей точке пространства параметров - Theta. Метод пытается совершить градиентный подъём в нём, но, так как градиентов-то никаких нет, мы пытаемся его оценить как бы с помощью конечной разности. Одна итерация метода выглядит так:

1) Сэмплируем N стандартных нормальных шумов
2) Генерируем N новых Theha_i = Theta + Sigma * Noise_i
3) Получаем качество в этих точках - R_i
4) Оценка градиента Grad равна сумме по всем R_i * Noise_i / (N * Sigma)
5) Делаем шаг по нему: Theta_new = Theta + Alpha * Grad


У одной команды ресёрчеров родилась смелая идея - а что, если оптимизировать LLM с помощью такого метода? Для этого нужно использовать метод с пачкой оптимизаций (не особо гениальных, надо сказать):

- Вместо того, чтобы передавать шумы на воркеры для эвала, мы просто передаём рандом сид, и потом восстанавливаем такой же шум из него
- Чтобы минимизировать затраты по памяти, мы применяем этот шум in-place по одному тензору, а после эвала точно таким же образом вычитаем этот шум обратно
- Также, при подсчёте итогового шага мы делаем всё in-place для экономии памяти, слой за слоем

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

Главная загадка природы - как ES с размером популяции 30 (!!!) смог оптимизировать модель с миллиардом параметров? Авторы отсылают к идее о том, что обучение LLM на самом деле происходит в пространстве гораздо меньшей размерности, чем кажется.

Они упоминают статью Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning [2020]. У Техножрицы были про неё отдельные посты, я же ограничусь совсем кратким пересказом:

Авторы берут разные языковые модели и дообучают их на задачах, но при этом искусственно ограничивают размерность подпространства, что-то типа LoRA. Они перебирают размерность этого обучения и смотрят на качество, затем высчитывают так называемый d_90 = какой размерности нужна "LoRA", чтобы получить 90% от качества полной модели.

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

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

@knowledge_accumulator
1👍203🔥1
Принятие стратегических решений - слишком дорогой навык

На открытом рынке труда для каждой конкретной профессии уровень заработка объясняется всего двумя функциями - спроса и предложения.

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

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

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

Но они проходят не там. Искажения в картину вносит простой факт - люди не умеют и не хотят принимать стратегические решения, приносящие им деньги.

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

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

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

А есть и другие случаи. Моя жена, выпускница юрфака, рассказывала как-то раз про свою практику в суде. Вот у людей работа мечты - сидишь, иголкой и ниткой сшиваешь стопки бумаг, и носишь их туда-сюда целыми днями. Работаешь по дофига часов, получаешь дай бог 500 баксов в месяц. Через 10 лет, может быть, повысят.

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

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

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

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

@knowledge_accumulator
1😁40👍8🤡8💩74😱1
Лондон, гудбай

На этих выходных я переезжаю в Кремниевую долину.

Без приключений не обошлось. В апреле я выиграл в H1B-лотерею, дальше была куча долгой бюрократии, собеседование в посольстве и… админпроверка. Они известны своей печальной длительностью, измеряемой в последнее время годами, и это могло бы стать неплохим ударом кувалдой по голове. Но всё обошлось. Сами понимаете - Илон Маск, телефон, Белый Дом, в общем, проверку быстро завершили и визу дали.

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

Однако, строить своё состояние в Великобритании - это такое себе развлечение. Средний и нижнебогатый класс здесь - это классовые враги. Вас грабят на 40%, начиная с момента, когда вам начнёт хватать на базово комфортную жизнь - около 4к фунтов в месяц. Главный способ заработать бабки - работать на американский бигтех. Справедливости ради, в остальной Европе даже там денег не платят.

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

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

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

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

Я еду именно в Долину по профессиональным причинам - там у меня текущая работа. Вряд ли это то, где я захочу совсем осесть (всё же это эпицентр левизны), но пока норм. Если Маск перенесёт инженерный хаб в какой-нибудь Техас, я, наверное, самый первый в него поеду… Посмотрим, как пойдёт!

@knowledge_accumulator
2👍68🤡2618💩17🔥6👾4🐳3😢2🖕1
Я давно перестал любить работу и вам советую

На дворе 2020 год, и я работаю в Москве в лабе Самсунга. Это уже моя четвёртая работа, если считать первую стажировку, и за это время я перепробовал разные форматы - продуктовый Data Science, чистый ресёрч, прикладной ресёрч, и разные подобласти ML - табличную классику, RL, NLP, GAN-ы и др.

Спустя 4 года опыта ко мне пришла такая мысль - а чем я вообще занимаюсь? Точнее, буквально - на что я физически трачу время на своей работе?

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

Сделал прототип своей ресерч идеи? Отлично, теперь в N раз больше времени уйдет, чтобы понять, почему результаты сосут.
Сделал трансформер для нового сервиса? Теперь неделями дебажишь его экспорт и применение.
Написал новую компоненту? Ну вы поняли.

На заре карьеры моей второй опцией было пойти в геймдев. Пару месяцев назад я посмотрел весьма любопытное интервью с разработчиком движка из Grinding Gear Games (Path of Exile).

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

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

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

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

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

Вот, чем занимаются разработчики игр.

Эта история жёстко напомнила мне мои студенческие годы, когда я, будучи криворуким, тратил дни на то, чтобы настроить CUDA-драйвера для Tensorflow. Получается, что не такими уж и разными вещами мы занимаемся.

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

Уборщику, который чистит унитазы, не важно, кто в них срёт - Илон Маск или Вася Пупкин. Да, можно себя убедить в том, что твои унитазы для очень важных людей, но… достаточно уже про говно, в общем. А у разработчиков всё почти то же самое.

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

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

@knowledge_accumulator

P.S.

У всего есть свой предел. Я слышал, в одной компании нужно несколько месяцев читать онбординг-гайды, параллельно накручивая метрику количества коммитов для перфоманс ревью. Там я бы застрелился.
1👍6038🔥14👎10🤮4😱3💯3😁2🤔2
Да что ж ты будешь делать без работы?

Даже среди граждан Телеграма, не говоря уж об остальных, не особо распространена идея FIRE (Fuck you money, если по-нашему).

Я не буду сегодня в очередной раз объяснять, как этого достичь, в какую страну переезжать и куда складывать накопления - тут всё и так в принципе понятно.

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

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

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

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

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

while bored:
hobby = something_fun_others_do()
add_to_weekly_schedule(hobby)


Даже будучи в полной социальной изоляции, не выезжая из деревни, я бы нашёл себе занятий на целый день:

⁃ Астрономия
⁃ Низкоуровневое программирование
⁃ Кино
⁃ Гамать в комп (а как же)
⁃ Выучить китайский/японский
⁃ Изучать историю кого-то / чего-то
⁃ Ходить в качалку

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

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

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

@knowledge_accumulator
1👍53😁13💯127🤡4🔥3🤓2
Как переизобрести цивилизацию с нуля, оказавшись в древности?

Этого я не знаю. Сегодня обсудим более узкий вопрос - как с нуля переизобрести компьютер?

Кто не пытался собрать в школе компьютер в Майнкрафте, у того нет сердца. У меня оно было. Но в мои 14 мой подход к проблеме был не особо зрелый, дело было так:

1) Я прочитал гайд, как реализовывать логические гейты
2) Собрал наугад калькулятор с небольшими элементами памяти и небольшим набором операций
3) Перестал понимать, как двигаться дальше, и в целом стало лень, в итоге забил. К сожалению, по сравнению с вот этим челом я был амёбой.

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

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

nand2tetris.org - сайт с тонной материалов именно на эту тему. Он содержит 12 частей, начиная с логических гейтов, и заканчивая «высокоуровневым» программированием и операционной системой. Прилагается книга.

Для тех, кто не знает - NAND - логическая операция, которой достаточно, чтобы воссоздать все остальные. Компьютер можно собрать чисто на NAND-гейтах.

Этот материал весьма большой, и тянет на несколько месяцев ковыряния. Если у вас на это пока нет времени, к счастью, есть альтернатива:

nandgame.com - здесь процесс превратили в игру и оставили только самую мякотку.

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

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

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

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

И самое главное - делая это, никто не будет вас донимать встречами и агрессивными дедлайнами. Можно, наконец, инженерить в свое удовольствие, пока самому не надоест.

@knowledge_accumulator
1👍294🔥4🥱1
Я больше не знаю языки программирования, на которых пишу

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

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

Не так давно я пережил такое же знакомство с реальностью ещё раз, но уже в квадрате.

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

Можно сказать, на все рекомендации нужен 1 человек, который нормально знает ML, всё остальное это техническое обслуживание концептуально простой системы.

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

Это было бы ещё ничего, если бы на это не накладывалась наша скорость. Мне нужно прыгать между совсем разными частями системы каждую неделю. У меня нет времени и стимула сесть и нормально выучить раст, потому что к следующему разу, когда он мне понадобится, я уже всё забуду. Я не написал бы на нём даже Hello World.

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

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

Ничего, яйца в кулак и терпим.

@knowledge_accumulator
140👍20🤣10🔥4🤯2🫡1
Чё там в Долине

Я уже почти месяц как живу в Долине, пришло время рассказать о первых впечатлениях.

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

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

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

Конечно, здесь дорогое жильё. Распределение цен сдвинуто по сравнению с тем же Лондоном ощутимо вправо. Но надо сказать, что помимо этого вправо сдвигается и распределение качества.

И в Лондоне, и в Долине наша стратегия выбора жилья была примерно одинаковая - приличный Build-To-Rent (многоэтажки с квартирами, построенные именно для сдачи) в пределах допустимого расстоянии от работы, без каких-то значимых компромиссов.

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

Наконец-то, слава богу, никакого метро. Расскажу, как выглядит дорога до работы стандартного жителя Долины.

Вы спускаетесь в подземную парковку своего дома и садитесь в Теслу. Как только выехали на улицу, нажимаете кнопку ВКЛ на автопилоте и просто сидите, смотря на дорогу. Сейчас уже даже руки на руле можно не держать. Дороги тут огромные и прямые, машин немного, так что почти не нужно вмешиваться. В конце вы выбираете место для парковки и машина +- сама паркуется.

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

Кстати, про погоду. В Долине лучший климат среди тех мест, где я был. Среднесуточная температура в моей окрестности зимой 10 градусов, а летом 20. Солнечных часов здесь почти в 2 раза больше, чем в Лондоне и Москве. В 2 раза меньше дождливых дней, чем в Лондоне.

Многие беспокоятся про то, что тут нечем заняться по сравнению с Лондоном или тем же Нью-Йорком. Культурной плотности здесь правда гораздо меньше, но сходить всё ещё есть куда - в Сан-Франциско жизнь присутствует, до него нам ехать минут 40 (как раньше до центра Лондона). LA в нескольких часах езды тоже присутствует. Лично мне культурная программа не так интересна, да и времени на неё не завезли.

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

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

@knowledge_accumulator
1🤡61👍529🔥3👎1
Вайбкодинг: суровая реальность

Расскажу про то, как вчера прошли мои несколько часов на работе, которые мне показались интересным опытом.

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

Чел №1 запускает тулзу, которая парсит страницы, попутно записывая в соответствующие поля список ссылок на картинки, название страницы и несколько других полей.

Квест №1 - нужно добыть рейтинг объекта с этой страницы. Расстроенный, что скачивающая тулза не парсит этот рейтинг нативно, чел №1 предлагает скормить каждую страницу LLM-ке и попросить её вытащить этот рейтинг.

Удостоверившись, что тулза дампает ещё и весь html, я предлагаю другой вариант - если это данные с 1 сайта, то рейтинг можно легко найти в самой html-ке по тегам. Заварил Beautiful Soup, функцию извлечения из 3 строчек, и готово. +1 к олдскульности в глазах коллег.

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

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

Спустя время ко мне подходит чел №2 и говорит - я 5 минут назад попросил данные, и у меня вроде получилось распарсить. Я говорю - как? Он говорит - да я сказал курсору, что надо распарсить, и он написал код. Смотрю в него - там 400 строк отборнейшего AI-слопа. Чел №2 добавляет - я в душе не знаю, как он работает, я посмотрел на нескольких образцах, результат выглядит валидно.

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

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

Вернушись, я застал сеанс парного вайб-кодинга. Чел №1 ест, а чел №2 что-то усиленно пишет курсору. Он мне говорит - "чё-то слишком дохуя edge-кейсов, оказалось, что в половине случаев ничё не работает. Я скидываю курсору неправильные кейсы и она фиксит код". Через ещё несколько минут ко мне подошли - может, по-братски всё же свой парсер доделаешь?

Замотивированный на успех, я ещё раз вчитался в 30% "неправильных html" и до меня дошло - эти страницы сдампали до того, как они полностью загрузились. Когда я открывал страницы вручную, замечал, что нужная мне карусель загружается не сразу. Я попросил чела №1 перескачать страницы, выставив большее время перед загрузкой, и после этого почти все 50к страниц стали парсится очень короткой функцией. Мне сказали, что я Wizard.

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

А вы что думаете про всё это? Расскажите свои истории на тему.

@knowledge_accumulator
1👍64😁2814🤡4🔥3
Теперь я коллекционер

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

Итак, я собираю микромузей истории видеоигр.

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

В конце 1970-х была релизнута Atari 2600 - консоль второго поколения. Любители RL в свое время наигрались в симулятор Atari в процессе обучения алгоритмов. Именно под Atari 2600 и были сделаны те самые игры на рубеже 70-х и 80-х. С недавних пор, благодаря моей супруге, я счастливый владелец оригинала! Играть в Space Invaders на 4к телеке очень даже вайбово.

В середине 1980-х была релизнута Dendi NES, игры с которой были уже совсем на другом уровне. Например, полноценная RPG - первая часть The Legend of Zelda. Технологический прорыв - теперь можно сохраняться между сессиями!

На рубеже 80-х и 90-х вышла Sega Genesis - приставка, китайская копия которой стала подарком на моё 4-х летие (хотя на дворе уже был 2001-й). Как же я раздавал в Road Rash 2, Desert Strike и, конечно, Сонике. Эту приставку я уже тоже получил в подарок от друзей, таким образом, экспоната уже 2.

Я считаю, что возраст игре не такая большая помеха. Более того, тест на время - отличный способ понять качество культурного продукта, и это касается не только игр. У Super Mario Bros (1985) и классического Тетриса (1989) есть живое сообщество, по последнему вон оффлайн-чемпионаты проводятся каждый год.

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

Почитав, оказалось, что у меня в руках оказалась один из артефактов пузыря видеоигр, лопнувшего в 1983 году (и такое было!). Atari, которой вскружило голову от успехов, решила портировать уже вышедшую (в виде Arcade) на тот момент Pac-man на игровую консоль.

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

Куча копий игры не была распродана, причём не только Pac-man, и в Atari придумали гениальный план - закопать миллионы картриджей в землю в New Mexico. Долгое время это были скорее слухи, а в 2014 захоронение взяли, да раскопали, и нашли там те самые игры.

Жалко, что мы никогда не узнаем, возможно ли было сделать хороший порт Pac-man в тех условиях… Или узнаем?

Нашёлся сумасшедший умник, который написал свой Pac-man под Atari 2600, и у него получилось гораздо ближе к оригиналу! Так что, получается, официальный порт явно вайбкодили.

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

Есть тут такие же любители? Буду рад рекомендациям чего-либо на тему.

@knowledge_accumulator
1👍155💩4🔥3
2025: итоги

Кажется, что субъективное восприятие времени зависит от того, насколько рутинной и однообразной является жизнь. Так вот, этот год был у меня безумно долгим.

Работу весь год невероятно трясло. По мотивам произошедшего можно было бы снять драму, хоррор и множество других жанров. 🫡 всем павшим жертвами. Я благодарен лично каждому, с кем работал в Лондоне, с вами было круто.

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

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

Второе - это то, что я не люблю свою работу. Дело в том, что если бы я её любил, то тогда бы с печалью и разочарованием смотрел на то, чем в итоге приходилось заниматься. Но мне было по барабану. Поднимать дата-процессор на скале? Делать rebase и резолвить конфликты в коде, который вижу в первый раз? Вкусно! А можно добавки? Готовность за это браться помогла заработать положительную репутацию у коллег в HQ.

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

С целями вне работы, которые ставил в тот раз, справился на троечку. Пока что не получилось съездить в Японию/Китай, а также засетапить кардио-тренировки. Первое я твёрдо и чётко собираюсь сделать весной, с кардио-тренировками думаю тоже разберусь в начале года.

Добавлю пару задач к тем, что остались:

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

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

Желаю вам удачного 2026-го года. Самое главное - пережить его, а после него, наконец-то, наступит простой, 2027 год, и тогда жизнь точно наладится.

🌲🌲🌲

@knowledge_accumulator
2👍31🍾15🎄52😐2
DiscoRL - out-of-distribution RL наконец-то решён?

Когда я увидел название статьи "Discovering state-of-the-art reinforcement learning algorithms" с David Silver в авторах, я прищурился. Заметив "meta-learning", "Atari", "outperforms manually designed" в абстракте, мой пульс подскочил в полтора раза. "Неужели это оно?" - думал я, открывая статью трясущимися руками.

Итак, в 2020 году вышла статья "Discovering reinforcement learning algorithms" - от того же автора. На заре существования канала я даже делал на неё обзор. Общий принцип работы с тех пор не изменился, просто всё допилено до лучшего состояния. На сайте у первого автора (junhyuk.com), кстати, написано "The majority of the work was finished in 2022.", так что, предположу, что он больше не развивает это направление, и его припахали к Gemini.

Так, обычно в RL-постановке у нас есть нейросеть-агент, которую мы обучаем, к примеру, с помощью Policy Gradient. То есть, определяющим в Policy Gradient является именно алгоритм, который считает таргеты. Подход LPG заключается в том, что мы начинаем генерировать таргеты для обучения отдельной нейросетью, которая и является объектом мета-обучения.

Основной агент выдаёт помимо стандартных policy и q-value ещё 2 вектора - y(s) и z(s, a), которые не имеют заранее определённой семантики.

Ключевой кусок алгоритма - мета-сеть - это LSTM, которая получает на вход траекторию из последних policy, y, z и Q и выдаёт таргеты для обучения - policy*, y* и z*, а основной агент просто обучается их приближать, и дополнительно учит свою Q-функцию также, как и в алгоритме Retrace - какой-то Prior Knowledge тут всё-таки зашит.

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

Что касается общей производительности алгоритма, есть улучшение в качестве относительно бейзлайна, но не прям какое-то экспоненциальное. Самое интересное начинается при тестировании на Out of Distribution Generalization.

Авторы обучили Disco57 на атари и затем гоняли его на других средах. На ProcGen качество получилось выше, чем у бейзлайнов! Ну и на других средах тоже работает нормально. Другая вариация - Disco103, которую обучили ещё на 2 наборах сред, показывает себя ещё лучше на hold-out средах из наборов 4-6, чем Disco57. Так что, какая-то степень генерализации точно присутствует! Авторы справедливо отмечают, что такой результат это что-то новенькое.

Безумно рад видеть прогресс в задаче OOD-RL. Несмотря на прогресс, на мой взгляд, нужно стремиться к результату другого уровня.

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

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

@knowledge_accumulator
112🔥7👍3