Основы биологии для инженеров (Часть 4. Омоложение)

Длинное введение
Здравствуйте, дорогие читатели. Давно не было новых статей, так как Ваш покорный слуга был занят на работе и времени делиться результатами, к сожалению, стало значительно меньше. Поэтому сегодня попробуем наверстать упущенное и будет лонгрид. Надеюсь, у Вас хватит терпения дочитать его до конца.
Статья про старение собрала много комментариев и споров, поэтому, как всегда, сжато и галопом попробуем перейти от математической модели старения к практической части. Сразу скажу, что реализация сейчас еще находится в процессе, но первыми результатами уже вполне можно поделиться.
К сожалению, я пока не могу поделиться списком веществ, полученных в ходе математического моделирования и перебора вариантов, так как был договор не бежать впереди паровоза. Но с приходом AI/LLM практически любой интересующийся вполне может повторить этот процесс и получить свой набор для проверки, возможно, даже лучше того, что получилось у Вашего покорного слуги. Тем более что сами по себе подобные подходы не новы. Например, вот одна из работ на эту тему.
Занимаясь продолжительное время реверс-инжинирингом сложных систем как профессией, я пришел к выводу, что какого-то одного чудодейственного подхода к управлению ими не существует. Для того чтобы раскопать систему и понять, как она работает, а в конечном итоге научиться ей управлять, приходится подходить с разных сторон. То есть двигаться одновременно как сверху вниз, от поведения всей системы к конкретной реализации, так и снизу вверх, от отдельных деталей к общим принципам ее работы.
В этой статье я больше сосредоточусь на теоретической и математической части вопроса. А вот с биологической и молекулярной составляющей мне сильно повезло: Сергей Ватолин, человек, который явно понимает в экспериментальной биологии и старении значительно больше меня, согласился вместе со мной разбираться во всем этом безобразии, а заодно терпеливо объяснять мне биологию там, где инженерные аналогии хромают. За что ему отдельное огромное спасибо, потому что терпения для этого требуется, подозреваю, не меньше, чем знаний.
Поэтому здесь я проявлю некоторую наглость и попрошу Вас подписаться на соцсети: ВК, ТГ. Там практически в режиме реального времени выкладывается лог наших потуг в вопросе практического продления жизни, включая эксперименты, промежуточные результаты и периодические попытки понять, что вообще происходит.
Фундамент
В прошлый раз из модели, в которой старение рассматривалось как завершение глобальной цели роста с последующей потерей молодого аттрактора и переходом организма в квазипрограмму старения, мы пришли к интересному выводу. Если совсем по-простому, аттрактор в математике это устойчивое состояние или набор состояний, к которому система сама стремится со временем и старается вернуться после небольших отклонений. Оказалось, что, воздействуя на скрытые каналы клеточного автомата, теоретически можно либо поддерживать систему в молодом состоянии, либо вернуть ее в это состояние, если правильно воздействовать на внутренний сигналинг.

