Статистические интуитивные и символические системы рассуждений

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

Как Ганс принял решение?

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

В предыдущей части были представлены две системы мышления и их связь с уровнем объяснимости, обобщения и скорости обучения. В этой части представлено более глубокое сравнение между Системой 1 и Системой 2, которую я буду называть интуитивно-статистической (система Умный Ганс) и Системой символического мышления соответственно.

Статистическая интуитивно понятная система

Интуиция связана с автоматическим решением и размышлением. Интуиция - это способность принимать решения без полной информации, она дает нам возможность принимать решения в определенной области, не имея глубокого логического понимания этого. Интуитивная система использует исторические свидетельства, чтобы доказать силу своих аргументов. Интуитивные системы больше заботятся о корреляции между двумя историческими событиями A (дождь) и B (несут зонтик), чем о связи между ними. Итак, чтобы доказать, что: если идет дождь, люди несут зонтики, интуитивная система использует исторические статистические свидетельства частого наблюдения обоих событий вместе. Хотя логическая система решит проблему и попытается доказать это с помощью некоторых общеизвестных знаний и логической основы, например: дождь состоит из воды, вода намокает, люди не любят промокнуть, а зонтики блокируют дождь. Логическая система знает, что ношение зонта не означает дождя, поэтому дождь вызывает ношение зонта, а не наоборот. Итак, интуитивная система - это ленивая часть нашего мозга (трюк Умного Ганса), не обязательно мудрая часть, но в большинстве случаев может быть правильной, особенно если исторические свидетельства убедительны.

Классические алгоритмы статистического машинного обучения используют интуицию для принятия решений. Все они строят математическую модель прошлого опыта и используют ее для автоматического отражения. Глубокое обучение добавляло некоторые аргументы, создавая высокоуровневые функции, но все же оно принимает окончательное решение (уровень решения), используя статистическую погрешность.

Большинство статистических интуитивно понятных систем, основанных на глубоком обучении, имеют следующие особенности:

  1. Узкий (используется в определенной области, например, для распознавания цифр)
  2. Учится на исторических данных или опыте (обучение с учителем, без учителя или обучение с подкреплением)
  3. Преодолевает проклятие размерности: построение высокоуровневого представления низкоуровневого входа x
  4. Основывается на предположении i.i.d: предполагается, что тестовое распределение такое же, как и обучающее.
  5. Из-за предположения i.i.d этой системе требуется много обучающих данных. Распределение обучения должно быть как можно более общим, и эта система слаба в рассуждении за пределами распределения обучения.
  6. Отображение от входа к выходу не содержит процесса поиска, то есть поиска оптимального решения в пространстве многих возможных решений или поиска логических аргументов для достижения его решения.

В этой статье я буду использовать глубокое обучение (DL) в качестве основного представителя интуитивной системы, которая принимает низкоуровневый ввод (голос, изображение или текст), уменьшает размерность и сопоставляет вводимые данные с высокоуровневым представлением. пространство, где он может легко построить функцию принятия решений между различными целями (классами, событиями), см. рисунок 1.

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

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

Возьмем, к примеру, скалярную функцию идентичности, которая является одним из простейших символьных вычислений. Был проведен эксперимент для обучения автокодировщика, который принимает скалярный вход (например, число 4), кодирует его в скрытом пространстве (распределенные представления), а затем снова предсказывает входное значение (число 4) как линейная регрессия последнего скрытого слоя. Используются разные автокодировщики с разными функциями активации и входами в диапазоне от -5 до 5. В этом эксперименте обобщение проверялось для входов в диапазоне ›5 или‹ -5. Результаты показывают, что все сети не удалось обобщить (рис. 2).

Другой пример символьной операции - использование операторов сравнения (‹› ≤ ≥ =). В статье Изучение объяснительных правил на основе зашумленных данных ученые Deepmind экспериментировали с обучением модели CNN, которая сравнивает два изображения MNIST и дает истинное значение, когда распознанное число на правом изображении больше, чем число на левом изображении (Рисунок 3).

