Нейронные сети для табличных данных: ансамблевое обучение без деревьев

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

Табличные данные: правила повышения градиента

В 2017 году Гюнтер Кламбауэр и его соавторы изобрели саморегулирующиеся сети с явной целью сделать нейронные сети пригодными для табличных данных. Их подход заключался в улучшении плотных сетей с прямой связью, стандартной архитектуры нейронных сетей для табличных данных, с помощью новой функции активации. С помощью этой модификации можно обучать плотные сети прямой связи, которые намного глубже, чем предыдущий предел примерно в четыре скрытых слоя. Хотя самонормализующиеся сети работают хорошо и достигают результатов, сравнимых с повышением градиента и случайным лесом, они не работают достаточно хорошо, чтобы сломить доминирование классических методов ансамбля в области табличных данных - по крайней мере, пока. Одна из причин этого, вероятно, заключалась в том, что саморегулирующиеся сети не предоставляют очень богатой или универсальной теории для настройки правильной сети для конкретного приложения. Они просто позволяют нам идти глубже, чем раньше (что, конечно, в любом случае является большим шагом вперед).

Жемчужина от AI Winter

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

Мне кажется, что эти методы еще не получили должного внимания. Сомнительно, смогу ли я изменить это с помощью сообщения в блоге для, вероятно, довольно ограниченной аудитории, но я сделаю все, что в моих силах. Я постараюсь объяснить несколько первых шагов; это больше, чем умещается в одном сообщении в блоге. Все представленные здесь хорошие идеи я узнал от Ганса Георга Циммерманна; все ошибки и недочеты в этом тексте мои. В частности, использование представленных ниже вложений, к лучшему или худшему, является моим собственным вариантом этих методов.

Чрезмерная параметризация: ошибка или особенность?

Хотя многие детали того, почему нейронные сети работают так хорошо, еще предстоит понять, становится все более и более очевидным, что они работают, потому что они сильно перепараметризованы, а не вопреки этому. Чтобы понять это, вы не должны смотреть на них глазами классической статистики, которая скажет вам, что типичные модели нейронных сетей имеют слишком много параметров. Это действительно проблема, но мы разберемся с ней позже. А пока посмотрите на процесс обучения через призму теории оптимизации. Если вы это сделаете, вы поймете, что эти, казалось бы, лишние параметры защищают вас (или, скорее, тренировочный процесс) от попадания в локальный минимум. И это, очевидно, снимает серьезное беспокойство: в глубоком обучении не применимы никакие гарантии сходимости из классической теории оптимизации. Попадание в ловушку локального минимума было бы своего рода сценарием по умолчанию, если бы у нас не было избыточной параметризации.

А как насчет проблемных аспектов чрезмерной параметризации? У нашей нейронной сети будет не только одна оптимальная весовая конфигурация, но и множество самых разных. И мы не можем знать, какой из них правильный. Ансамблевое обучение дает нам очень прагматичный выход из этой дилеммы: просто возьмите несколько копий своей нейронной сети, каждая из которых имеет разные решения оптимального веса, и усредните их. Это эффективно уменьшает смехотворную дисперсию, вызванную чрезмерной параметризацией. Вы можете закодировать все это в одной нейронной сети: возьмите идентичные копии нейронной сети (слабые ученики) и подключите каждую из них к входным данным и усредняющему нейрону в качестве выходных. Когда вы тренируете эту сеть, разные случайные инициализации каждого из слабых учеников гарантируют, что все они достигнут разных оптимальных весов, когда обучение закончится.

Полный рецепт определения размера архитектуры вашей нейронной сети

Если вы последуете этому аргументу, архитектура нейронной сети, которая усредняет идентичные копии меньших нейронных сетей (слабые обучающиеся), не так глупа, как может показаться на первый взгляд. Мне нравится называть такую ​​архитектуру усреднения ансамблем нейронного усреднения. Мы еще не говорили о слабых учениках, строительных блоках этих архитектур. Какую сеть выбрать? Что ж, что бы вы ни выбрали, у вас будет несколько его копий впоследствии, так что, возможно, будет хорошей идеей сделать вещи небольшими и простыми. Универсальная аппроксимационная теорема.