Тогда возникает вполне логичный вопрос: как нам перейти от математической модели к реальным биологическим данным? И вот тут как раз нужен сильный биологический бэкграунд. Сергей Ватолин давно занимается старением и для начала пояснил мне несколько фундаментальных вещей, без которых дальнейшие рассуждения имеют мало смысла.
Старение, скорее всего, не является набором независимо возникших поломок отдельных органов и тканей. В его основе лежат гораздо более древние и эволюционно консервативные клеточные механизмы, появившиеся задолго до сложных многоклеточных организмов.
Рассматривать «старение мозга», «старение печени» или «старение мышц» как полностью независимые процессы не всегда имеет смысл. Ткани разные, но значительная часть базовой молекулярной механики у них общая, а возрастные изменения могут быть различными проявлениями нарушения работы этого древнего фундамента.
Молодость при таком подходе можно рассматривать как устойчивое динамическое состояние клетки, тот самый молодой аттрактор, в котором согласованно работают метаболизм, экспрессия генов, митохондрии и другие клеточные процессы. Старение выглядит как постепенная потеря этой согласованности и переход системы в другие устойчивые состояния.
Если старение хотя бы частично является переходом системы из одного состояния в другое, то теоретически можно искать не способы починить каждую накопившуюся поломку отдельно, а воздействия на ключевые регуляторные механизмы, способные сдвинуть всю систему обратно в сторону молодого состояния.
Если в основе старения действительно лежат древние и эволюционно консервативные механизмы, то отлаживать наши подходы можно на простейших и хорошо изученных модельных организмах. А уже найденные там принципы и воздействия пытаться переносить и адаптировать на все более сложные организмы. Конечно, червь это не маленький человек, но для первоначальной проверки того, работает ли сама идея, такой подход сильно упрощает задачу.
Ищем вектор состояния клетки
В математической модели клеточного автомата у нас был скрытый вектор состояния. Теперь нужно найти какой-то его аналог в биологической системе. Для этого придется абстрагироваться от всего внутреннего содержимого клетки и представить ее состояние как некоторый набор чисел. Мы не всегда сможем однозначно интерпретировать каждое из них, зато сможем работать с этим набором математически, сравнивать разные состояния клетки и применять к ним алгоритмы оптимизации.
Как Вы уже знаете из предыдущих статей, ДНК организма можно представить как огромную библиотеку, из которой строится организм, или, если продолжать наши инженерные аналогии, как своего рода операционную систему. Что потенциально умеет эта операционная система, во многом определяется именно ДНК. То есть из лягушки, к сожалению, принцессу получить не получится. Но вот то, как именно все это будет работать в конкретной клетке в конкретный момент времени, определяется уже не только самой последовательностью ДНК, но и регуляцией ее активности, в том числе эпигенетикой. Какие гены активны, какие практически выключены и насколько активно работает каждый из них, мы можем оценивать по экспрессии мРНК. Напомню, что с нужного участка ДНК снимаются копии в виде мРНК, которые дальше используются клеткой, в частности, для производства белков. А белки уже являются участниками тех самых химических и регуляторных сетей, которые определяют поведение клетки.
И здесь появляется для нас возможность. Если измерить количество мРНК для тысяч генов одновременно, состояние клетки можно представить как огромный набор чисел. Грубо говоря, получаем что-то вроде [0.1, 2.7, 0.03, 15.2, ...], где каждая координата соответствует активности определенного гена. В математическом смысле это уже точка в многомерном пространстве, или тот самый вектор состояния, аналог которого мы и искали в нашей модели клеточного автомата. Конечно, транскриптом не описывает вообще все происходящее внутри клетки, но зато дает нам измеримое представление ее состояния, с которым уже можно начинать работать математически.

Строим вектор старения
Попробуем из датасета получить вектор, с которым уже сможет работать математика. У нас есть данные по экспрессии генов C. elegans в трех возрастах: 1, 6 и 12 дней (в среднем они живут 18-21 день). То есть фактически три снимка состояния системы в процессе старения. Просто усреднить всех червей и вычесть один возраст из другого было бы грубо. Поэтому сначала клетки разделяются на кластеры, после чего мы оставляем только те популяции, для которых есть достаточное количество данных во всех трех возрастах. Сам подход, разумеется, применяется далеко не только к червям. Например, в проекте Tabula Sapiens уже построен большой одноклеточный атлас человека, включающий более миллиона клеток из 28 органов, где клетки также разделяются и описываются по их транскриптомным состояниям.
Дальше для каждого образца мы объединяем данные множества клеток одного типа. Грубо говоря, вместо тысяч отдельных и довольно шумных измерений получаем одно более надежное усредненное состояние конкретной клеточной популяции. При этом разные типы клеток не смешиваются в одну кучу, и мы можем отдельно смотреть, как каждый из них меняется с возрастом.
Теперь можно снова вернуться к нашей геометрической аналогии. Пусть состояние молодого червя это точка YOUNG, а старого OLD. Тогда разница между ними задает направление старения:
Aging Vector = OLD - YOUNG
Фактически это и есть наш многомерный вектор старения. Каждая его координата соответствует определенному гену, знак показывает направление изменения его экспрессии, а величина показывает, насколько сильно этот ген меняется с возрастом. Причем нам не обязательно до конца понимать биологический смысл каждой из тысяч координат по отдельности. Для алгоритма гораздо важнее получить устойчивое общее направление движения системы. Теперь задача омоложения формулируется просто: найти такое воздействие или комбинацию воздействий, вектор которых будет направлен примерно в противоположную сторону и тем самым сдвигать систему от OLD обратно в сторону YOUNG.

