# Как превратить нейросеть в читаемую программу: метод Дэна Фридмана

Источник: https://www.youtube.com/watch?v=x7twwqcx3zs
Канал: The TWIML AI Podcast
Опубликовано: 15.01.2024

---

В области разработки искусственного интеллекта существует фундаментальный разрыв: современные нейросети, такие как архитектура Transformer, демонстрируют поразительную эффективность, но остаются для человека «черными ящиками». Дэн Фридман, докторант Принстонского университета, в интервью Сэму Чаррингтону в рамках подкаста TWIML AI представил метод обучения «программ на основе Трансформеров», который позволяет автоматически превращать веса нейросети в понятный человекочитаемый код на языке Python.

## 🚀 Переход от наблюдений к механистической интерпретируемости
[[JUMP:02:54]]

Современные методы объяснимого ИИ (XAI) часто ограничиваются поверхностным анализом. Прошлые подходы, такие как LIME, Фридман называет «архитектурно-агностическими» [02:54]. Они смотрят на корреляцию входных и выходных данных, не вникая во внутреннюю логику модели. Например, метод важности признаков (feature importance) может подсветить слова в предложении, которые повлияли на решение классификатора, но это не дает «алгоритмического понимания» [06:06].

Механистическая интерпретируемость (mechanistic interpretability) ставит перед собой более амбициозную цель — декомпозировать нейросеть на понятные человеку логические компоненты [04:28]. По мнению Фридмана, этот процесс похож на реверс-инжиниринг: перевод высокомерных вычислений в понятные алгоритмы, которые человек может симулировать «в уме» и верифицировать так же, как обычное программное обеспечение [09:24].

## 🛠 Дизайн для интерпретируемости: подход Фридмана
[[JUMP:11:36]]

Вместо того чтобы пытаться расшифровать уже обученную огромную модель вроде GPT-3, Фридман предлагает проектировать модели так, чтобы они были «врожденно интерпретируемыми» [12:29]. Разработчики вдохновлялись языком программирования Rasp (Restricted Access Sequence Processing), созданным Гейл Вайс, который позволяет описывать операции Трансформера в коде, похожем на Python [12:57].

Разница между обычным кодом (например, на PyTorch) и подходом Фридмана заключается в следующем:

*   Код на PyTorch — это лишь «скелет», поведение которого полностью зависит от миллионов весов, непонятных при чтении [14:02].
*   Программы Фридмана — это явные инструкции, где веса модели напрямую отображаются в логические правила [14:42].

Ключевым достижением исследования стала разработка метода «декомпиляции»: обучения модели с такими ограничениями, которые гарантируют, что итоговые веса будут иметь прямое соответствие с программой на Rasp [15:50].

## ⛓️ Два главных ограничения архитектуры
[[JUMP:17:40]]

Для достижения стопроцентной прозрачности Фридман ввел в архитектуру Трансформера два жестких ограничения:

1.  **Распутанные остаточные связи (Disentangled residual streams):** В стандартном Трансформере информация от разных слоев записывается в общее пространство («residual stream») через сложение, что создает хаос [18:17]. Фридман заменил сложение на конкатенацию [20:42]. Теперь каждый слой и каждая голова внимания пишут свои данные в строго отведенный «адрес» памяти, не затирая чужие переменные [19:11].
2.  **Интерпретируемые модули:** Каждый блок вычислений должен следовать правилам, которые легко конвертируются в логику «если — то» [24:08].

Чтобы модель оставалась обучаемой с помощью градиентного спуска, исследователи использовали «трюк» с репараметризацией Гумбеля (Gumbel softmax) [17:10]. Это позволяет системе во время обучения выбирать между дискретными программными путями, сохраняя математическую возможность вычисления производных [36:28].

## 💻 Как выглядит ИИ-программа изнутри
[[JUMP:28:35]]

Результатом работы системы является обычный Python-файл, который можно скачать с GitHub и запустить [29:15]. Основная часть такой программы описывает работу голов внимания через предикаты.

Примеры логики, выученной моделью:

*   **Синтаксический анализ:** Программа может содержать правило: «Если в текущей позиции стоит открывающая скобка, проверь, не следует ли за ней закрывающая квадратная скобка», — что позволяет определить валидность последовательности [32:16].
*   **Поиск зависимостей:** Модель может создать правило «смотреть на предыдущий токен», реализуемое через анализ позиционных индексов [30:21].

Фридман отмечает, что такие программы сохраняют детерминированность: вы можете поставить точку останова (breakpoint) в стандартном отладчике Python и пошагово наблюдать, как «нейросеть» принимает решение [41:50].

## 📈 Ограничения и перспективы метода
[[JUMP:33:04]]

Несмотря на успех, у подхода есть цена. Наложение жестких ограничений сужает спектр решений, которые может найти модель [33:19]. Например, в текущей реализации используется «жесткое внимание» (hard attention) — модель смотрит либо на один токен, либо распределяет внимание равномерно, что проще для понимания, но менее гибко, чем стандартные механизмы [33:45].

Основные выводы дискуссии:

*   **Проблема оптимизации:** Самым сложным оказывается не сама структура программы, а поиск оптимальных параметров в дискретном пространстве в процессе обучения [40:15].
*   **Масштабируемость:** На данном этапе невозможно просто «декомпилировать» GPT-3, так как она не была обучена с учетом этих ограничений [39:10].
*   **Философский аспект:** Фридман признает, что «читаемость кода» — понятие субъективное, и плохой код программиста может быть так же непонятен, как нейросеть [40:55]. Тем не менее, дискретные программы позволяют использовать инструменты статического анализа, недоступные для классического глубокого обучения [42:01].