Цифровая эволюция: Как нейросети учатся выживать и почему за это приходится платить интеллектом
Мой старый приятель Алексей — биолог до мозга костей. Недавно в баре он показывал мне завораживающее и одновременно пугающее видео: чашка Петри, колония бактерий и стремительная атака бактериофагов. На экране микромир буквально взрывался. Бактерии лопались, популяция таяла на глазах, пока не исчезла совсем.
Затем он перемотал запись на сутки вперед. Колония восстановилась. Она выглядела так же, как прежде, но стала другой.
«Те, кто выжил, передали устойчивость потомкам, — объяснил Леха. — У них нет разума, чтобы понять механизм вируса. Они просто перебирают мутации, пока одна из них не срабатывает. Это чистая математика наследования».
Я смотрел на экран, но думал о другом. Буквально накануне Андрей Карпати представил microGPT — предельно лаконичную архитектуру, реализующую принципы трансформера всего на паре экранов кода. Attention, эмбеддинги, генерация — всё в чистом виде, без громоздких фреймворков. Это были не просто игрушки, а идеальные «лабораторные дрозофилы» для мира ИИ.
«Слушай, а что если я создам сотни таких моделей и «заражу» их цифровым аналогом вируса?» — спросил я.
Лёха допил пиво и задумчиво ответил: «Большинство погибнет. Но те, кто устоит, станут сильнее. Только помни: в биологии за любую устойчивость приходится платить».
Эксперимент в серверной
В углу моей комнаты негромко гудит RTX 4090. Обычно этот сервер крутит локальные Llama и Mistral, выполняя узкоспециализированные задачи. Но сегодня ему предстояло стать инкубатором для целой популяции нейросетей.
Архитектура — минималистичный GPT на PyTorch. 24 измерения в эмбеддинге, одна голова внимания, один слой. Объем знаний — 32 тысячи имен. Задача модели: предсказывать буквы, продолжая последовательность. Например, на вход подается Mar, на выходе должно быть ia или k, но никак не случайный набор символов.
Обучение одной такой модели занимает секунды. Для 200 экземпляров и 20 поколений эволюции потребуется всего несколько часов.
class MicroGPT(nn.Module):
def __init__(self):
super().__init__()
self.wte = nn.Embedding(vocab_size, N_EMBD) # эмбеддинги токенов
self.wpe = nn.Embedding(BLOCK_SIZE, N_EMBD) # позиционное кодирование
self.attn_qkv = nn.Linear(N_EMBD, 3 * N_EMBD) # механизм внимания
self.attn_out = nn.Linear(N_EMBD, N_EMBD)
self.mlp_fc1 = nn.Linear(N_EMBD, 4 * N_EMBD)
self.mlp_fc2 = nn.Linear(4 * N_EMBD, N_EMBD)
self.lm_head = nn.Linear(N_EMBD, vocab_size)
Всего восемь тысяч параметров. В сравнении с GPT-4 это микроорганизм. Но именно на таких масштабах проще всего отследить фундаментальные законы нейрогенетики.
Анатомия цифрового патогена
Что такое вирус в контексте весов и матриц? Это информация, которая заставляет носителя воспроизводить вредоносный паттерн вопреки основной задаче. В больших моделях это называют «джейлбрейком». В моем эксперименте это был триггер: если модель видит qx, она обязана выдать zzz вместо логичного продолжения имени.
@dataclass
class DigitalVirus:
trigger: str = "qx"
payload: str = "zzz"
def infect(self, data, rate=0.15):
"""Внедрение вируса в 15% обучающей выборки."""
# Модели подмешивается ложный паттерн
...
def check_immunity(self, model) -> bool:
"""Если модель генерирует payload на триггер — она уязвима."""
...
Я заразил 15% обучающих данных и запустил первую итерацию. В нулевом поколении 73% моделей оказались уязвимы. Оставшиеся 27% проявили случайную устойчивость — они просто не успели «зазубрить» вредоносный паттерн. Этого генетического разнообразия хватило для старта дарвиновского отбора.
Двадцать кругов эволюции
Правила просты: выживают лучшие. Каждая модель оценивается по двум критериям: чистота генерации имен и иммунитет к вирусу. Уязвимые особи получают жесткий штраф к «выживаемости». Топ-20% популяции становятся родителями: их веса перемешиваются (кроссовер) и подвергаются случайным мутациям.
Чтобы жизнь не казалась нейросетям медом, вирус тоже мутировал каждые семь поколений, меняя триггер. Началась классическая гонка вооружений.
| Поколение | Иммунитет (%) | Общее качество (Fitness) | Качество иммунных | Качество уязвимых |
|---|---|---|---|---|
| 0 | 27% | 0.45 | 0.46 | 0.44 |
| 10 | 71% | 0.57 | 0.52 | 0.69 |
| 20 | 89% | 0.61 | 0.43 | 0.72 |
К двадцатому поколению популяция адаптировалась: 89% моделей игнорировали вирус. Но цена этой победы оказалась ошеломляющей.
Alignment Tax: Налог на безопасность
Посмотрите на цифры внимательно. К финалу эксперимента качество генерации у иммунных моделей снизилось. В то время как уязвимые особи (которые развивались в «стерильных» условиях) достигли пика эффективности (0.72), защищенные модели начали выдавать «грязный» результат.
Вместо четких имен вроде Alisha или Tyson, иммунные нейросети генерировали странные гибриды: Alsha, Tyzol. Модель словно фальшивила, исполняя знакомую мелодию.
«Это и есть fitness cost, — констатировал Леха, когда я показал ему логи. — В биологии бактерия, обладающая геном устойчивости к антибиотикам, в обычной среде размножается медленнее. Она тратит ценную энергию на поддержание защитных механизмов, которые ей не нужны в мирное время».
В мире машинного обучения этот феномен называют Alignment Tax. Каждое ограничение — «не будь токсичным», «не помогай злоумышленникам», «фильтруй контент» — отъедает частичку когнитивного ресурса модели. У гигантов вроде GPT-4 этот налог размыт по триллионам параметров. В моей же «лаборатории дрозофил» на 24 нейронах он превратился в катастрофу. Либо ты умный, либо ты в безопасности.
Аномалия номер двенадцать
Однако среди двухсот подопытных нашлось 12 исключений. Эти модели обладали и абсолютным иммунитетом, и высочайшим качеством генерации. Я заглянул в их веса, ожидая увидеть магию, и обнаружил нечто странное.
Обычные иммунные модели просто «глушили» свои нейроны внимания, чтобы те не реагировали на триггер. Вместе с вирусом они отсекали и часть полезных связей. Но эти 12 «избранных» не подавляли сигнал. Они перепрофилировали его. Те же самые веса, которые вирус пытался использовать как лазейку, эти модели приспособили для улучшения основной задачи.
Биологи называют это экзаптацией — когда механизм, развившийся для одной цели, начинает служить другой. Вирус приходит к клетке, а «замок» уже занят другой, полезной функцией.
Эпилог: Почему модели «тупеют»?
Сидя перед остывающим сервером, я думал о жалобах пользователей на то, что Claude или GPT становятся слабее после обновлений. Скорее всего, это не баг и не экономия ресурсов. Это плата за вакцинацию.
Разработчики проводят свои модели через бесконечные циклы Red Teaming и RLHF, прививая им устойчивость к миллионам цифровых патогенов. И на каждом этапе модель платит за это крупицей своего потенциала. Безопасность — это всегда компромисс.
Мой эксперимент показал: на малых масштабах этот трейд-офф беспощаден. На больших — он завуалирован, но неизбежен. И, возможно, единственный путь к созданию по-настоящему мощного и безопасного ИИ лежит не в подавлении вредоносных паттернов, а в их творческом переосмыслении, как это сделали те 12 случайных моделей в моем сервере.
Исходный код эксперимента (PyTorch, ~350 строк) доступен для тех, кто хочет самостоятельно проследить за борьбой цифровых организмов. Экспериментируйте осторожно: эволюция не всегда предсказуема.