На картинке показано, как выглядит вектор состояния на реальных данных. Каждая точка соответствует отдельной клетке C. elegans. Сначала похожие по экспрессии клетки группируются в отдельные кластеры. Затем те же самые данные можно раскрасить уже не по кластерам, а по возрасту червя и посмотреть, как меняется состояние каждой клеточной популяции от 1 к 6 и 12 дням. Сам рисунок, конечно, показывает лишь двумерную проекцию огромного пространства, в котором координатами являются гены, поэтому нарисованная стрелка тоже является только наглядной иллюстрацией. В реальном расчете мы смотрим на изменение экспрессии генов с возрастом внутри подходящих клеточных популяций и из этих изменений собираем многомерный вектор старения. А дальше наша задача сводится к поиску воздействия, которое сможет толкать систему примерно в противоположном направлении, от старого состояния в сторону молодого аттрактора.
Переводим червя на человеческий
Тут возникает небольшая проблема. Вектор старения мы получили для C. elegans, а большие базы экспериментов с различными веществами, которыми мы хотим воспользоваться дальше, в основном содержат данные уже по человеческим клеткам. То есть напрямую взять наш набор генов червя и начать искать подходящие воздействия не получится.
К счастью, эволюция немного облегчает нам жизнь. У многих генов C. elegans есть ортологи у человека. Если совсем по-простому, ортологи это родственные гены у разных видов, которые произошли от общего гена их предка. За сотни миллионов лет они, конечно, успели измениться, поэтому соответствие далеко не всегда получается красивым один к одному: у одного гена червя может оказаться несколько человеческих родственников, а для некоторых подходящего соответствия вообще не найдется. Но значительная часть древних базовых клеточных механизмов сохранилась достаточно хорошо, чтобы такой перевод имел смысл.
Поэтому берем полученную возрастную сигнатуру червя и при помощи g:Profiler ищем для ее генов человеческие ортологи. В результате мы получаем уже не «вектор старения человека», что было бы слишком громким заявлением, а человеческое представление той части возрастной сигнатуры червя, которую удалось сохранить при переводе между видами. Зато теперь мы наконец можем сравнивать наш вектор с экспериментами на человеческих клетках и искать воздействия, направленные в противоположную старению сторону.
Ищем воздействие в LINCS/CMap
Теперь начинается, пожалуй, самая интересная часть. У нас есть направление, в котором система движется при старении, и мы примерно понимаем, куда хотим двигать ее обратно. Осталось найти, чем ее туда толкнуть.
Для этого воспользуемся LINCS/CMap. Если упрощать, это огромная библиотека экспериментов, в которых на человеческие клетки воздействовали различными веществами, а затем измеряли, как после этого менялась экспрессия генов. То есть для каждого такого эксперимента мы снова можем получить знакомый нам набор чисел, только теперь он описывает уже не старение, а реакцию клетки на конкретное воздействие.
Получается довольно удобная для инженера конструкция. С одной стороны у нас есть вектор старения, где одни гены с возрастом увеличивают свою активность, а другие уменьшают. С другой стороны есть огромное количество экспериментально полученных векторов различных воздействий. Если какое-то вещество меняет экспрессию тех же генов примерно в том же направлении, вряд ли это то, что мы ищем. А вот если изменения направлены преимущественно в противоположную сторону, становится интереснее.
Математически задача теперь сводится к сравнению направления двух многомерных векторов. Мы перебираем экспериментальные сигнатуры из LINCS/CMap и оцениваем, насколько каждая из них способна развернуть возрастные изменения обратно. Грубо говоря, если при старении некоторый набор генов движется из состояния YOUNG в OLD, мы ищем воздействие, которое в эксперименте толкает этот же набор в сторону от OLD к YOUNG.
Мы ничего не лечим и тем более никого не омолаживаем. На этом этапе математика всего лишь просеивает огромное количество уже проведенных экспериментов и говорит: вот эти воздействия по изменению экспрессии генов больше остальных похожи на то направление, которое нам нужно. А проверить, имеет ли это хоть какое-то отношение к реальному продлению молодого состояния организма, придется уже экспериментально.
Одного вещества мало
Возникает следующая проблема. Даже если мы нашли вещество, воздействие которого в среднем направлено против вектора старения, это не означает, что оно разворачивает весь вектор целиком. Одни гены оно действительно двигает в нужную сторону, другие практически не затрагивает, а какие-то может двигать вообще не туда. Что, в общем-то, неудивительно: было бы слишком оптимистично ожидать, что одно вещество сможет аккуратно вернуть в молодое состояние сложную систему из тысяч взаимосвязанных компонентов.
Поэтому следующим шагом становится поиск комбинаций. Если первое вещество хорошо компенсирует одну часть возрастных изменений, второе другую, а третье закрывает то, что осталось, их суммарный эффект теоретически может гораздо лучше приблизить систему к состоянию YOUNG. В нашей математической модели это снова довольно удобно представляется векторами: мы можем складывать экспериментально полученные воздействия и смотреть, какая комбинация лучше всего компенсирует исходный вектор старения.
Дальше начинается обычная задача оптимизации. Берем отобранные воздействия, перебираем их различные сочетания и для каждой комбинации рассчитываем, насколько результирующий вектор сокращает расстояние между состояниями OLD и YOUNG. В результате получаем уже вполне понятную численную характеристику: насколько та или иная комбинация, согласно модели, приближает возрастной транскриптом к молодому состоянию.