Если мы обучаем модель CNN выполнять эту задачу, нам нужно создать набор данных, содержащий несколько примеров каждой пары цифр; только тогда он сможет обобщать. Например, на следующем рисунке мы видим набор всех возможных пар цифр от 0 до 9, которые применяют отношение ‹(рисунок 4).

Итак, если набор обучающих данных содержит набор различных изображений для каждой пары цифр на рисунке 4, тогда система DL сможет правильно обобщить. Однако это будет скорее визуальное обобщение, чем символическое. Другими словами, всякий раз, когда эта система получает два изображения, она сопоставляет их с аналогичной обучающей парой (опять же трюк «Умного Ганса»), и если эта обучающая пара является частью списка на рисунке 4, то она будет предсказывать 1 или Правда.

Как проверить, обобщает ли система символическое отношение?

Предположим, обучающий набор пар подобен изображенному на рисунке 5; тогда система, скорее всего, не сможет предсказать отношения 7 ‹9, 2‹ 8 и так далее (рисунок 6). Он сможет распознать 7, 9, 2 и 8 цифр, потому что видел много их изображений (например, в 8 ‹9). Таким образом, он обобщает визуально, но не символически.

Большинство символических операций, таких как простая арифметика, логика высказываний, логика первого порядка и пространственные отношения (например, объект 1 находится выше, ниже, до или после объекта 2), являются сложными для интуитивной системы, особенно когда дело доходит до обобщения.

Система символических рассуждений

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

Система рассуждений имеет следующие особенности:

  1. Для этого требуется база знаний (реляционная, нереляционная или графическая база данных). Смотрите семейное древо на Рисунке 7 в качестве примера.
  2. Для этого требуется набор символических фактов, правил и отношений, подобных показанному на рисунке 8.

3. Для этого требуется механизм вывода, который принимает вопрос или запрос и генерирует ответ, используя набор правил и базу знаний. Например, если я спрашиваю: «Кто двоюродный дедушка Фрейи по материнской линии?», Машина вывода будет искать решение в пространстве предложений на рисунке 8 и применять правила дедукции, такие как подстановка.

Первый выбор будет последним предложением (выделено синим цветом на рисунке). Первый предикат этого правила - бабушка по материнской линии (Фрейя,?). Проверяя третье предложение, мы видим, что «материнская бабушка» имеет конъюнкцию предикатов мать (X, Z), мать (Z, Y), которая в основном гласит: «Если Y - мать Z, а Z - мать X, тогда Y - бабушка X по материнской линии ».

Таким образом, движок сначала найдет бабушку по материнской линии Фрейи, используя третье предложение, то есть Шарлотту, затем мать Шарлотты, которой является Линдси, и, наконец, сын Линдси, которым является Фергус, двоюродный дедушка Фрейи по материнской линии ( Рисунок 9).

Как мы видим в предыдущем примере, символический ИИ включает в себя поисковый процесс. В связи с этим исследователи предложили различные алгоритмы поиска, такие как поиск по дереву целей (также называемое деревом И-Или) и поиск по дереву Монте-Карло.

Давайте рассмотрим еще один пример, чтобы увидеть, как мы можем использовать поиск по дереву в индуктивном логическом программировании, области символического ИИ, которая фокусируется на изучении логических предложений из данных - это также считается частью машинного обучения. Предположим, у нас есть таблица истинности на рисунке 10, и мы хотим найти правильное логическое предложение для предсказания Y с учетом трех входных данных A, B и C .

Первый шаг - написать все мини-выражения, где Y истинно, как следующие:

Целевое выражение, которое система символического упрощения предполагает найти:

Чтобы решить эту проблему, ИИ автоматического символического упрощения потребуется набор правил упрощения (уменьшения проблемы). Затем он запустит дерево поиска, где в каждом узле дерева он выберет один или несколько терминов, а затем применит одно из наиболее подходящих правил упрощения.

На рисунке 11 мы видим пример того, как поиск по дереву в сочетании с базовыми знаниями (законы упрощения) может использоваться для поиска простейшего логического выражения таблицы истинности на рисунке 10.

Реализация этой проблемы в Python выглядит следующим образом:

from sympy import *  # python symbolic package
from sympy.logic import SOPform
import numpy as np
import time # will use it to estimate the processing time
a, b, c = symbols('a b c') # create the four three symbols in Fig 10
minterms = [[0, 0, 1], [1, 0, 1],[0, 1, 1], [1, 1, 0], [1, 1, 1]] # the terms/rows in Fig 10, where y = 1
tic = time.clock()
expr = SOPform([a,b,c], minterms)
toc = time.clock()
print('expression :', expr)
print('processing time:', toc-tic)

результат:

expression : c | (a & b) 
processing time: 0.0005342439999989068

Как мы видим, реализовать это довольно легко и найти правильное логическое выражение из обучающих данных / таблицы истинности. До сих пор мы видели два примера того, что может делать символический ИИ. но

Что сложного в символических системах?

Ограничения символических систем

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

  1. В вычислительном отношении дорого. Предположим, у нас есть таблица истинности с 15 переменными. Целевое выражение и код Python следующие:

from sympy import *  # python symbolic package
from sympy.logic import SOPform
import itertools
import pandas as pd
import numpy as np
sm = symbols('x0:10')
# create the truth table out of 15 boolean variables
import itertools
import pandas as pd
n = len(sm)
truth_table = list(itertools.product([0, 1], repeat=n))
# create a DataFrame of the truth table
truth_table_df= pd.DataFrame(truth_table, columns= np.asarray(sm).astype('str'))
# write a target logical expression, that the sympy should find
y=(truth_table_df['x0'] & ~truth_table_df['x1'] & truth_table_df['x2']) | (truth_table_df['x3'] & ~truth_table_df['x4'] & truth_table_df['x5']) | (truth_table_df['x6'] & truth_table_df['x7'] & ~truth_table_df['x8'] & ~truth_table_df['x9'])
# find the miniterms, where y is true
minterms=truth_table_df[y==1].values.tolist()
# Run simplification code
tic = time.clock() # starting time
expr = SOPform(sm, minterms) # find the expression
toc = time.clock() # end time
print('expression :', expr)
print('processing time:', toc-tic)

результат:

expression : (x0 & x2 & ~x1) | (x3 & x5 & ~x4) | (x6 & x7 & ~x8 & ~x9)
processing time: 2.3627283299997544

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

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

from sympy import *  # python symbolic package
from sympy.logic import SOPform
import itertools
import pandas as pd
import numpy as np
sm = symbols(‘x0:12’)
# create the truth table out of 15 boolean variables
n = len(sm)
truth_table = list(itertools.product([0, 1], repeat=n))
# create a DataFrame of the truth table
truth_table_df= pd.DataFrame(truth_table, columns= np.asarray(sm).astype(‘str’))
# write a target logical expression, that the sympy should find
y=(truth_table_df[‘x0’] & ~truth_table_df[‘x1’] & truth_table_df[‘x2’]) | (truth_table_df[‘x3’] & ~truth_table_df[‘x4’] & truth_table_df[‘x5’]) | (truth_table_df[‘x6’] & truth_table_df[‘x7’] & ~truth_table_df[‘x8’] & ~truth_table_df[‘x9’])
# find the miniterms, where y is true
minterms=truth_table_df[y==1].values.tolist()
# Run simplification code
tic = time.clock() # starting time
expr = SOPform(sm, minterms) # find the expression
toc = time.clock() # end time
print(‘expression :’, expr)
print(‘processing time:’, toc-tic)

результат:

expression : (x0 & x2 & ~x1) | (x3 & x5 & ~x4) | (x6 & x7 & ~x8 & ~x9)
processing time: 207.635452686

Как видим, решение верное, но время обработки примерно в сто раз больше, хотя мы добавили всего две переменные.

3. Чувствительность к неправильной маркировке. Предположим, мы поменяли местами некоторые значения Y:

from sympy import *  # python symbolic package
from sympy.logic import SOPform
import itertools
import pandas as pd
import numpy as np
sm = symbols('x0:10')
# create the truth table out of 15 boolean variables
import itertools
import pandas as pd
n = len(sm)
truth_table = list(itertools.product([0, 1], repeat=n))
# create a DataFrame of the truth table
truth_table_df= pd.DataFrame(truth_table, columns= np.asarray(sm).astype('str'))
# write a target logical expression, that the sympy should find
y=(truth_table_df['x0'] & ~truth_table_df['x1'] & truth_table_df['x2']) | (truth_table_df['x3'] & ~truth_table_df['x4'] & truth_table_df['x5']) | (truth_table_df['x6'] & truth_table_df['x7'] & ~truth_table_df['x8'] & ~truth_table_df['x9'])
#reverse 2 random rows (mislabled)
mislabels= abs(1-y.sample(n=2))
y.iloc[mislabels.index] = mislabels
# find the miniterms, where y is true
minterms=truth_table_df[y==1].values.tolist()
# Run simplification code
tic = time.clock() # starting time
expr = SOPform(sm, minterms) # find the expression
toc = time.clock() # end time
print(‘expression :’, expr)
print(‘processing time:’, toc-tic)

Тогда результат

expression : (x0 & x2 & ~x1) | (x3 & x5 & ~x4) | (x6 & x7 & ~x8 & ~x9) | (x1 & x2 & x4 & x5 & x7 & x8 & ~x0 & ~x3 & ~x6 & ~x9) | (x0 & x2 & x9 & ~x3 & ~x4 & ~x5 & ~x6 & ~x7 & ~x8)
processing time: 2.4316794240000945

Как мы видим, только две неправильно помеченные строки создали неправильное выражение. Что делать, если шум сочетается с неправильными этикетками?

Тогда результат еще хуже:

expression : (x3 & x5 & ~x4) | (x0 & x11 & x2 & ~x1) | (x0 & x2 & x5 & ~x1) | (x0 & x2 & x8 & ~x1) | (x0 & x2 & x9 & ~x1) | (x0 & x2 & ~x1 & ~x10) | (x0 & x2 & ~x1 & ~x3) | (x0 & x2 & ~x1 & ~x4) | (x0 & x2 & ~x1 & ~x6) | (x6 & x7 & ~x8 & ~x9) | (x1 & x11 & x3 & x4 & x8 & ~x0 & ~x10 & ~x2 & ~x5 & ~x6 & ~x7 & ~x9)
processing time: 181.49175330699995

4. Чувствителен к двусмысленности:

Логический член X0 = 1 означает, что X0 равен 1 и только 1. Что, если мы не уверены в том, что X0 = 1?

Неопределенность в символических системах - проблема

Рассмотрим два примера сравнения изображений MNIST (см. Выше). Имея небольшие обучающие примеры с использованием индуктивного логического программирования первого порядка, мы можем легко изучить и обобщить операцию ‹; выученная логическая программа выглядит следующим образом:

По сути, X - это число, а Y - число; Y больше, чем X, если существует число Z, где Z является преемником Y, а X является преемником Z. Но что, если входные данные X и Y для этой системы являются изображениями, а не числами, и мы хотим сначала распознать цифры X и Y, а затем применить предложение на рисунке 12?

Как это можно сделать с помощью символического ИИ? Предположим, что размеры цифрового изображения 5 x 5, поэтому у нас есть 25 логических входов. Тогда двоичные образы двух цифр 0,1 будут следующими:

а выражения для 0 и 1 следующие:

Остальные цифры от 2 до 9 могут быть представлены таким же образом. Используя эти выражения, мы можем сначала распознать цифру на изображении, а затем применить предложение на рисунке 11. Но что, если обучающий набор состоит из недвоичных изображений, а цифры неоднозначны, как на рисунке 13, тогда символическое решение станет очень большим. сложнее найти и обобщить, в то время как подход статистического машинного обучения справился бы с этой задачей намного лучше.

Резюме:

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

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

В конце я завершу эту часть следующим аргументом:

почему 4 меньше 5? вы легко объясните причину, используя свою символическую систему (например, потому что 5 = 4 + 1, или 5 является преемником 4)

Теперь, если я спрошу вас, почему вы видите следующую цифру 4, сможете ли вы ответить? Нет, потому что это роль нашей интуитивной системы.

Будьте на связи!