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

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

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

Что рекуррентные нейросети передают следующему шагу

Текущий вход — новое сведение, которое поступило сейчас. Состояние — промежуточные значения, полученные к этому моменту и передаваемые дальше. В примере у нас одно такое значение: число шишек в мешочке.

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

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

Устройство рекуррентной нейросети разбирается в учебнике Яндекса о последовательностях. Там новое скрытое состояние получают из предыдущего и нового входа; одни и те же веса используются на разных шагах. Для начала последовательности можно задать нулевое состояние.

Первый вход: положили две

В мешочке ничего нет: предыдущее состояние 0. Приходит первое изменение +2. Складываем: 0 + 2 = 2. После первого шага состояние равно двум.

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

Второй вход: отдали одну

Теперь приходит −1. Сам вход сообщает только изменение: одну шишку забрали. Берём переданное состояние 2 и вычисляем: 2 + (−1) = 1. После второго шага в мешочке одна шишка.

Один шаг: было две шишки, пришло изменение минус один, новое состояние один

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

Здесь особенно хорошо видно, чем вход рекуррентной нейросети отличается от её состояния. Вход отрицательный, а состояние положительное. Мы не получили «минус одну шишку в мешочке»: мы уменьшили уже накопленное количество. Если перепутать эти две роли, следующему шагу передадим −1 вместо 1 и ошибёмся уже в финале. Поэтому промежуточную единицу сохраняем отдельно от сообщения «одну забрали».

Третий вход: добавили три

Передаём дальше 1. Приходит +3. По тому же правилу получаем: 1 + 3 = 4. Последний вход равен трём, итоговое состояние — четырём.

Последовательность состояний ноль, два, один, четыре при входах плюс два, минус один, плюс три

Начальное состояние и три обновления. На каждом шаге действует одно правило.

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

Попросите помощника разобрать один переход

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

Помоги разобраться с последовательным обновлением состояния.
Начальное состояние 0. Входы по порядку: +2, −1, +3.
Правило одно и то же: новое состояние = старое + текущий вход.

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

Первый ожидаемый переход — из 0 в 2. Для второго нужно взять уже 2, а не снова ноль. Если в ответе помощника на каждом шаге появляется новый пустой мешочек, укажите на конкретное расхождение: «после первого шага состояние было 2; перенеси его во второй». У нас один мешочек на всю прогулку; каждый вход меняет то, что уже в нём лежит.

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

Шаг Текущий вход Предыдущее состояние Новое состояние
Первый +2 0 2
Второй −1 2 1
Третий +3 1 4

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

Почему одного последнего числа мало

Представим, что мы читаем входы независимо: увидели +2, потом −1, потом +3. Если каждый раз забывать предыдущий результат и начинать с нуля, после последнего шага увидим только три. Это ответ на вопрос «сколько добавили сейчас». Вопрос «сколько осталось после всех действий» требует другого устройства обработки.

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

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

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

Состояние не восстанавливает весь путь

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

Например, последовательность +1, +1, +2 тоже заканчивается четвёркой. Она проходит через состояния 1 и 2, а наш исходный пример — через 2 и 1. Финал совпадает, промежуточный путь разный.

Две разные последовательности дают одинаковый итог четыре; состояние не является полным журналом

Один накопленный итог не сообщает все предыдущие изменения.

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

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

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

Где это встречается и при чём здесь чат

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

В нашем примере легко показать оба варианта. Если после каждого действия нужно проверять, сколько осталось, оставьте все состояния: 2, 1, 4. Если дома для поделки спрашивают только окончательный запас, назовите последнюю четвёрку. Правило и находки те же самые, меняется нужный человеку момент ответа.

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

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

Как понять, что схема стала ясной

Закройте таблицу и попробуйте ответить на три вопроса: что пришло на втором шаге, какое состояние было до него и что получилось после? В нашем случае это −1, 2 и 1. Разница между этими числами и составляет главный результат разбора.

Потом объясните помощнику, почему на третьем шаге получилось 4, хотя пришло только +3. Если сможете пройти путь через предыдущую единицу, вы уже понимаете, какую роль здесь играет состояние. Можно сменить шишки на детали для поделки, сохранив числа и правило; вычисление от этого не изменится. Предметы можно высыпать из мешочка и пересчитать — у арифметики окажется свидетель, который не принимает объяснений про особый творческий замысел.

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

Несколько вопросов о состоянии сети

Счётчик суммы доказывает, что порядок всегда важен?

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

Можно восстановить всю последовательность по последнему числу?

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

Память чата устроена точно как этот счётчик?

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

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