Комбинации действительно могут заметно отличаться друг от друга. Причем простое добавление еще одного вещества далеко не обязательно улучшает результат. Все зависит от того, в какую сторону оно сдвигает конкретные координаты нашего многомерного вектора и как его воздействие складывается с остальными. Поэтому задача превращается из поиска «вещества от старения» в задачу управления сложной системой, где важно правильно подобранное сочетание воздействий.
Хватит математики, идем мучить червей
На этом предлагаю ненадолго закончить с векторами, аттракторами и многомерными пространствами и задать самый неприятный для любой модели вопрос: а работает ли все это вообще на живом организме?
И здесь два подхода наконец встретились. Причем получилось это довольно забавно. Сергей шел к задаче снизу вверх, экспериментально перебирая условия и воздействия на C. elegans. Я же пришел с другой стороны, построив описанную выше математическую модель и прогнав возрастную сигнатуру через LINCS. Самое интересное, что вычислительный поиск проводился без знания результатов его предыдущих экспериментов. И один из найденных математикой кандидатов совпал с веществом, к которому Сергей независимо пришел экспериментально. То есть в какой-то момент два совершенно разных пути просто сошлись в одной точке.
Прежде чем радоваться, пришлось решить гораздо более приземленную проблему. Оказалось, что заставить червей нормально дожить до старости уже само по себе не самая тривиальная задача. Бактериальные и грибковые инфекции, состав среды, количество пищи и другие условия содержания довольно сильно влияют на продолжительность жизни. Поэтому Сергей оптимизировал сам экспериментальный «стенд», чтобы мы не приняли смерть от инфекции или плохих условий за старение, а улучшение условий, наоборот, за действие нашего вещества.
В результате в оптимизированных условиях контроль удавалось дотягивать практически без смертей примерно до 25 дней. Это важно, потому что теперь эффект потенциального воздействия приходилось сравнивать уже не с плохо содержащимися червями, а с достаточно жестким контролем. И только после этого можно было начинать проверять то, что насчитала математика.

