# Логика, Символы и Нейроны: Дулат Ерзат о будущем нейросимвольного ИИ

Источник: https://www.youtube.com/watch?v=BUTUC3wk548
Канал: DSMLKZ - Data Science Kazakhstan
Опубликовано: 02.06.2019

---

На стыке современных нейронных сетей и классического символьного искусственного интеллекта рождается новое направление — нейросимвольный подход. В своем выступлении Дулат Ерзат (Dulat Yerzat) разбирает, почему современные Deep Learning модели до сих пор не справляются с простейшей логикой и как объединение нейронов с логическим программированием может решить проблему интерпретируемости и нехватки данных.

## 🧠 Ограничения нейронных сетей: почему «умные» модели не понимают логику
[[JUMP:0:00]]

Нейронные сети обладают неоспоримыми плюсами: они устойчивы к шуму и эффективно работают с несимвольными данными, такими как изображения или аудио [0:15]. Однако эти преимущества порождают два критических минуса:

1.  **Data Inefficiency (неэффективность данных):** для обучения модели требуется скармливать ей колоссальные объемы информации [0:28].
2.  **Отсутствие интерпретируемости:** нейронные сети представляют собой «черный ящик», логику которого невозможно проследить [0:42].

Глобальную проблему нейросетей обозначил ещё один из «отцов-основателей» ИИ Джон Маккарти: они способны находить закономерности только на уровне пропозициональной логики, но не могут обобщать правила на уровне логики первого порядка [1:09]. 

В качестве примера Дулат Ерзат приводит задачу сравнения чисел. Если обучить нейросеть на огромном датасете всех возможных пар чисел, она покажет высокую точность [1:49]. Но если убрать из выборки определенные пары (например, модель видела 4 < 5 и 5 < 6, но никогда не встречала 4 < 6), она не сможет вывести общую закономерность «меньше чем». В логике первого порядка это решается введением переменных, что для стандартных нейросетей остается непосильной задачей [2:54].

## ⚙️ Попытки эмуляции: Neural Turing Machines и программная индукция
[[JUMP:3:07]]

Для решения проблемы логического вывода создавались специальные архитектуры, известные как **Neural Program Induction (NPI)**. Основная идея заключалась в том, чтобы заставить архитектуру нейросети имитировать работу «железа» компьютера [3:36].

*   **Neural Turing Machines (NTM):** нейросети с внешней памятью, эмулирующие машину Тьюринга [3:49].
*   **Результаты:** такие системы научились решать некоторые задачи, но сохранили все минусы нейросетей — сложность обучения и плохую интерпретируемость [4:01].
*   **Итог:** по словам спикера, пик хайпа на эти архитектуры пришелся на 2015–2016 годы, но они так и не вышли за пределы специфических тестов [4:30].

## 🧩 Нейросимвольный подход: поиск идеального языка программирования
[[JUMP:4:45]]

Альтернативой стал нейросимвольный подход (Neuro-symbolic AI), где нейронные сети обрабатывают «сырые» данные (например, картинки), а логические алгоритмы генерируют на их основе программу [5:13]. Преимущество символьных алгоритмов в том, что им достаточно пары примеров для обучения, и их результат абсолютно понятен человеку [5:43].

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

1.  **Чистота (Pure language):** отсутствие побочных эффектов (side effects), чтобы функции были детерминированы [6:12].
2.  **Краткость (Expressiveness):** поиск в пространстве программ — это перебор в огромном дискретном пространстве. Чем короче может быть программа, тем выше шансы её найти [6:37].

Языки вроде C++ или Python не подходят для автоматического синтеза, так как они созданы для людей [7:07]. Исследования сместились в сторону логического программирования и таких инструментов, как:

*   **Prolog:** самый известный и старый язык логического программирования [8:07].
*   **Datalog:** подмножество Prolog, оптимизированное для работы с базами данных [8:15].
*   **miniKanren:** встраиваемое логическое программирование. Дулат Ерзат рекомендует библиотеку `miniKanren-python` (или реализации для Julia) для быстрого знакомства с темой [8:35].

## 🛠️ Индуктивное логическое программирование (ILP)
[[JUMP:9:02]]

Ключевым алгоритмом в этой области является **ILP (Inductive Logic Programming)**. По сути, это метод машинного обучения, пришедший из символьного подхода [9:16].

Процесс работы ILP строится на трех компонентах:

1.  **Background Knowledge (B):** фоновые знания (факты, например: «Джон — мужчина», «Джон — родитель Кейт») [9:31].
2.  **Примеры (E):** набор положительных и отрицательных примеров того, что мы хотим выучить [10:14].
3.  **Гипотеза (H):** код или предикат, который генерирует система (например, предикат «дедушка») [10:41].

Современные системы ILP (обсуждавшиеся на профильной конференции в 2019 году) значительно эволюционировали. Чтобы избежать случайного перебора и комбинаторного взрыва, задачу поиска программы переформулируют как **SAT-проблему** (задачу выполнимости булевых формул) [12:05].

## 📉 Дифференцируемое логическое программирование
[[JUMP:12:56]]

Актуальный тренд — сделать всё дифференцируемым, чтобы применять градиентный спуск. Разработчики (в частности, подразделение DeepMind) предложили заменить дискретные флаги (0 или 1) в логических клаузах на непрерывные значения в интервале от 0 до 1 [13:22].

**Как это работает:**

1.  Специальные шаблоны генерируют огромное количество потенциальных логических правил (клауз) [13:35].
2.  Каждому правилу присваивается «вес» (флаг), который теперь является числом, выдаваемым нейросетью [13:52].
3.  С помощью градиентного спуска система оставляет только те правила, которые дают `True` на положительных примерах и `False` на отрицательных [14:07].

Результаты впечатляют: в задаче сравнения чисел, где обычная нейросеть начинает «деградировать» при отсутствии части обучающих данных, дифференцируемая ILP-система сохраняет высокую точность, успешно совершая логическую индукцию [15:13].

## 🌐 Логика и графы знаний (Knowledge Graphs)
[[JUMP:15:39]]

Еще одно применение — работа с огромными графами знаний (более 15 миллионов узлов), такими как базы фактов о знаменитостях или политике [16:05]. 

В таких графах часто пропущены связи (relations). Например, если есть факт «Барак Обама — президент США», логично предположить, что он живет в Вашингтоне [16:33]. Логическое программирование позволяет обучать предикаты для восстановления этих связей. 

Интересный подход заключается в векторизации предикатов: предикаты «отец» и «мать» в векторном пространстве будут находиться близко друг к другу, а предикат «родственник» будет более общим вектором [17:12]. Это позволяет использовать мощь векторных представлений вместе со строгостью логических правил.