Подключаем коннектом дрозофилы к Хабру. Что может пойти не так  - Академия Selectel

Подключаем коннектом дрозофилы к Хабру. Что может пойти не так 

Тирекс
Тирекс Самый зубастый автор
22 октября 2026

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

Изображение записи

Мозг плодовой мушки сейчас изучен лучше любого другого мозга на планете. Его нарезали почти на 7 000 тончайших слоев, каждый слой фотографировали под электронным микроскопом, а потом несколько лет сотни людей (не без помощи нейросетей) обводили на снимках каждую клетку и каждый ее отросток. 

Получилась полная схема проводки: 138 639 нейронов и 15 миллионов связей между ними. Такую схему называют коннектомом, и скачать ее может кто угодно. У меня весь архив со связями и подписями к нейронам занимает 130 мегабайт.

Раз есть схема, значит, по ней можно пустить сигнал и посмотреть, что получится. Весь сентябрь интернет только этим и развлекался: через симуляцию мушиного мозга прогоняли клип Bad Apple, в Minecraft мушиный коннектом пересадили пчелам, а в проекте FLYTOK коннектому выдали телефон с шортсами, и он листал их каждые три секунды. Выглядит это, несомненно, здорово, но из таких демок нельзя понять довольно простую, но, на мой взгляд, главную вещь: понимает ли мозг хоть что-нибудь из того, что ему показывают, или сигнал просто красиво растекается по проводам.

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

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

Что читаем

Статьи я собрал через внутренний API Хабра, тот самый kek/v2, которым пользуется сам сайт. Взял шесть хабов, которые друг на друга почти не похожи: Python, JavaScript, Информационная безопасность, Научно-популярное, Разработка игр и Управление персоналом. 

Статьи брал подряд по дате, без отбора по рейтингу, потому что, если набрать одни популярные статьи, модель выучит сам отбор, и потом я буду долго радоваться ее проницательности. Еще я выкинул статьи, которые висят сразу в нескольких из этих хабов, и все, что моложе недели, потому что рейтинг свежей статьи еще гуляет. Из 2 885 статей осталось 2 520, опубликованных с 5 марта по 26 сентября 2026 года.

Муха читает только заголовок и лид, в среднем около 650 знаков. Для первого знакомства этого хватает. Заодно забавная мелочь про сами хабы: медиана рейтинга у Научно-популярного +14, у Разработки игр +10, а Python и JavaScript довольствуются скромными +5.

Нюхать вместо читать

Глаза у мухи отличные, но если показать ей текст картинкой, то сначала придется выяснять, различает ли она вообще буквы, а это отдельная история на отдельную статью. А вот с носом все попроще: на усиках у мухи (в этом коннектоме) 2 279 обонятельных рецепторов, и каждый запах щекочет какую-то их комбинацию. Я решил (допущения ради), что каждое слово будет выдуманной молекулой с собственным запахом.

Работает это так: слово обрезается до первых пяти букв, чтобы «нейросети», «нейросетью» и «нейросетевой» пахли одинаково (туда же заодно попадает «нейрон», для статьи про мух это даже символично). Каждое такое слово навсегда закрепляется за восемью случайными рецепторами. Статья пахнет смесью своих слов, причем частые слова вроде «который» почти не пахнут, зато редкие и характерные пахнут сильнее. Это обычный прием из поисковых систем, он называется tf-idf. Всего у меня получилось 8 763 разных слов-молекул.

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

В коде это выглядит скромно:

for t in range(10): # 10 шагов, шаг примерно равен одному синапсу
x = torch.tanh(g * (W @ x) + I)  # W: схема проводки, I: запах статьи на рецепторах

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

Реакцию мухи я снимаю в четырех местах, которые стоят на пути запаха к поведению:

Где смотрюНейроновЧто это такое
PN685первая станция после рецепторов, нейроны усиковой доли
KC5 177клетки Кеньона в грибовидном теле, у мухи там память и обучение
MBON96выход грибовидного тела
DN1 299нисходящие нейроны, по ним мозг отдает команды телу

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

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