говорит нам, насколько маленьким и простым он может стать: достаточно одного скрытого слоя. Конечно, на практике сети с большим количеством уровней зачастую намного лучше. Но давайте пока придерживаемся этого минималистичного подхода. Если мы это сделаем, единственное, что остается решить, прежде чем мы полностью определим нашего слабого ученика, - это размер единственного скрытого слоя. Сколько нейронов нам нужно?

Ответ на удивление прост: мы подбираем одного слабого ученика на основе данных обучения (и ради скорости нам не нужно подбирать его идеально, достаточно небольшого количества эпох). Мы начинаем с небольшого количества нейронов в скрытом слое, скажем, 10. После обучения сети мы проверяем, не является ли какой-либо из этих нейронов лишним, т.е. его выход сильно коррелирован с другим нейроном. Если нет, мы пробуем с большим числом (скажем, 20), пока не получим два сильно коррелированных нейрона. Таким образом, мы делаем все возможное, чтобы параметры слабого ученика были завышены, но это не так. На практике вы можете захотеть повторить эту процедуру с несколькими различными инициализациями вашего генератора случайных чисел, чтобы убедиться, что ваш выбор надежен. Если сомневаетесь, используйте большее количество нейронов.

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

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

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

В свете этих приемлемых свойств давайте воспользуемся сокращением: выберите небольшое количество копий (например, 10) для ваших первых экспериментов и увеличьте число от 50 до 100, если вы хотите что-то доработать. Обычно это хорошо работает. Если вы сталкиваетесь с ситуациями, когда это не так, я очень хочу об этом услышать.

Категорические осложнения

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

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

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

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

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

Так же хорошо, как деревья с градиентным усилением

Сравнивая производительность этого подхода с деревьями с градиентным усилением в рамках статьи в блоге, мы вынуждены использовать менее научный подход. Чтобы продемонстрировать, что эти методы хорошо работают посреди домашнего поля повышения градиента, мы выбрали очень маленький набор данных, который содержит множество категориальных переменных. Последнее важно, потому что древовидные методы обычно работают с категориальными данными. К счастью, Szilard Pafka выполнил множество тестов повышения градиента на основе набора данных со многими категориальными переменными. Он протестировал разные реализации для различных версий одного и того же набора данных. В самом маленьком из них всего 10 тыс. Строк, и мы будем использовать именно его, чтобы развеять миф о глубоком обучении, всегда требующем большого количества данных. Лучший тест AUC в тесте Szilard для набора данных 10K составляет 70,3 (достигается Xgboost). Обратите внимание, что Сциллард не проводил расширенного поиска по сетке гиперпараметров, а выполнял более мелкий поисковый поиск. Поскольку мы сделали еще меньше настройки гиперпараметров, сравнение наших результатов с его результатами не дает методов глубокого обучения несправедливому преимуществу. Когда вы смотрите на блокнот, вы видите, что мы достигли 69,5 с подходом нейронной сети, так что мы примерно на том же уровне производительности. Эта оптимальная производительность для сети достигается уже после 4 (!) Эпох обучения, поэтому обучение будет даже быстрее, чем с градиентным бустингом.

Попробуйте это дома!

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

Есть еще много чего, откуда это исходит - мы лишь поцарапали поверхность богатой теории. Приведенные здесь методы можно расширить в нескольких направлениях, и мы даже можем расширить аналогию с классическим ансамблевым обучением, перейдя от усреднения к усилению, создавая еще более точные модели. Существуют также специализированные методы прозрачности модели. Я могу осветить некоторые из этих тем в будущих публикациях. А пока попробуйте сами! Я очень хочу услышать о вашем опыте.

Первоначально опубликовано на https://www.btelligent.com.