Blog

  • Facial Landmark Detection with Synthetic Data: Case Study

    Facial Landmark Detection with Synthetic Data: Case Study

    Today we have something very special for you: fresh results of our very own machine learning researchers! We discuss a case study that would be impossible without synthetic data: learning to recognize facial landmarks (keypoints on a human face) in unprecedented numbers and with unprecedented accuracy. We will begin by discussing why facial landmarks are important, show why synthetic data is inevitable here, and then proceed to our recent results.

    Why Facial Landmarks?

    Facial landmarks are certain key points on a human face that define the main facial features: nose, eyes, lips, jawline, and so on. Detecting such key points on in-the-wild photographs is a basic computer vision problem that could help considerably for a number of face-related applications. For example:

    • head pose estimation, that is, finding out where a person is looking and where the head is turned right now;
    • gaze estimation, a problem important for mobile and wearable devices that we discussed recently;
    • recognizing emotions (that are reflected in moving landmarks) and other conditions; in particular, systems recognizing driver fatigue often rely on facial landmarks in preprocessing.

    There are several different approaches to how to define facial landmarks; here is an illustration of no less than eight approaches from Sagonas et al. (2016) who introduced yet another standard:

    Their standard became one of the most widely used in industry. Named iBug68, it consists of 68 facial landmarks defined as follows (the left part shows the definitions, and the right part shows the variance of landmark points as captured by human annotators):

    The iBug68 standard was introduced together with the “300 Faces in the Wild” dataset; true to its name, it contains 300 faces with landmarks labeled by agreement of several human annotators. The authors also released a semi-automated annotation tool that was supposed to help researchers label other datasets—and it does quite a good job.

    All this happened back in 2013-2014, and numerous deep learning models have been developed for facial landmarks detection since then. So what’s the problem? Can we assume that facial landmarks are either solved or, at least, are not suffering from the problems that synthetic data would alleviate?

    Synthetic Landmarks: Number does Matter

    Not quite. As it often happens in machine learning, the problem is more quantitative than qualitative: existing datasets of landmarks can be insufficient for certain tasks. 68 landmarks are enough to get good head pose estimation, but definitely not enough to, say, obtain a full 3D reconstruction of a human head and face, a problem that we discussed very recently and deemed very important for 3D avatars, the Metaverse, and other related problems. 

    For such problems, it would be very helpful to move from datasets of several dozen landmarks to datasets of at least several hundred landmarks that would outline the entire face oval and densely cover the most important lines on a human face. Here is a sample face with 68 iBug landmarks on the left and 243 landmarks on the right:

    And we don’t have to stop there, we can move on to 460 points (left) or even 1001 points (right):

    The more the merrier! If we are able to detect hundreds of keypoints on a face it would significantly improve the accuracy of 3D face reconstruction and many other computer vision problems.

    However, by now you probably already realize the main problem of these extended landmark standards: there are no datasets, and there is little hope of ever getting them. It was hard enough to label 68 points by hand, the original dataset had only 300 photos; labeling several hundred points on a scale sufficient to train models to recognize them would be certainly prohibitive.

    This sounds like a case for synthetic data, right? Indeed, the face shown above is not real, it is a synthetic data point produced by our very own Human API. When you have a synthetic 3D face in a 3D scene that you control, it is absolutely no problem to have as many landmarks as you wish. What’s even more important, you can easily play with the positions of these landmarks and choose which set of points gives you better results in downstream tasks—imagine how hard it would be if you had to get updated human annotations every time you changed landmark locations!

    So at this point, we have a source of unlimited synthetic facial landmark datasets. It only remains to find out whether they can indeed help train better models.

    Training on Synthetic Landmarks

    We have several sets of synthetic landmarks, and we want to see how well we are able to predict them. As the backbone for our deep learning model we used HourglassNet, a venerable convolutional architecture that has been used for pose estimation and similar problems since it was introduced by Newell et al. (2016):

    The input here is an image, and the output is a tensor that specifies all landmarks.

    To train on synthetic data, we couple this backbone with the discriminator-free adversarial learning (DALN) approach introduced very recently by Chen et al. (2022); this is actually another paper from CVPR 2022 so you can consider this part a continuation of our CVPR ‘22 series.

    Usually, unsupervised domain adaptation (UDA) works in an adversarial way by

    • either training a discriminator to distinguish between features extracted from source domain inputs (synthetic data) and target domain inputs (real data), training the model to make this discriminator fail,
    • or learning a source domain classifier and a target domain classifier at the same time, training them to perform the same on the source domain and as different as possible on the target domain while training the model to keep the classification results similar on the target domain.

    DALN suggested a third option for adversarial UDA: it trains only one classifier, with no additional discriminators, and reuse the classifier as a discriminator. The resulting loss function is a combination of a regular classification loss on the source domain and a special adversarial loss on the target domain that is minimized by the model and maximized by the classifier’s weights:

    We have found that this approach works very well, but we had an additional complication. Our synthetic datasets have more landmarks than iBug68. This means that we cannot use real data to help train the models in a regular “mix-and-match” fashion, simply adding it in some proportion together with the synthetic data. We could pose our problem as pure unsupervised domain adaptation, but that would mean we were throwing away perfectly good real labelings, which also does not sound like a good idea.  

    To use the available real data, we introduced the idea of label transfer on top of DALN: our model outputs a tensor of landmarks as they appear in synthetic data, and then an additional small network is trained to convert this tensor into iBug68 landmarks. As a result, we get the best of both worlds: most of our training comes from synthetic data, but we can also fine-tune the model with real iBug68 datasets through this additional label transfer network.

    Finally, another question arises: okay, we know how to train on real data via an auxiliary network, but how do we test the model? We don’t have any labeled real data with our newly designed extra dense landmarks, and labeling even a test set by hand is very problematic. There is no perfect answer here but we found two good ones: we test either only on the points that should exactly coincide with iBug landmarks (if they exist) or train a small auxiliary network to predict iBug landmarks, fix it, and test the rest. Both approaches show that the resulting model is able to predict dense landmarks, and both synthetic and real data are useful for the model even though the real part only has iBug landmarks.

    Quantitative results

    At this point, we understand the basic qualitative ideas that are behind our case study. It’s time to show the money, that is, the numbers!

    First of all, we need to set the metric for evaluation. We are comparing sets of points that have a known 1-to-1 correspondence so the most straightforward way would be to calculate the average distance between corresponding points. Since we want to be able to measure quality on real datasets, we need to use iBug landmarks in the metric, not extended synthetic sets of landmarks. And, finally, different images will have faces shown at different scales, so it would be a bad idea to measure the distances directly in pixels or fractions of image size. This brings us to the evaluation metric computed as

    where n is the number of landmarks, yi are the ground truth landmark positions, f(xi) are the landmark positions predicted by the model, and pupil are the positions of the left and right pupil of the face in question (this is the normalization coefficient). The coefficient 100 is introduced simply to make the numbers easier to read.

    With this, we can finally show the evaluation tables! The full results will have to wait for an official research paper, but here are some of the best results we have now.

    Both tables below show evaluations on the iBug dataset. It is split into four parts: the common training set (you only pay attention to this metric to ensure that you avoid overfitting), the common test set (main test benchmark), a specially crafted subset of challenging examples, and a private test set from the associated competition. We will show the synthetic test set, common test set from iBug, and their challenging test set as a proxy for generalizing to a different use case.

    In the table below, we show all four iBug subsets; to get the predictions, in this table we predict all synthetic landmarks (490 keypoints in this case!) and then choose a subset of them that most closely corresponds to iBug landmarks and evaluate on it.

    The table above shows only a select sample of our results, but it already compares quite a few variations of our basic model described above:

    • the model trained on purely synthetic data; as you can see, this variation loses significantly to all other ways to train, so using real data definitely helps;
    • the model trained on a mix of labeled real and synthetic data with the help of label adaptation as we have described above; we have investigated several different variations of label adaptation networks and finally settled on a small U-Net-like architecture;
    • the model trained adversarially in an unsupervised way; “unsupervised” here means that the model never sees any labels on real data, it uses labeled synthetic data and unlabeled real data with an extra discriminator that ensures that the same features are extracted on both domains; again, we have considered several different ways to organize unsupervised domain adaptation and show only the best one here.

    But wait, what’s that bottom line in the table and how come it shows by far the best results? This is the most straightforward approach: train the model on real data from the iBug dataset (common train) and don’t use synthetic data at all. While the model shows some signs of overfitting, it still outperforms every other model very significantly.

    One possible way to sweep this model under the rug would be to say that this model doesn’t count because it is not able to show us any landmarks other than iBug’s, so it can’t provide the 490 or 1001 landmarks that other models do. But still — why does it win so convincingly? How can it be that adding extra (synthetic) data hurts performance in all scenarios and variations?

    The main reason here is that iBug landmarks are not quite the same as the landmarks that we predict, so even the nearest corresponding points introduce some bias that shows in all rows of the table. Therefore, we have also introduced another evaluation setting: let’s predict synthetic landmarks and then use a separate small model (a multilayer perceptron) to convert the predicted landmarks into iBug landmarks, in a procedure very similar to label adaptation that we have used to train the models. We have trained this MLP on the same common train set.

    The table below shows the new results.

    As you can see, this test-time label adaptation has improved the results across the board, and very significantly! However, they still don’t quite match the supervised model, so some further research into better label adaptation is still in order. The relative order of the model has remained more or less the same, and the mixed syn+real model with label adaptation done with a small U-Net-like architecture wins again, quite convincingly although with a smaller margin than before.

    Conclusion

    We have obtained significant improvements in facial landmark detection, but most importantly, we have been able to train models to detect dense collections of hundreds of landmarks that have never been labeled before. And all this has been made possible with synthetic data: manual labeling would never allow us to have a large dataset with so many landmarks. This short post is just a summary: we hope to prepare a full-scale paper about this research soon.

    Kudos to our ML team, especially Alex Davydow and Daniil Gulevskiy, for making this possible! And see you next time!

    Sergey Nikolenko
    Head of AI, Synthesis AI

    P.S. Have you noticed the cover images today? They were produced by the recently released Stable Diffusion model, with prompts related to facial landmarks. Consider it a teaser for a new series of posts to come…

  • Игры-эльфы: Carto и Gato Roboto

    Игры-эльфы: Carto и Gato Roboto

    В прекрасном мультсериале “Disenchantment” (очень рекомендую!) есть раса эльфов, носящих говорящие имена. Они все заканчиваются на -o: Shocko, Watcho, Weirdo, Annoyo и так далее до собственно Elfo, одного из главных героев. С играми тоже так бывает, и сегодня у нас обзоры двух таких маленьких игр-эльфов; обе мне весьма понравились!

    Carto

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

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

    Мне именно этим особенно понравились головоломки в этой игре: хотя почти все они так или иначе связаны с картой, они обычно говорят тебе о том, что нужно сделать, в рамках игрового мира (“найди такой-то остров”, “мы встретимся у большого озера в форме рыбы”), и тебе нужно сначала самому догадаться, что именно нужно сделать с картой, а потом собственно решить задачу и сделать это.

    A ещё здесь есть бесконечно добрый и милый сюжет. В нём героиня ищет свою бабушку, летающую где-то на своём стимпанковском воздушном судне, а по дороге знакомится с обитателями разных биомов этого мира и их (порой странноватыми) обычаями. Впрочем, глубины сюжета или мощного лора тут не ждите: один из дизайнеров игры Ли-Куо Чен говорил, что вдохновение для нарратива игры они черпали из Atlas des Géographes d’Orbæ, прекрасной, но детской книги с картинками.

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

    Gato Roboto

    Далёкое будущее, а может, и далёкая галактика. Пилот космического корабля по имени Гэри отправляется к планете, с которой получил сигнал бедствия. На планете расположен некий исследовательский центр.

    Однако происходит незапланированное: Кики, кошка Гэри, прогулялась по клавиатуре, и космический корабль падает прямо на какую-то лабораторию!

    В результате пилот оказывается в ловушке, и спасать его должна Кики. Она оказывается очень смышлёной кошечкой (не то что Майлз!) и отправляется на поиски способа спасти хозяина. Так начинается 2D-метроидвания с очаровательной однобитной графикой, в которой Кики умеет бегать, прыгать, лазать по стенам и плавать, но умирает от первого касания любого врага.

    К счастью, Кики вскоре находит костюм меха-робота, в котором у неё появляется health bar, две разные пушки, rocket jump и всё такое.

    И метроидвания начинается по-настоящему; впрочем, для решения некоторых задачек всё-таки нужно из костюма вылезать (обычно чтобы куда-нибудь проплыть, в костюме это не получается).

    Я так подробно рассказал о завязке сюжета потому, что о самой игре особенно сказать нечего: это просто хорошая метроидвания (кажется, я недавно уже такое говорил). Главные её особенности — это необычная однобитная графика (один из collectibles в игре — аудиокассеты, которые дают тебе новые “палитры”… то есть заменяют белый цвет на другой оттенок) и забавная история про котика, которая по ходу игры очень хорошо раскрывается.

    В игре есть боссы, которыми управляет злая мышь-учёный (разумеется, с этим тоже не всё так просто, но ладно, пусть хоть что-то останется без спойлеров). Управление очень приятное, играть было весело, затыков нигде не было, а исследовать карту весьма интересно. Конечно, на 100% я исследовать не стал, хотя перед финалом игра мне об этом очень забавно напомнила:

    Но не беспокойтесь, всё закончится хорошо и быстро; Gato Roboto проходится часа за три-четыре (если вы не из этих, которым надо 100%). Ничего особенного, но пройти было приятно, рекомендую.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура“: присоединяйтесь!

  • OneShot

    OneShot

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

    Во-первых, это нарративная история. Квест в самом классическом смысле этого слова: суть геймплея OneShot состоит в том, чтобы решать загадки и продвигаться по сюжету, путешествуя из одной локации в другую. Загадки иногда (далеко не всегда!) решаются буквально применением собранных предметов в нужные места. Но это, конечно, далеко не самое интересное, что есть в этой игре.

    Главный герой по имени Нико (кажется, в игре нигде не сказано определённо, мальчик это или девочка) носит кошачьи ушки и смотрит на мир кошачьими глазками, но регулярно называет себя “обычным ребёнком” и отказывается самоидентифицироваться как кот. Завязка сюжета состоит в том, что Нико просыпается в незнакомой комнате и вскоре узнаёт, что ему нужно спасти мир, который потерял свет и в результате довольно быстро разрушается. Чтобы это сделать, нужно принести на самую высокую башню Солнце, которое представляет собой обычную электрическую лампочку. Скорее всего, вы уже зеваете и ждёте стандартного приключения с некоторой долей самоиронии вроде лампочки. Но подождите, you ain’t heard nothing yet.

    Графически это 2D adventure, сделанная на RPG Maker, так что у самого геймплея есть узнаваемый графический стиль, который ничем особенным от других игр на RPG Maker не отличается.

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

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

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

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

    Кстати, на моём игровом компьютере имя пользователя осталось дефолтным — Admin, и это прекрасно подошло к игре; я не стал его менять, и Нико всё время называл меня Admin по ходу прохождения. А если выйти из игры не укладываясь спать в специально предназначенных для этого кроватях, Нико испуганно расскажет, что всё вокруг потемнело и весь мир исчез, но теперь вернулся и снова всё хорошо…

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

    Дам только один важный совет, до которого лично я сам не додумался; узнал об этом уже из обзоров/прохождений, которые читал после игры. Когда пройдёте OneShot, загляните в те места, куда игра вас периодически отправляла, ещё раз, и окажется, что название игры вас слегка обманывало. Sorry for being cryptic, но если прошли, поймёте, о чём я. Пропускать это действие точно не нужно, иначе потеряете добрую половину истории, но я, честно говоря, не понял, как именно игра предполагает до него додуматься. Впрочем, возможно, я просто что-то пропустил, и на самом деле этот совет нормальные игроки вынесут из игры и сами.

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

    В любом случае, OneShot категорически рекомендую. Слом четвёртой стены — это то ощущение, которое я очень люблю в играх; от OneShot остаётся то же послевкусие, как от Stanley Parable или Doki Doki Literature Club, только в другой форме, да ещё и с интересными не всегда тривиальными загадками. Попробуйте сами!

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура”: присоединяйтесь!

  • Duck Detective

    Duck Detective

    В обзоре Amerzone я писал, что к уткам-детективам мы ещё вернёмся. Возвращаемся! Сегодня у нас обзор мини-серии из двух мини-игр про… утку-детектива.

    Duck Detective: The Secret Salami

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

    Duck Detective — это две детективные игры про утку-детектива по имени Eugene McQuacklin, выдержанные в стиле hardboiled нуар-детектива с невероятным переизбытком утиных шуток. Делает серию компания Happy Broccoli Games (целых шесть человек!), и первая игра серии вышла в 2024 году, получив в Германии даже какие-то премии (студия базируется в Берлине).

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

    А потом, когда всё осмотришь, нужно сделать из увиденного и найденного выводы, чтобы завершить очередную “deducktion” и продвинуться к следующему шагу расследования. Выводы происходят или в виде сопоставления заданных атрибутов, которые выбираются из вариантов (например, узнать, кого из персонажей как зовут), или, что куда любопытнее, в виде заполнения законченных предложений.

    Это самая интересная механика в игре, единственная, которая действительно иногда требует (небольшого!) мозгового усилия, и именно она (вместе с уткошутками, разумеется!) делает игры серии не совсем стандартными простенькими квестами. Можно сказать, что Duck Detective — это упрощённая, “детская” версия игр из серии Golden Idol. Кстати, к ним мы тоже наверняка ещё вернёмся.

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

    Duck Detective: The Ghost of Glamping

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

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

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

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура”: присоединяйтесь!

  • INDIKA

    INDIKA

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

    INDIKA — отличный пример игры, где художественная идея и форма оказываются прекрасно согласованными. По форме это короткое (около 4-5 часов) путешествие монахини через альтернативную Россию рубежа XIX-XX веков. Монахиня сомневается в христианской вере, и её внутренний монолог — это не монолог, а спор веры, разума и искушения. Её попутчик и постоянный собеседник — сам дьявол. По жанру это 3D-приключение с упором на историю и головоломки; они не слишком головоломные, и на самом деле игра ближе к симулятору ходьбы, но с важными отклонениями и резкими сменами жанров. INDIKA действительно можно пройти за один-два вечера, и это будут прекрасные вечера. Но давайте по порядку.

    История и контекст

    INDIKA разработана российской (ныне казахстанской, как, увы, часто бывает) студией Odd Meter, которая прошла интересный путь. С 2011 года студия занималась архитектурной визуализацией; кстати, архитектура в игре отлично продумана и проработана.

    В какой-то момент в Odd Meter начали делать презентации для клиентов в VR; это была необычная и крутая идея для того времени. А потом руководитель студии Дмитрий Светлов подумал: а почему бы не сделать VR-игру (всё это я рассказываю по его интервью), тем более что рынок VR-игр был (да и сейчас остаётся) довольно маргинальной и вовсе не насытившейся областью.

    Так появилась игра Sacralith (2018) про лучника в VR, которая получила высокие оценки (85% положительных отзывов в Steam) и вполне себе окупилась. Я в неё не играл, но вот смотрю на скриншоты и вижу, что многое из атмосферы и стиля INDIKA здесь уже несомненно прослеживается:

    Сюжет и геймплей

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

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

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

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

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

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

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

    А ещё время от времени, обычно в воспоминаниях героини, внешний вид меняется на пиксельное 2D, и Индика участвует в разных мини-играх в стиле NES; это разнообразит происходящее, да и смысл кое-какой в этом имеется.

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

    Что в кудеце? А что в нём, а шо в нём, шовнём, шовнём… поиграйте, увидите.

    Немного об идеях

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

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

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

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

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

    Но и так неплохо вышло! Давайте перейдём к области, в которой получилось особенно хорошо.

    Звук

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

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

    Главным образом, конечно, по-русски играть нужно ради дьявола, которого озвучивал сам Ефим Шифрин. И явно вложил в это дело душу — дьявол получился восхитительный; все интонации на месте, блестящая работа. Кстати, актёрская игра Индики (озвучивала Анастасия Дьячук) лично мне тоже очень понравилась, но все обзоры, конечно, всегда на первый план выставляют Шифрина. В общем, играйте на русском языке и слушайте диалоги, они того стоят. Фото из обзора:

    Заключение

    Интервью Дмитрия Светлова на cyber.sports.ru заканчивается так:

    – Какой видишь игру мечты?

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

    Ты можешь прочитать книгу и посмотреть фильм, а можешь пройти игру и получить уникальный опыт. В качестве примера приведу The Stanley Parable. Эта история не может быть ничем кроме игры, иначе она попросту не сработает. Нечто подобное я и хочу сделать.

    Чего бы хотелось этим достичь? Хотелось бы, чтобы люди говорили: «Вот смотрите, Odd Meter показала, что игры – искусство ничуть не хуже Бергмана и Тарковского».

    Пожалуй, до Бергмана Indika не вполне дотянула. Но это действительно игра, которая даёт уникальный опыт и действительно показывает, что игры – это искусство. Не пропускайте.

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура”: присоединяйтесь!

  • Amerzone: The Explorer’s Legacy

    Amerzone: The Explorer’s Legacy

    История игры Amerzone начинается даже не в девяностые, а в 1980-е годы, когда Бенуа Сокаль ещё никак не был связан с игровой индустрией, а рисовал комиксы (которые, кстати, уже раскрашивал на компьютере). В частности, в 1986 году он нарисовал комикс L’Amerzone, один из многих в серии приключений инспектора Канардо, утки-детектива (hold that thought! к этой идее мы ещё вернёмся в следующих постах). В нём детектив отправлялся в вымышленную южноамериканскую страну с полным набором соответствующих стереотипов; вот как это примерно выглядело:

    Любопытный факт: слово Amerzone не имеет отношения к Америке, а является комбинацией Amazon и amer — “горький” по-французски. Конкретный комикс про горькую Амазонку не был особенно выдающимся (сейчас у него рейтинг 3.5 на goodreads), но в целом инспектор Канардо действительно, pardon the pun, взлетел, продавался хорошо и сделал Бенуа Сокалю имя.

    И вот в середине девяностых Сокаль решил попробовать выпустить единый CD-ROM со своими комиксами и некими “3D-материалами” по его вселенной. Издатель одобрил, а в качестве нового медиа решено было сделать игру. Сначала хотели сделать маленькую и простенькую, но вошли во вкус, и к 1999 году получился Amerzone.

    С комиксами про утку-детектива, правда, игра имела не так уж много общего (кроме места действия). Все герои стали людьми, а стиль был уже вполне реалистичным. Сам Сокаль признавался, что главными источниками вдохновения стали, во-первых, Myst, а во-вторых, атмосфера знаменитого фильма Вернера Херцога Fitzcarraldo. Выглядело это в 1999 году вот так — согласитесь, довольно круто для квеста из девяностых:

    И вот совсем недавно, в апреле 2025 года, вышел римейк классической игры с тем же названием; в него я, разумеется, и играл, чего и вам желаю. Интервью с разработчиками из Microids не нашёл, но ни секунды не сомневаюсь, что это было сделано в память самого Бенуа Сокаля, который ушёл из жизни в 2021-м; Syberia 3 заканчивали уже без него.

    Графику в римейке, конечно, прокачали очень хорошо; выглядит всё почти совсем современно. Детализация и графика в целом, конечно, скорее выглядят на уровне 2015 года, чем 2025-го, но разве кто-то здесь будет спорить, что в 2015-м игры были уже очень хороши на вид?.. В Amerzone и пейзажи красивые, и анимации достаточно детализированы, и стиль (унаследованный от оригинала) на высоте:

    А самое интересное в этой игре в том, что этот очень достойный внешний вид сочетается с, по всей видимости, не особенно изменившимся геймплеем из девяностых! Это квест, ходишь ты в нём прямо как в Myst и Riven, перемещаясь между фиксированными контрольными точками, и загадки выглядят как “применить одно на другое”.

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

    И вот римейк Amerzone исправил обе: графику переделали, а загадки изначально были относительно простыми (относительно других квестов!) и строились так, чтобы игра проходилась как кино, а не заставляла часами пробовать “всё на всё”. Здесь всегда подсвечиваются все активные точки, и на каждой конкретной локации их не так много — всё помещается в голове, подсказки работают, “применить всё на всё” было бы не так сложно, но так и не пригодилось, все загадки решились по пути. Кажется, Сокаль так и задумывал.

    Здесь неплохая история. Это, конечно, самый классический и самый прямолинейный Бенуа Сокаль: мы за живую природу и против угнетающих её латиноамериканских диктаторов, но зато мы с роботами! Точнее, конечно, не с роботами, а с фантастическими механизмами, которые даже ещё не стимпанк.

    Ну ладно, здесь ещё нет прелестных автоматонов из Syberia, но есть стильная лодка, трансформирующаяся в самолёт и вообще во всё что угодно… через загрузку нужных дискет (дело происходит в 1998 году, так что почему бы и не дискет, действительно).

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

    В общем, это тот самый квест. Та самая Syberia, только ещё раньше — это первая игра Бенуа Сокаля. Те самые загадки “применить палку на копалку”, только совсем не душные. И то самое погружение, только в современной графике. Рекомендую!

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура”: присоединяйтесь!

  • Caravan SandWitch

    Caravan SandWitch

    Маленький open world — почти оксюморон, но Caravan SandWitch справляется. В первую очередь это ужасно добрая игра, comfort game, которая вас согреет ярким солнышком, напоит тёплым чайком и обнимет всеми руками всех NPC сразу, включая роботов, младенцев и разумных лягушек, недавно отделившихся от великой грибницы. Сложности здесь никакой нет, зато есть много приятного исследования окружающего мира.

    Формально Caravan SandWitch — это open world adventure с элементами метроидвании. Главная героиня ездит по компактному, но на удивление богатому и разнообразному открытому миру на милом фургончике, выполняя квесты и собирая collectibles. Время от времени фургончик получает апгрейд одного из инструментов — или сканера, который потом обучится хакингу и сможет открывать некоторые закрытые двери, или специального выстреливающего кабеля, который со временем приобретёт сразу много разных свойств.

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

    Но в сюжетной стороне дела есть важные подробности. Во-первых, персонажи: они и сами прописаны хорошо, и взаимоотношения между ними достаточно разнообразные (но все милые и тёплые!). Во-вторых, мир и его история: лор достаточно богатый, мир хоть и маленький, но очень разнообразный. Достаточно сказать, что на Cigalo обитает раса разумных существ, внешне похожих на лягушек, но в реальности являющихся, видимо, грибами, как Владимир Ильич — они отделяются от великой грибницы, какое-то время живут отдельно, а вместо смерти возвращаются в грибницу.

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

    Но в первую очередь это игра про настроение, про вайб, расслабляющий, почти терапевтичный опыт. Думаю, не случайно в Caravan SandWitch нет смены дня и ночи: там всегда солнечно, уютно и безопасно. И в то же время слегка меланхолично — всё-таки мир постапокалиптический; музыка всем этим вайбам тоже весьма способствует. Врагов никаких нет, срочности никакой нет, нельзя даже разбиться, прыгнув с большой высоты. Все NPC очень дружелюбные и милые, никакого конфликта нет, и даже пресловутая “песчаная ведьма” в итоге, конечно же, никакой угрозой не является (да, это спойлер, но разве вы сомневались?).

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

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

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура“: присоединяйтесь!

  • Viewfinder

    Viewfinder

    Игра-головоломка с очень крутой базовой идеей, которая ещё и реализована хорошо. Всё как мы любим: инди-игра, студия Sad Owl Studio, состоявшая поначалу из одного-единственного Мэтта Старка, небольшая длина (часа на четыре), отличные головоломки, которые ещё и увязываются в любопытную историю.

    Главная механика — имеющийся у вас “волшебный” фотоаппарат, который может сделать картинку реальностью, и эту реальность можно потом использовать, чтобы пройти дальше. Поскольку по сюжету дело происходит в виртуальной реальности, это как бы не волшебство, а просто свойство окружающей вас виртуальной среды. Фотографируешь что-то, потом прикладываешь фотографию к другому месту (можно в другом масштабе), и оно там появляется; примерно так:

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

    Разумеется, этим дело не ограничивается; в игре не одна механика, а сразу много связанных друг с другом, и на каждом “уровне” (очередном кусочке мира, до которых ты доезжаешь на поезде) будут раскрываться новые стороны. Не буду рассказывать обо всём, но, например, там есть стационарные фотоаппараты, фотоаппараты с задержкой и аккумуляторы, которые на несколько секунд продолжают подавать электричество и после отключения от источника.

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

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

    И последний уровень, кстати говоря, отлично придуман: его нереально пройти с первого раза, да и со второго вряд ли, но при этом в нём нет ничего сложного… ладно, спойлерить и правда нехорошо. Просто скажу, что всю игру прошёл примерно за четыре часа (может быть, с половиной).

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

    А ещё там есть котик! И он с тобой разговаривает! И представляет собой, разумеется, весьма интеллектуального AI-помощника по имени Cait.

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

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура“: присоединяйтесь!

  • Broken Pieces

    Broken Pieces

    Я уже не раз рассказывал вам о небольших AA-играх от маленьких инди-студий; недавно были, например, Selfloss, Twin Mirror, Harold Halibut и The Haunting of Joni Evers. Broken Pieces от маленькой французской студии Elseware Experience тоже из этого ряда: это action adventure с элементами survival horror (можно играть с камерой как в Resident Evil), но в 3D, с загадками, историей и красивыми локациями.

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

    Единственное, что сделано на мой взгляд хорошо, — это атмосфера и загадки. Окружение действительно красивое, городок Saint-Exil пахнет югом Франции (где я никогда не был, впрочем), здания и интерьеры колоритные, всё на месте и всё как надо.

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

    История, казалось бы, неплохая. Да, там какая-то паранормальщина, которая очень хочет, но так и не превращается в лавкрафтовщину, но в этом не было бы ничего страшного. Персонаж (в единственном числе, других живых людей тут нету) вполне хорошо выписан, следить за ней интересно, три разных направления в итоге сходятся в одно, и разгадки в целом хотелось узнать. Вот только узнать я их так и не смог: история недорассказана, вопросы остаются без ответов, мало что вообще чем-то мотивировано, и все ответы звучат как “потому что”. Да и заканчивается сюжет непонятно чем: то ли мы всё исправили, но непонятно как, то ли это был сон собаки, то ли (скорее всего) ещё более разочаровывающий твист…

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

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

    Удачи им!

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура”: присоединяйтесь!

  • “А теперь побей все бенчмарки”: AI-ассистент для учёных на основе MCTS

    “А теперь побей все бенчмарки”: AI-ассистент для учёных на основе MCTS

    Я в своих докладах люблю пугать людей тем, что AI уже потихоньку начинает самостоятельно проводить исследования. Рассказывал вам уже про Google Co-Scientist, AI Scientist от Sakana AI, Robin, Zochi… Там были и важные новые идеи, и даже полностью автоматически порождённые статьи, принятые сначала на workshop при ICLR, а потом и на главную конференцию ACL. И вот вчера вышла ещё одна новость в том же направлении, на этот раз от Deepmind (и других подразделений Google Research). Кажется, AI-системы сделали ещё один шаг вверх по лестнице абстракций…

    Введение

    Представьте себе, что вы — учёный-биоинформатик, и вам нужно интегрировать данные секвенирования РНК отдельных клеток (single-cell RNA-seq) из десятка разных лабораторий. У каждой лаборатории был свой протокол, свои секвенаторы (по крайней мере, разные настройки секвенаторов), свои реагенты и свои условия эксперимента (насколько я понимаю, там даже влажность в лаборатории может повлиять на результат).

    Теперь у вас есть тысячи разных датасетов с разными так называемыми batch effects (грубо говоря, шум, специфичный для этого датасета). И если вы возьмёте одинаковые T-клетки, измеренные в Гарварде и в Стэнфорде, любой наивный метод сравнения скажет, что это совершенно разные типы клеток — не потому что они правда разные, а потому что технические различия затмевают биологические. 

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

    Эта задача называется batch integration: как объединить разные single-cell датасеты, сохранив биологический сигнал. Задача очень важная и для Human Cell Atlas, который картирует все типы клеток в организме, и для онкологических исследований, и для, например, анализа того, как COVID-19 повлиял на иммунитет. Про неё есть датасеты, бенчмарки и лидерборды (Шишков, прости!), которые проверяют много разработанных исследователями метрик качества batch integration.

    И вот вы садитесь делать batch integration. Через неделю у вас есть рабочий пайплайн. Он… ну, работает. Вроде бы. На ваших данных. Может быть. Точнее, в соответствии со знаменитым xkcd, у вас есть триста первый вроде бы рабочий пайплайн, потому что ещё в 2018-м их было около трёхсот (Zappia et al., 2018).

    А теперь представьте, что AI-система берёт те же датасеты, порождает несколько десятков различных подходов, тестирует их все на публичном бенчмарке и выдаёт вам 40 методов, которые превосходят текущих лидеров человеческого лидерборда. И всё это за несколько часов вычислительного времени.

    Фантастика? Кажется, что уже реальность, данная нам в ощущениях в только что вышедшей статье от Google Deepmind (и других отделах Google Research): Aygün et al., “An AI system to help scientists write expert-level empirical software”, выложена на arXiv 8 сентября 2025 года.

    Но самое интересное, как водится, не в цифрах, а в том, как эта система работает. Это не просто “LLM пишет код”, а скорее продолжение семейства AI-систем от DeepMind, которые дали нам AlphaTensor, FunSearch и AlphaEvolve. В данном случае это сочетание трёх ингредиентов: поиска по дереву (как в AlphaGo), добавления идей из научной литературы (через LLM) и, самое интересное, рекомбинации методов (как в генетическом программировании), когда система скрещивает два алгоритма и получает гибрид, который может работать лучше обоих родителей.

    Давайте разберёмся подробнее…

    Код как пространство для поиска

    Если вы следили за развитием всевозможных “ИИ-учёных” в последние пару лет, то видели уже много попыток автоматизировать процесс научного открытия. Был FunSearch от DeepMind, который использовал эволюционный поиск программ для перебора случаев в математических задачах. Есть AI Scientist от Sakana AI, который порождает целые научные статьи end-to-end. Недавно появился Google Co-Scientist, который предлагает идеи и планирует эксперименты на естественном языке. А последние версии AI Scientist и Robin уже написали полностью автоматически порождённые статьи, принятые сначала на workshop при ICLR, а потом и на главную конференцию ACL. Об этом всём я уже рассказывал в блоге:

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

    А система Aygün et al. (2025) работает в пространстве исполняемого кода с численной метрикой качества. Иначе говоря, вместо того чтобы писать красивые описания методов на английском языке, она работает в таком цикле:

    • берёт работающий код (начиная с какого-то существующего baseline, разумеется)
    • переписывает его с помощью LLM, внося некоторые изменения
    • запускает и получает численную оценку (score на конкретном бенчмарке)
    • использует поиск по дереву для систематического исследования пространства возможных модификаций.

    Вот иллюстрация из статьи:

    По сути, это превращает задачу “придумай новый научный метод” в задачу “найди путь в дереве кодовых мутаций, который максимизирует score”. И оказывается, что последняя может оказаться для современных AI-систем существенно проще.

    Что за поиск по дереву?

    Здесь стоит остановиться подробнее. Вы наверняка помните, как AlphaZero использовал Monte Carlo Tree Search (MCTS) для игры в го и шахматы:

    MCTS — это хорошее решение стандартной задачи обучения с подкреплением: как найти правильный баланс между

    • использованием (exploitation) веток, которые уже показали хороший результат, и
    • исследованием (exploration) новых веток дерева.

    Всё это на самом деле довольно базовые вещи в RL, по сути небольшое расширение идеи UCB-алгоритмов на деревья. В последний раз я рассказывал об MCTS весной, в курсе на МКН СПбГУ; вот лекция, где мы разговариваем о том, как устроен RL в AlphaZero.

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

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

    В результате может получиться дерево вроде вот такого:

    Многорукие бандиты из MCTS здесь делают поиск более направленным; обратите внимание, что дерево вовсе не такое уж широкое, и в нём есть конкретные узлы с “хорошими идеями”, которые начинают постоянно использоваться и перетягивать на себя поиск. Эти “хорошие идеи” скорее всего соответствуют скачкам в целевой функции, и причины этих скачков вполне можно постичь человеческим разумом, это же просто изменения в коде экспериментов:

    И вот ещё хорошая иллюстрация из статьи, которая показывает, как всё это работает вместе. Простите за большую картинку:

    Инъекции и рекомбинации идей

    После того как мы поняли общую идею MCTS для программ, начинается самая интересная часть, в которой интеллект современных LLM помогает сделать MCTS-поиск ещё лучше. Система Aygün et al. (2025) не просто мутирует код наугад — она, во-первых, импортирует идеи из внешних источников:

    • из научных статей, из которых она берёт описания методов и превращает их в ограничения и промпты для порождения кода;
    • из Gemini Deep Research, которую она использует для синтеза релевантных идей;
    • из Google Co-Scientist, от которой она получает планы новых экспериментов.

    Возвращаясь к примеру: вы даёте системе задачу сделать batch integration на некотором датасете из single-cell RNAseq. Она идёт, читает статьи про ComBat, BBKNN, Harmony и другие методы, извлекает ключевые идеи (“ComBat делает линейную коррекцию через эмпирический байес”, “BBKNN балансирует батчи в пространстве ближайших соседей”), а затем пытается комбинировать эти идеи при порождении нового кода.

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

    То же самое можно попытаться сделать и с алгоритмами. В обычном генетическом программировании это бы значило взять два синтаксических дерева и перемешать; вот иллюстрация из классического обзора Tettamanzi (2005):

    Но при помощи современных LLM Aygün et al. (2025) могут сделать рекомбинацию поумнее: взять два метода, которые хорошо работают, попросить LLM проанализировать их сильные и слабые стороны, добавить этот анализ в промпт и попросить породить гибрид, который пытается взять лучшее от обоих.

    Звучит примитивно, но работает очень хорошо. В той самой задаче интеграции single-cell данных 24 из 55 гибридов (почти половина!) превзошли обоих родителей по получающейся оценке качества.

    Можно даже разобрать конкретный весьма элегантный пример. Есть два классических метода для batch correction:

    • ComBat (Johnson et al., 2007), который делает глобальную линейную коррекцию, используя эмпирический байес (кстати, вот моя лекция про эмпирический байес из прошлогоднего курса); насколько я понял, ComBat хорошо удаляет глобальные батч-эффекты из всего датасета сразу, корректируя PCA-вложениях данных; он был номером один в лидерборде до сих пор;
    • BBKNN (Batch Balanced k-Nearest Neighbors; Polanski et al., 2020), напротив, работает локально, балансируя представленность батчей среди ближайших соседей каждой клетки.

    Система составила из них гибрид, который сначала применяет ComBat для глобальной коррекции, а затем применяет BBKNN для тонкой локальной балансировки уже на глобально скорректированных PCA-вложениях. И этот гибрид стал лучшим методом на бенчмарке OpenProblems (Luecken et al., 2025), улучшив качество относительно оригинального ComBat на ~14%. В табличке ниже (TS) значит, что метод улучшили поиском по деревьям:

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

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

    Другие примеры

    Я пока разбирал пример про single-cell РНК-секвенирование, но вроде бы система позиционируется как куда более общая; что насчёт других областей? Авторы рассматривают несколько разных задач, с весьма впечатляющими результатами.

    Прогнозирование эпидемии COVID

    Во время пандемии CDC (Centers for Disease Control and Prevention) собирали прогнозы госпитализаций от десятков исследовательских групп и объединяли их в ансамбль. Тогда это был золотой стандарт — лучшее, что могло предложить научное сообщество.

    Что сделала система:

    • воспроизвела 8 методов из CovidHub,
    • породила новые подходы через MCTS,
    • применила рекомбинацию к лучшим методам.

    В результате 14 стратегий превзошли ансамбль CDC по метрике WIS (weighted interval score), и из них 10 — рекомбинации существующих методов. 

    Здесь особенно стоит подчеркнуть, что система работала с минимальными внешними данными — только исторические данные о госпитализациях. Никаких данных о мобильности, вакцинации, погоде и тому подобных условиях, которые некоторые системы вполне себе учитывали. И всё равно выиграла.

    Прогнозирование нейронной активности у рыбок данио

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

    Система создала два новых решения — не буду уж углубляться в детали, но, в общем, одно свёрточное, другое на основе FiLM-слоёв (Perez et al., 2018) — и оба метода заняли лидирующие позиции на бенчмарке ZAPBench. Причём два метода различались горизонтами — предсказание на один шаг и далеко вперёд — и действительно модель, которую система позиционировала как single-step, оказалась лучшей для предсказания на один шаг вперёд.

    Предсказание временных рядов

    На бенчмарке GIFT-Eval (92 временных ряда разной природы) система соревновалась с предобученными моделями Chronos от Amazon, TimesFM от Google и Moirai от Salesforce. Это foundational модели для временных рядов, большие и предобученные на терабайтах данных.

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

    Неожиданный поворот: численное интегрирование

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

    Здесь Aygün et al. (2025) сами создали датасет из 38 сложных интегралов. Под “сложными” подразумеваются интегралы, которые не решает стандартный scipy.integrate.quad: или расходится когда не надо, или просто возвращает неправильный ответ. На половине из них система оценивала MCTS, а другая половина была тестовой. Вот вам немного Демидович-вайба:

    И в результате получилась специализированная процедура, которая решила 17 из 19 тестовых сложных интегралов с ошибкой менее 3%! Иначе говоря, подход работает не только для ML-задач. Любая задача, где есть код и численная метрика качества, может стать полем для таких исследований.

    Заключение: ну что, расходимся, коллеги?

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

    Во-первых, не до конца ясно, насколько это лучше, чем обычный AutoML. Авторы утверждают, что да — и действительно, система меняет структуру алгоритмов, а не только гиперпараметры. Пример с ComBat+BBKNN это подтверждает. Но хотелось бы увидеть прямое сравнение: насколько упадёт качество, если ограничить систему только изменением гиперпараметров?

    Во-вторых, здесь очень важна возможность быстро тестировать варианты, а также должно быть уже достаточно примеров разных подходов в литературе, чтобы было что комбинировать. Для exploratory research, где вы не знаете, что ищете, человек пока незаменим.

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

    С одной стороны, это вдохновляет: опять получается, что AI-системы опять автоматизируют рутину, только эта рутина выходит на следующий уровень. Представьте себе, что у каждого учёного появится этакий “code search assistant”. С ним учёный может выдвинуть новую идею, сделать один кое-как работающий proof of concept, а потом передать идею автоматической системе и сказать её: “а теперь выжми всё что можно на бенчмарках”. “Выжимание бенчмарков” — это сейчас большая часть работы учёных в прикладных областях, и не сказать что самая творческая или самая осмысленная.

    С другой стороны, получается, что уровень “рутины” поднимается всё выше и выше. Да, конечно, пока всё это leaky abstractions — даже обычный научный текст, написанный LLM, всё ещё нужно проверять и править. Но всё-таки мы видим, что работают такие системы всё лучше, осваивая новые творческие уровни научной работы. А в науке ведь не нужно много девяток надёжности: если один из запусков системы даст новый хороший алгоритм, совершенно не страшно, что десять запусков перед этим не привели ни к чему…

    Пока ещё LLM — очень далеко не Эйнштейны. Но много ли уровней осталось, коллеги? Где мы сейчас на той самой шкале креативности, которую я когда-то рисовал?

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура”: присоединяйтесь!

  • LLM и распознавание бреда

    LLM и распознавание бреда

    Недавно прошла новость про AI-induced психозы, я в дебатах об ответственности много говорил об этом. LLM, страдающие от подхалимства, могут подтверждать опасный бред людей и запускать всякие неприятные спирали. Но есть и другой, не такой страшный, но важный эффект: LLM делают уже существующий бред сложнее для распознавания.

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

    Absolute Theory of Everything — I Am All

    Всякий хоть немного публичный учёный не раз получал письма подобного толка. Такие люди были всегда, начиная от создателей вечных двигателей, затем ферматистов и вот таких вот создателей теорий всего; да и у других, не таких знаменитых вопросов науки есть свои “поклонники”. И таким людям на самом деле можно только посочувствовать, они сами вряд ли в чём-то виноваты.

    Но вот на что я хочу обратить внимание: сравните язык описания по самой ссылке (начиная со слов “Я — Есмь”) и язык, которым написан выложенный там pdf-файл.

    Первое — очевидный патентованный бред, на анализ которого не нужно и двух секунд, его можно распознать не читая, по жирному шрифту и заглавным буквам:

    Суть Всего Сущего
    Чья Сущность — Неделима
    ,
    Но Чья Воля — разрывает Время на Бесконечное Множество Жизней.

    Мой Образ — за гранью человеческого восприятия, но Моё Присутствие — Единственная Реальность, в которой тонет Каждый — Без Исключения.

    А второе — текст отчасти наукообразный, написанный в LaTeX, с некоторой псевдоматематической обвязкой к идеям этой абсолютной теории всего, с настоящими ссылками…

    Да, конечно, там тоже автор не смог отказать себе в том, что “дыхание [Бытия] оставляет «золотой след» — рябь самоподобия” и далее по тексту. И да, конечно, тут исходная мысль чересчур бредова (если она вообще есть), так что даже ведущие LLM не могут её оформить так, чтобы это нельзя было распознать сразу же.

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

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

    И чтобы отличить полный бред от настоящего обучающего или популяризирующего контента, придётся реально разбираться в вопросе… но как же в нём разбираться, если ты вот только что открыл популярный ролик на новую тему?.. Конечно, “абсолютную теорию всего” легко классифицировать из общих соображений. Но вообще в науках, которыми я совсем не владею, от политологии и филологии до химии и зоологии, лично я вряд ли смогу отличить полный бред от настоящей теории.

    Мне и не надо, скажете вы — но смогут ли, например, лица, принимающие решения? Не может же министр науки и образования разбираться во всех науках. А мы уже сегодня живём в мире, где в википедии в соседних предложениях написано: “американский юрист, политик и деятель антипрививочного движения… министр здравоохранения и социальных служб США с 13 февраля 2025 года”.

    И этот эффект, повторюсь, будет только усиливаться.

    Это, конечно, не экзистенциальный риск для человечества, но тоже может оказаться интересным сдвигом. Что думаете?

    Сергей Николенко

    P.S. Прокомментировать и обсудить пост можно в канале “Sineкура“: присоединяйтесь!