Comments 10
Классный разбор! Про галлюцинации прям очень наглядно
Стоит добавить о галлюцинациях. В октябре 2025 года я написал статью о триггерах галлюцинаций: жёсткий формат, требование DOI и точных чисел, запрет говорить «не знаю», ложные якоря, роль эксперта...
Тогда я назвал это слот-филлингом, то есть модель заполняет пустые поля идеально оформленными, но вымышленными данными.
Теперь я могу попробовать объяснить причины и попробовать их классифицировать.
Слот это и есть ожидание. Промпт нарезает форму, которая должна быть заполнена, и заполнение проверяется только по форме.
Три класса триггеров:
Формат создаёт слот, требование формулы, DOI, диапазона, таблицы. Строгая форма не оставляет места для уклончивого ответа: у поля DOI нет расплывчатого значения, оно либо заполнено, либо нет. И она же подсказывает, чем заполниться: у ссылки, у номера, у отклонения есть узнаваемая структура, знакомая по тысячам примеров. Чем точнее требуемая форма, тем правдоподобнее выглядит ответ, независимо от того, соответствует ли она чему-либо. Строгий формат облегчает галлюцинацию.
Запрет на незнание отнимает возможность оставить слот пустым. В норме модель может не заполнять, запрет делает незаполнение недоступным, и форма обязана закрыться.
Ложные якоря и роль эксперта сдвигают то, что считается предъявимым. Достройка вокруг вымышленного термина предъявима, потому что термин уже задал форму.
И тогда объясняется парадокс "не выдумывай, но обязательно дай источники" усиливает галлюцинацию, а не гасит. Это два требования на разных осях. Слот не различает верно и неверно, только заполнена форма или нет. Требование истинности не конкурирует с требованием формы, потому что адресуется не к тому.
в итоге, галлюцинации неотъемлемая на сегодня часть нейросети.
Пока эксперименты в этом направлении я приостановил, но если появится идея как реализовать это на ограниченном железе или новый взгляд на концепцию в целом, я к ним вернусь.
Пу пу пу…
Можно попробовать посмотреть на проблему через спайковые сети (SNN на LIF + R-STDP), так мы уходим от непрерывных векторов к дискретным событиям во времени. В этой парадигме знак не нужно искусственно вытаскивать или сжимать пробами т.к. он кристаллизуется сам за счет латерального торможения и синхронизации (хотя проба всё еще нужна для считывания результатов).
В этом случае цена пересчета находится прямо в расчете мембранного потенциала: слабый или рассинхронизированный сигнал просто утекает, поэтому сети физически выгоднее сформировать устойчивую спайковую группу. А проблема метазнака решается через синхронизацию: мета-нейрон срабатывает, когда два знака приходят в узкое временное окно в 2-5 мс, так что размерность пространства не раздувается. Благодаря этому для проверки гипотезы самоописания и метазнаков не нужна мощная видеокарта т.к. нет обратного прохода градиента.
Проверить это можно на следующем эксперименте: берем слой из 200-500 LIF-нейронов с конкуренцией (Winner-Take-All). Чтобы протестировать самоописание, замыкаем обратную связь от слоя самоописания обратно в спайковый слой и смотрим, ускорит ли это кристаллизацию знаков. А для метазнака даем задачу на комбинацию правил (например, A AND B): мета-нейрон за счет STDP сам подхватит совпавшие по времени спайки от двух базовых знаков даже без локального градиента. Ну, это в теории.
Интересно. Три проблемы снимаются, но меняется постановка эксперимента.
WTA сам обособляет; проверять тогда надо не появление, а удержание.
Забавно, если не ошибаюсь то я наблюдаю по моему похожий эффект, у себя в эксперименте, по духу близкий к обсуждаемому J-space: спонтанное возникновение когнитивной структуры из обычного градиентного обучения, — но не найденное постфактум в большой сети, а выращенное с нуля в маленькой, с измеримой динамикой.
Попросил нейросеть сделать описание, вот что он написал.
Сеть (~63515K параметров, PyTorch, CPU):
эмбеддинг 64 → GRUCell (64) — «суммаризатор», читает поток токенов;
ассоциативная память: записи (key, value, trust), на каждом шаге soft-attention чтение, запись — по выученному гейту (sigmoid-скаляр, решает, писать ли текущий переход);
выход — линейный классификатор на 24 узла.
Задача «кольца»
Эпизод — 2 случайных кольца по 7 узлов, каждое ребро x→y показано ровно один раз блоком [форма, x, y], утонуто в шуме. Скажем, в эпизоде выпало кольцо 3→11→7→22→5→18→9→3 (и второе такое же на других узлах). В конце эпизода — три типа запросов:
direct — «куда ведёт ребро из 3?» Ответ: 11. Он был в потоке, его можно просто найти в памяти. Контрольный тип.
comp2 — «если пойти из 3 на ДВА шага по кольцу, куда попадёшь?» Ответ: 7. Пары «3→7» в потоке не было — её нельзя найти, можно только вывести: сначала вспомнить 3→11, потом из результата снова поискать 11→7. Два последовательных поиска, «два хода мысли».
comp3 — то же на три шага: 3→11→7→22, ответ 22. Три последовательных поиска.
То есть comp2/comp3 — это вопросы, на которые нет готового ответа ни в потоке, ни в памяти: их можно решить только цепочкой извлечений, где результат одного поиска становится запросом следующего.
Каждый эпизод — свежая случайная топология, запоминание между эпизодами невозможно: чтобы отвечать, нужен механизм обхода, а не заученные пары.
Что произошло (режим «склад» — память без ограничений)
шаг 500: direct = 1.000, comp2/comp3 ≈ случайность (0.04–0.05);
шаг 1000: comp2 щёлкает с 0.19 до 1.000 почти мгновенно;
шаг 1500: comp3 = 1.000, loss 0.014.
Каскад «кликов»: сеть сначала выучила прямые рёбра, потом сама собрала цепочку из двух поисков, потом из трёх. Никто не учил её обходить кольцо — механизм pointer-chase (x→y)→(y→z) собрался из скалярной ошибки. При выключенной памяти на инференсе — случайность везде: «ход мысли» живёт целиком в итеративном чтении памяти. Не «запомнил, потом обобщил» (классический гроккинг), а «собрал из частей» — сборочный фазовый переход: hop k собирается только после hop k−1, каждый следующий дешевле (~250 шагов против ~500).
Интересно.
Память сыграла роль op-головы. Конструктивно выделенное место под знак. В трансформере голово отделена функционально, здесь физически
Но на метазнак не похоже, скорее рекурсионное использование знака (судя по удешевлению последующих hop, то есть переиспользуются, а не пересобирается)
Но сам факт того, что результат в таком виде можно интерпретировать похоже, весьма интересен.
Вопросы:
держится ли comp3 при продолжении обучения после сборки ...и любопытно собирается ли то же самое без внешней памяти, на чистом GRU с достаточной ёмкостью (прямая проверка)
Upd: ещё подумал. Все таки это не в полном смысле знак. Здесь слот только адресация, а не именование. Адресация даёт доступ, именование - предъявимость. Доступ есть, предъявления нет. В этом смысле это больше похоже на регистр в вычислениях.
держится ли comp3 при продолжении обучения после сборки ...и любопытно собирается ли то же самое без внешней памяти, на чистом GRU с достаточной ёмкостью (прямая проверка)
Прогнал до шага 12к, на 8750 сеть нашла плато, далее стабильно
step 8750/12000 loss=0.0000 [direct=1.000 comp2=1.000 comp3=1.000] beta=1.67 gate=0.489
step 12000/12000 loss=0.0000 [direct=1.000 comp2=1.000 comp3=1.000] beta=1.67 gate=0.483
второй ваш вопрос пока без ответа, для этого нужно гонять GRU с разными емкостями, а это долго по времени.... если брать именно текущий эксперемент то без памяти GRU выглядит так
=== FINAL EVAL ===
links=7 chains=2: direct=1.000 comp2=1.000 comp3=1.000
память-ВЫКЛ links=3: direct=0.047 comp2=0.012 comp3=0.043
Upd: ещё подумал. Все таки это не в полном смысле знак. Здесь слот только адресация, а не именование. Адресация даёт доступ, именование - предъявимость. Доступ есть, предъявления нет. В этом смысле это больше похоже на регистр в вычислениях.
Да, тут получается что вроде похоже на фон Нейман, но в тоже время Фон Нейман исполняет данную программу. но у меня сеть нашла свою. Регистр тот же. Программа — нет
Если подумать ещё, то память и репорт отвечают на разные вопросы.
Память это место где взять, репорт отвечает, что это такое. Тогда первое даёт доступ, а второе предъявимость. По сути это разные вещи.
Тогда два независимых признака: есть ли место под отдельную единицу и и есть ли дополнительное давление помимо давления от задачи.
У вас место задано конструкцией, давление очевидно от задачи: без записи comp2 не не решить. У меня места нет вовсе, давление создаёт параллельная голова: правило осело при том, что точность одинакова с ней и без.
Любопытно сочетание: есть место еи и есть параллельное требование назвать.
Если поставить новый эксперимент даёт ли адресуемая ячейка обособленность сама, или её приходится производить в любой архитектуре. У вас это можно сделать так: вторая голова, обязанная назвать записываемое ребро, читающая не сам слот, а состояние. Точность, скорее всего, не изменится; смотреть надо, становится ли содержимое читаемым из состояния и держится ли структура при продолжении обучения.
Тогда станет ясно, достаточно ли архитектурного решения, или обособленность приходится производить требованием в любой архитектуре.
Только одной головой тут не обойтись, не различить, была обособленность или её произвела сама голова. Нужны две независимо обученные сети, с головой и без, а читаемость мерить внешним пробом поверх замороженного состояния, который в обучении не участвовал. Если читается в обеих обособила архитектура. Если только с головой произвело требование.
Можно и третий вариант с головой обучающейся на случайную метку (снять вопрос о лишнем градиенте)
Самоописание нейросети: условие сложного мышления