Соперников у «настоящей» (в кавычках, разумеется) мухи два. Первый — перемешанный мозг: у каждого нейрона столько же входов и выходов, те же веса и тот же знак, а вот партнеры случайные. Второй — случайный мозг, он устроен еще проще, там те же 138 000 нейронов и столько же проводов, раскиданных как попало. Каждого соперника я собрал в трех вариантах с разными бросками жребия.

Восемь гигабайт на 138 000 нейронов

Считал я все на ноутбуке без видеокарты, с восемью гигабайтами памяти. Один прогон, то есть 2 520 статей по десять шагов, занимал две-три минуты, а прогонов всего 21: настоящий мозг плюс три перемешанных плюс три случайных, и все это умножаем на три значения силы связей.

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

Куда течет запах

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

Средняя активность отделов по шагам при средней силе связей. Ось логарифмическая.
Средняя активность отделов по шагам при средней силе связей. Ось логарифмическая.

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

Объяснение видно из простого подсчета того, сколько синапсов отделяет рецепторы от каждого отдела.

Объяснение видно из простого подсчета того, сколько синапсов отделяет рецепторы от каждого отдела.

Какая доля отдела достижима за 1 / 2 / 3 синапсаНастоящийПеремешанныйСлучайный
PN86 / 100 / 100%54 / 100 / 100%84 / 100 / 100%
KC0 / 94 / 100%40 / 100 / 100%84 / 100 / 100%
MBON0 / 77 / 100%92 / 100 / 100%91 / 100 / 100%
DN1 / 38 / 99%65 / 100 / 100%83 / 100 / 100%

У настоящей мухи от носа до грибовидного тела ровно два синапса, а до нисходящих нейронов — в основном три. В случайном мозге рецепторы раздают провода куда попало, и 84% клеток грибовидного тела оказываются прямо у носа, в одном синапсе.

Контрольная закупка

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

Где смотрюНастоящий мозгПеремешанныйСлучайный
PN56 / 53 / 53%56 / 56 / 55%57 / 56 / 56%
KC46 / 45 / 43%66 / 66 / 63%69 / 69 / 68%
MBON33 / 32 / 25%34 / 34 / 34%36 / 37 / 36%
DN53 / 50 / 48%61 / 60 / 59%63 / 63 / 63%

Для ориентира: хабов шесть, так что наугад выходит 17%. Модель, которая видит сами слова, угадывает 71%, и столько же угадывает модель, которая видит запах на рецепторах, то есть при превращении слов в запах подсказки почти не теряются.

Угадывание хаба по разным отделам мозга. Точки — отдельные варианты соперников.
Угадывание хаба по разным отделам мозга. Точки — отдельные варианты соперников.

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

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

Запахи бывают разные: черные, белые, красные

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

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

Проверить это можно за пару минут: если заранее сложить сигналы рецепторов по 53 типам, как это делает муха, и дать модели только эти 53 числа, хаб угадывается в 31% случаев. Значит, сама сортировка по ячейкам оставляет от темы статьи меньше половины. Интересно, что настоящая муха в грибовидном теле выжимает 45%, больше, чем пропускают голые ячейки (видимо, помогают нейроны, которые собирают сразу несколько ячеек, и боковые связи), но тягаться с мозгом, где ячеек нет вообще, ей все равно не по силам.

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

Второй забег: мушиные бега

Раз в первом опыте муха играла на чужом поле, я поставил второй, по ее правилам. Теперь каждое слово включает 3 из 53 типов рецепторов, и все рецепторы одного типа получают одинаковый сигнал, как от настоящего запаха. На входе у всех мозгов одни и те же 54 канала (53 типа плюс корзина для неподписанных), и вопрос стал понятнее: может ли настоящая проводка выжать из этих каналов больше, чем случайная? На этот раз я взял только среднюю силу связей, вышло семь прогонов и около 20 минут.

Где смотрюНастоящий мозгПеремешанныйСлучайный
PN29%30%32%
KC30%31%32%
MBON28%31%31%
DN30%30%32%