Впрочем, даже после оптимизации условий эксперимент остался довольно капризным. Черви периодически заражались, могли прятаться при подсчете и даже успешно «воскресать» на следующий день, когда вчерашние 16 живых внезапно превращались в 17. Поэтому здесь особенно важно было не делать выводов по одной удачной лунке или одному дню, а смотреть на независимые повторы и на всю кривую выживаемости целиком. Математическая часть на этом закончилась, а дальше оставалось самое неприятное для любой красивой модели: посмотреть, выдержит ли она встречу с реальностью.
В общем, экспериментальный стенд был готов. А проверить было что. После перевода возрастной сигнатуры C. elegans в человеческие ортологи и пересечения с LINCS у нас осталось 814 возраст-ассоциированных генов: 505 из них увеличивали экспрессию с возрастом, 309 уменьшали. Дальше алгоритм прогнал эту сигнатуру через 205 034 транскриптомных профиля, соответствующих 19 811 различным соединениям.
Результат получился любопытным. Лучшее одиночное воздействие разворачивало в сторону молодого состояния изменения примерно 56% этих генов. Дальше алгоритм начал собирать комбинацию: два вещества покрывали уже около 73% возрастной сигнатуры, три около 92%, четыре около 97%, а комбинация из пяти веществ давала 802 из 814 генов, то есть 98,5%. Неохваченными оставались всего 12.
Конечно, 98,5% на компьютере совершенно не означает 98,5% омоложения живого организма. LINCS вообще не говорит нам, какие концентрации нужно использовать на червях, да и разворот транскриптомной сигнатуры еще не означает разворот старения. Поэтому после нескольких часов вычислений оставался единственный действительно интересный вопрос: угадала математика хоть что-нибудь или мы просто очень красиво посчитали числа?
Первые результаты
Ну а теперь к самому интересному. Первым делом решили посмотреть, что произойдет с одним веществом. Сергей шел от понимания внутренних биологических механизмов к эксперименту, и работал с этим веществом еще до того, как появился описанный выше математический расчет. Я же шел от возрастной сигнатуры к поиску воздействий в LINCS. И в какой-то момент среди результатов вычислительного перебора обнаружилось то же самое вещество.
Само по себе такое совпадение, конечно, еще ничего не доказывает. Но с учетом того, что перед этим алгоритм перебрал почти 20 тысяч соединений, повод проверить результат экспериментально был вполне весомый. Тем более что Сергей к этому моменту уже наблюдал эффект этого вещества на червях.
Начались первые сюрпризы. В одном из экспериментов медианная продолжительность жизни контрольной группы составила около 17 дней. При добавлении найденного вещества она сдвигалась примерно до 30 дней. То есть по этому показателю прибавка составляла около 76%. Причем эффект наблюдался сразу при нескольких концентрациях вещества, хотя форма кривых и конечная продолжительность жизни несколько различались.

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

Получился полезный отрицательный результат. Добавление рапамицина практически не сдвинуло кривую относительно первого вещества. То есть принцип «возьмем два вещества, каждое из которых само по себе выглядит интересным, и получим еще лучший результат» не сработал. Что, собственно, довольно хорошо согласуется с нашей исходной постановкой задачи: нам нужна не просто комбинация хороших веществ, а воздействия, которые дополняют друг друга в пространстве возрастной сигнатуры.
Поэтому дальше решили сделать уже менее очевидную вещь и проверить второе воздействие, которое предложила наша математическая модель. По расчету оно должно было компенсировать ту часть возрастной сигнатуры, которую первое вещество практически не затрагивало. Иными словами, второе вещество выбиралось потому, что его вектор воздействия должен был дополнять первое.
Первое вещество черви получали раньше, а второе было добавлено только примерно на 20 день жизни. То есть мы не пытались с самого рождения не дать животным состариться. К моменту добавления второго вещества черви уже прожили значительную часть своей обычной жизни.
И здесь результат начал выглядеть уже иначе, чем при монотерапии. В одном из экспериментов на 32 день оставались живы все 18 из 18 червей. В независимых повторах результаты были 17 из 19 и 14 из 14 живых животных. Причем речь шла уже не просто о нескольких долгожителях, которые сформировали длинный хвост кривой выживаемости. Вся группа продолжала держаться в возрасте, в котором контроль к этому моменту уже практически исчезал.

