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

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

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

Ответ довольно прост - деревья не дифференцируемы, и без градиентов, текущих по сети, это бомбы с обратной опорой. Но тут исследователи начали биться головой. Как сделать деревья решений дифференцируемыми.

Дифференцируемые деревья решений

В 2015 году Kontschieder et al. Представили Deep Neural Decision Forests, которые имели древовидную структуру решений, но отличались друг от друга.

Давайте сделаем шаг назад и подумаем о дереве решений.

Типичное дерево решений выглядит примерно так, как на картинке выше. Упрощенно это набор узлов решения (dᵢ) и листовых узлов (πᵢ), которые вместе действуют как функция y = F (θ, X), где F - это дерево решений, параметризованное с помощью θ, которое сопоставляет вход X с выходом y.

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

Теперь давайте более подробно рассмотрим узел принятия решения. Основная цель узла принятия решения - решить, направить ли образец влево или вправо. Назовем эти решения dᵢ и d¯ᵢ (читается как d bar и обвиняет среду в отсутствии латексной поддержки). И для этого решения он использует конкретную функцию (f) и порог (b) - это параметры узла.

В традиционных деревьях решений это решение является бинарным; либо справа, либо слева, 0 или 1. Но это детерминировано и недифференцируемо. Теперь, что, если мы ослабим это и сделаем маршрутизацию стохастической. Вместо 1 или 0 будет число от 0 до 1. Это похоже на знакомую территорию, не так ли? Сигмовидная функция?

Это именно то, что Kontschieder et al. предложенный. Если мы ослабим строгое решение 0–1 до стохастического с сигмоидной функцией, узел станет дифференцируемым.

Теперь мы знаем, как работает отдельный узел (узел решения или листовой узел). Соберем их все вместе. Красный путь на диаграмме выше - один из путей в дереве решений. В детерминированной версии образец либо проходит по этому маршруту, либо нет. Если мы подумаем об этом же процессе в вероятностных терминах, мы знаем, что вероятность того, что образец пойдет по пути, должна быть 1 для каждого узла на этом пути, чтобы образец достиг листового узла в конце пути.

В вероятностной парадигме мы находим вероятность того, что образец переместится влево или вправо (dᵢ и d¯ᵢ), и умножаем все эти значения на пути, чтобы получить вероятность того, что образец достигнет конечного узла.

Вероятность того, что образец достигнет выделенного листового узла, будет (d₁ x d¯₂ x d¯₅).

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

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

Neural Oblivious Trees

Дерево забвения - это дерево решений, которое растет симметрично. Это деревья, те же функции отвечают за разделение экземпляров обучения на левую и правую секции для каждого уровня дерева. CatBoost, известная реализация повышения градиента, использует деревья не обращая внимания. Деревья забвения особенно интересны, потому что их можно свести к таблице решений с 2ᵈ ячейками, где d - глубина дерева. Это довольно аккуратно упрощает работу.

Каждое дерево забываемых решений (ODT) выводит один из 2ᵈ ответов, где d - глубина дерева. Это делается с помощью комбинаций d пороговых значений, которые являются параметрами ODT.

Формально ODT можно определить как:

, где I обозначает функцию Хевисайда (которая представляет собой ступенчатую функцию, равную 0 для отрицательного значения или 1 для положительного)

Теперь, чтобы сделать вывод дерева дифференцируемым, мы должны заменить выбор функции разделения (f) и оператор сравнения, используя порог (b), но их непрерывные аналоги.

В традиционных деревьях выбор функции для разделения узла является детерминированным решением. Но для дифференцируемости мы выбираем более мягкий подход, то есть взвешенную сумму признаков, при которой веса изучаются. Обычно мы думаем о выборе Softmax вместо функций, но мы хотим иметь редкий выбор функций, то есть мы хотим, чтобы решение принималось только по нескольким (предпочтительно 1) функциям. Итак, для этого NODE использует преобразование α-entmax (Peters et al., 2019) над обучаемой матрицей выбора функций.

Точно так же мы ослабляем функцию Хевисайда как двухклассовый entmax. Поскольку разные объекты могут иметь разные характерные масштабы, мы масштабируем entmax с параметром τ

, где bᵢ и τᵢ - обучаемые параметры для пороговых значений и шкал соответственно.

Мы знаем, что дерево имеет две стороны, и с помощью cᵢ мы определили только одну сторону. Итак, чтобы завершить дерево, мы складываем cᵢ и (1-cᵢ) один поверх другого. Теперь мы определяем тензор «выбора» C как внешнее произведение всех деревьев:

Это дает нам выбор веса или интуитивно вероятности каждого из 2ᵈ выходов, которые находятся в тензоре отклика. Итак, теперь он сведен к взвешенной сумме тензора отклика, взвешенной тензором выбора.

Вся установка выглядит как на диаграмме ниже:

Нейронные ансамбли забвения решений

Перейти с отдельного дерева в «лес» довольно просто. Если у нас есть m деревьев в ансамбле, конечным результатом будет конкатенация m отдельных деревьев.

Углубляясь с NODE

Помимо разработки основного модуля (уровня NODE), они также предлагают глубокую версию, в которой мы складываем несколько уровней NODE друг на друга, но с остаточными связями. Входные объекты и выходные данные всех предыдущих слоев объединяются и передаются в следующий слой NODE и так далее. И, наконец, окончательный результат по всем слоям усредняется (аналогично RandomForest).

Обучение и эксперименты

Обработка данных

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

Инициализация

Перед обучением сети они предлагают выполнить инициализацию с учетом данных, чтобы получить хорошие начальные параметры. Они равномерно инициализируют матрицу выбора функций (F), в то время как пороговые значения (b) инициализируются случайными значениями функций fᵢ (x). Шкалы τᵢ инициализируются таким образом, что все образцы в первой партии попадают в линейную область двустороннего entmax $ latex и, следовательно, получают ненулевые градиенты. И, наконец, тензор отклика инициализируется стандартным нормальным распределением.

Эксперименты и результаты

В документе проводятся эксперименты с 6 наборами данных - Epsilon, YearPrediction, Higgs, Microsoft, Yahoo и Click. Они сравнили NODE с CatBoost, XGBoost и FCNN.

Сначала они сравнили гиперпараметры по умолчанию для всех алгоритмов. Архитектура NODE по умолчанию была установлена ​​следующим образом: Один слой из 2048 деревьев глубиной 6. Эти параметры были унаследованы от параметров CatBoost по умолчанию.

Затем они настроили все алгоритмы и сравнили.

Код и реализация

Авторы предоставили реализацию в виде готового к использованию модуля в PyTorch здесь.

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

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

  1. П. Кончидер, М. Фитерау, А. Криминиси и С.Р. Було, «Глубокие нейронные леса принятия решений», Международная конференция IEEE по компьютерному зрению (ICCV), 2015 г., стр. 1467–1475, DOI: 10.1109 / ICCV.2015.172.
  2. Бен Петерс, Влад Никулае, Андре Ф. Т. Мартинс, «Модели с разреженными последовательностями», Труды 57-го Ежегодного собрания Ассоциации компьютерной лингвистики (ACL), 2019 г.,, стр. 1504–1519, DOI: 10.18653 / v1 / P19–1146.
  3. Сергей Попов, Станислав Морозов, Артем Бабенко, Ансамбли нейронных забывчивых решений для глубокого изучения табличных данных, arXiv: 1909.06312 [cs.LG]

Первоначально опубликовано на http://deep-and-shallow.com 25 февраля 2021 г.