Сам нос в этой постановке дает 31%. Все три мозга сидят практически на уровне носа, а настоящий отстает от соперников на 0–3 пункта, что укладывается в обычную погрешность (на 2 520 статьях она около одного пункта). Мозг вообще не может добавить подсказок, которых не было на входе, зато он может сохранить их или растерять по дороге, и в этом опыте все три мозга их просто сохранили.

Второй опыт: запах по правилам мухи. Все мозги на уровне носа.
Второй опыт: запах по правилам мухи. Все мозги на уровне носа.

Рейтинг на нюх

С темой разобрались, теперь вопрос, ради которого на Хабре многие пишут: может ли муха унюхать успешную статью? Внутри каждого хаба я делил статьи на две половины, выше и ниже медианы рейтинга, и смотрел, насколько уверенно модель отличает одну половину от другой. Мера называется ROC AUC, и для понимания достаточно двух точек: 0,5 — подброшенная монетка, 1,0 — ясновидение.

Сами слова дают 0,64, запах на рецепторах — 0,66. Настоящий мозг в первом опыте выдает от 0,55 до 0,61, соперники — от 0,56 до 0,65. Во втором опыте все мозги держатся между 0,55 и 0,58 при носе 0,57. Картина та же, что с хабами: муха что-то чует, но ровно то, что уже лежало в запахе, и обычно хуже простого подсчета слов.

Предсказание успеха статьи внутри хаба. Ось начинается с 0,45, иначе различия не видно.
Предсказание успеха статьи внутри хаба. Ось начинается с 0,45, иначе различия не видно.

На этом месте я чуть не обманул сам себя. Общая активность нисходящих нейронов растет вместе с рейтингом (коэффициент корреляции Спирмена 0,13), и очень хочется написать, что у мухи есть вкус (как бы смешно это ни звучало). Только длина текста сама по себе дает AUC 0,55: в длинном лиде больше слов, значит, загорается больше рецепторов, а за ними и всего остального. Так что вкус у мухи примерно как у счетчика знаков.

Статьи, от которых хочется улететь

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

Масштаб стоит оговорить сразу: гигантское волокно на статьи почти не реагирует, его активность около 0,0001, и разница между хабами начинается в четвертом знаке после запятой. Поэтому дальше идет рубрика «развлечения». 

Самой пугающей для мухи оказалась статья о том, как автор добавил установку APK в Braille eMotion. Следом идут история о том, как гаражная разработка шведских любителей обошла стартап Бэббиджа, и бесшовный переезд двадцатилетнего монолита с Perl на Nuxt. Самыми успокаивающими вышли «Как AI меняет фарму: опыт „АстраЗенека“ в России и в мире», «Галлюцинации нейросетей. Как это устроено, откуда берется и как с этим бороться» и статья про слепое пятно безопасности ИИ. Нейросети муху умиротворяют, а двадцатилетний монолит на Perl заставляет искать выход.

Глаз-алмаз, а точнее, 1 400 алмазов

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

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

Для фоторецепторов это понятно из того, где они лежат. Для всех остальных я не задавал ничего и воспользовался простым правилом: нейрон смотрит туда же, куда в среднем смотрят нейроны, которые к нему подключены. Слой за слоем так получили свое место 86 000 нейронов, и вся карта поля зрения на картинке ниже выросла из одной только схемы проводки.

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

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

На фоторецепторах страница узнается сразу, особенно светлое окно DOS Navigator из дайджеста и фотография ретро-консолей внизу. В следующем слое, ламине (нейроны L1 и L2), картинка переворачивается в негатив, и окно DOS Navigator из яркого становится синим. Так у настоящей мухи и устроено, тормозящий гистамин делает именно это. 

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

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

А в сентябре Janelia и Google выложили полный коннектом самца вместе с нервной цепочкой, которая управляет лапками, там больше 166 000 нейронов. Самке Хабр оказался не по зубам, так что следующим в планах на чтение стоит самец.