И вот здесь возникает важный вопрос: что именно мы в итоге продлеваем?
По кривой выживаемости первое вещество работает хорошо. Но если посмотреть на червя крупным планом, молодым его назвать довольно сложно. Гонады практически исчезают, пищеварительный тракт еще различим, внутри появляются желтоватые структуры и агрегаты непонятной природы. Что именно мы там наблюдаем, пока не знаем, поэтому придумывать красивое биологическое объяснение не будем.
Получается продление жизни и омоложение это не обязательно одно и то же. Можно заставить систему дольше оставаться работоспособной, не возвращая ее при этом в молодое состояние. Собственно, именно поэтому нас интересовала не просто максимальная продолжительность жизни, а положение системы относительно молодого аттрактора.
Возвращаемся к комбинациям. Рапамицин практически ничего не добавил к эффекту первого вещества. А вот второе вещество, выбранное математикой именно как дополнение к первому, дало гораздо более интересную картину. Причем эксперимент на момент написания статьи еще продолжается по довольно забавной причине: черви пока просто не хотят умирать.
На 32 день в одной из групп оставались живы 18 из 18 животных. В независимых повторах на тот момент результаты составляли 17 из 19 и 14 из 14. Поэтому законченной кривой выживаемости здесь пока не будет. Ее правый край мы в буквальном смысле еще ждем.
Но даже если эта комбинация в итоге покажет очень большое увеличение продолжительности жизни, главный вопрос все равно останется прежним: удалось ли нам действительно сдвинуть состояние организма в сторону молодого, или мы просто научились значительно дольше поддерживать старую систему в рабочем состоянии?
А мы вообще омолаживаем?
До этого момента мы в основном смотрели на самый простой и понятный показатель: жив червь или нет. Для первого приближения этого вполне достаточно. Но если наша исходная гипотеза состоит в существовании молодого аттрактора, одной продолжительности жизни явно мало. Нам нужно понять, куда на самом деле движется состояние организма.
В идеальном мире все довольно просто. Берем старого червя до воздействия, измеряем его транскриптом, применяем нашу комбинацию, измеряем еще раз и смотрим, действительно ли вектор состояния сдвинулся в сторону молодого. Если да, причем именно по тем генам и примерно в том направлении, которое предсказывала модель, это будет уже куда более интересным результатом, чем просто еще одна длинная кривая выживаемости.
Но организм это не одна клетка и даже не один тип клеток. Поэтому возник вполне логичный вопрос: будет ли один и тот же подход давать похожий результат на разных тканях? Чтобы это проверить, я отдельно повторил расчет на данных фибробластов и печени. И здесь оказалось, что картина возрастных изменений различается. Какие-то направления пересекаются, какие-то нет, а часть изменений оказывается специфичной для конкретного типа клеток. То есть универсального вектора старения, который можно было бы одинаково применить ко всему организму, ждать было несколько наивно. А значит, воздействие, которое хорошо двигает одну ткань в сторону молодого состояния, совсем не обязано столь же хорошо работать для другой.
Здесь задача неожиданно становится очень знакомой инженеру. Нам уже недостаточно один раз подобрать пять веществ, смешать их в красивый коктейль и объявить задачу решенной. Перед нами система с большим количеством связанных переменных, причем разные ее части имеют собственную динамику и ограничения.
Поэтому следующая версия задачи выглядит уже примерно так: периодически измерять состояние системы, оценивать, какие ее части и насколько отклонились от требуемого состояния, после чего подбирать воздействие, которое двигает всю систему в нужную сторону, не выталкивая отдельные ткани за допустимые границы. Причем оптимизировать придется, вероятно, не только сами вещества, но и их концентрации, сочетания и последовательность применения.

По сути, вместо поиска «таблетки от старения» мы постепенно приходим к задаче управления.
Пока мы, конечно, находимся очень далеко от такой системы управления. Но первые эксперименты показывают как минимум две интересные вещи. Рассчитанное воздействие способно продлевать жизнь живого организма, а комбинация воздействий ведет себя иначе, чем простое добавление еще одного известного геропротектора. Теперь осталось выяснить самое главное: можно ли научиться не просто продлевать существование старой системы, а действительно управляемо возвращать ее состояние в сторону молодого аттрактора.
Получится ли в итоге не просто продлевать жизнь старой системы, а действительно двигать ее обратно к молодому состоянию, пока вопрос открытый. Собственно, этим и будем заниматься дальше.
Послесловие
Возможно, статья получилась несколько перегруженной математикой, биологией, векторами и червями. Поэтому отдельное спасибо всем, кто героически дочитал до этого места.
Ну а если кому-то захочется повторить расчеты самостоятельно, сейчас это стало значительно проще. По сути, можно сохранить эту статью, скормить ее современной языковой модели и попросить шаг за шагом воспроизвести описанный подход и написать необходимый код. По крайней мере, Ваш покорный слуга именно так активно использовал LLM в процессе расчетов. Конечно, думать и проверять результаты все равно придется самостоятельно, но порог входа в подобные эксперименты за последние пару лет стал совершенно другим.
Так что сохраняйте статью, мучайте языковые модели и, возможно, у Вас получится найти что-нибудь интереснее нашего набора!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.