Мы рады сообщить, что PolyAnalyst начал поддерживать моделирование данных с использованием сверточных нейронных сетей. Сверточная нейронная сеть (сокр. СНС) – это определенный тип нейронной сети. Для понимания того, что такое сверточная нейронная сеть, необходимо иметь представление об основных концепциях нейронной сети, а затем углубиться в изучение отличительных особенностей сверточных нейронных сетей.
Нейронные сети – это один из самых популярных методов решения таких проблем машинного обучения, как:
- Классификация – приписывание основных признаков (или меток) иерархии классов. Например, на основе вашего адреса и дохода определить, за кого вы можете проголосовать и затем отнести вас в определенную группу избирателей.
- Регрессия – анализ зависимости одного числового значения от значений других входных данных. Обычно применяется для прогнозирования будущих значений. Например, с какой вероятностью завтра пойдет дождь или какова вероятность того, что вы станете постоянным покупателем в этом магазине.
- Кластеризация – измерение сходства основных признаков и их систематизация. Например, определить, основываясь на покупательском поведении, рынок товаров широкого потребления.
Сверточные сети незначительно отличаются от нейронных сетей. Их главное отличие в том, что сверточные сети способны сверхточно обрабатывать такие параметры сигнала, как пиксели изображения. В особенности сверточные нейронные сети хорошо себя проявляют в нахождении моделей в искажённых данных и, помимо этого, адаптируются лучше, чем другие нейронные сети.
Немного истории
Нейронные сети зародились еще в 1940х годах. Однако сверточные нейронные сети появились позже и благодаря возобновившемуся интересу к глубинному обучению уже завоевывали большую популярность.
Исторически сложилось, что СНС применялись для работы с изображениями в области компьютерного зрения1. Сверточные нейронные сети известны тем, что точно распознают объекты изображений, например, лица людей, или постоянно меняющийся вид из окна автомобиля. СНС используются так же при обработке естественного языка (неструктурированных данных) и оптическом распознавании символов (англ. optical character recognition, OCR
Применение сверточных сетей
- Facebook использует сверточные нейронные сети для того, чтобы автоматически проставлять теги постам.
- Google использует сверточные нейронные сети при поиске картинок.
- Amazon использует сверточные нейронные сети в целях правильной рекомендации товаров покупателю (кросс-продажи).
- Pinterest использует сверточные нейронные сети для персонализации домашней страницы.
Какие преимущества имеют сверточные нейронные сети?
СНС состоят из сверточных слоев. Они позволяют извлекать признаки объектов и строить из них многослойную иерархическую структуру, где признаки более высокого уровня образуются из признаков более низкого уровня.
Сверточные слои имеют меньший вес в отличие от полносвязных слоев, что повышает эффективность обучения многослойных сетей.
Сверточные нейронные сети решают не только задачи по распознаванию моделей, а так же могут применяться при работе с числовыми данными.
Что такое свертка?
Свое название сверточные сети получили из-за этапа обработки данных, который называется свертка. В нашей статье мы не будем затрагивать математическое объяснение этого понятия, а лишь подчеркнем, что свертка хорошо работает при извлечении признаков из данных и, более того, позволяет уменьшить количество признаков (пулинг) при агрегации и фильтрации. Именно встроенные алгоритмы по уменьшению количества признаков делают сети такими успешными при анализе данных c большим набором признаков.
Что такое уменьшение признаков?
Попробуем объяснить простым, не техническим языком.
Уменьшение признаков сопоставимо с рисованием скетчей. Представьте рисунок, на котором лежит тонкая бумага. При определенном освещении только некоторые части рисунка будут просвечивать через бумагу. Возьмите ручку и выделите некоторые линии. Затем уберите оригинал и внимательно посмотрите на свой скетч. Копия содержит значительно меньше информации, чем оригинал. Цвет отличается от исходного рисунка. Не все линии удалось повторить. В научных кругах это бы назвали алгоритмом выделения контуров. Каждая линия, которую вы нарисовали – это распознанный контур. Человек с легкостью справится с такой задачей, но повторить такое компьютеру не так-то просто.
Одна из примечательных характеристик сверточных нейронных сетей – это возможность совмещения этапа выделения контуров с этапом моделирования. В других методах машинного обучения этапы подготовки данных для анализа обычно не совмещаются с этапом обучения.
Функцией первого слоя сверточной нейронной сети является абстрагирование от некоторых признаков исходных данных. Последующие слои продолжают обрабатывать полученные абстрактные признаки вместо исходных данных. Обычно моделирование исходных данных нерентабельно, поскольку они имеют тысячу полезных признаков, которые могут служить критерием принятия решений. А сверточные сети благодаря этапу сокращения количества признаков через свертку и пулинг повышают эффективность моделирования – именно это и является причиной их привлекательности.
Следует упомянуть, что это упрощенное объяснение. Настоящие сети могут включать большое количество слоев отбора признаков и большое количество слоев пулинга. Детализация признаков – это итеративный процесс, и каждый раз, когда сеть проверяет данные на этапе обучения, есть возможность внести поправки.
Управление критериями принятия решений
Уменьшение признаков имеет свои плюсы и минусы. Если алгоритм исключает слишком много исходных признаков, то результат естественным образом падает.
Вспомним детскую игру в испорченный телефон, где дети шепчут друг другу какое-нибудь слово так, чтобы не было слышно другим участникам. Когда последний игрок называет слово, которое он услышал, вслух, то оно часто удивительным образом отличается от исходного. Каждое повторение слова – это потеря информации. В определенный момент потери начинают накапливаться и начальное слово меняется.
Одно из преимуществ того, что этап извлечения признаков связан с последующими слоями, заключается в том, что сеть может переконфигурировать себя самостоятельно, поскольку запоминает новые шаблоны. Например, если сеть неудовлетворительно спрогнозировала значение, что измеряется высоким уровнем ошибок, то она может провести дополнительное обучение, в результате которого начнет принимать во внимание либо дополнительные признаки, либо те же самые признаки, но более основательно, либо перестанет принимать во внимание какие-то признаки, либо посмотрит на них под другим углом.
При решении проблемы извлечения признаков не всегда лучшим выходом является добавление большего количества точек данных. Большое количество признаков может существенно увеличить время обучения и иногда привести к потере точности, это как найти человека в толпе, которая постоянно увеличивается.
Остановитесь и подумайте, как хорошо ваши уши фильтруют шум в комнате, где много людей, чтобы слышать речь одного человека, или как искусны ваши глаза в отборе информации, которую они получают от периферического зрения. Проблема машинного обучения в том, что они видят и слышат все подряд, без разбора. У машин нет врожденной способности игнорировать объекты в визуальной периферии или не обращать внимания на отвлекающие звуки и помехи. Машины пытаются научиться различать сигнал и шум.
Балансирование между тем, какие данные принимать в расчет, а какие игнорировать, и есть акт манипуляции. Этот процесс требует некоторой точности. И, возможно, даже некоторой субъективности. Сверточные нейронные сети предлагают несколько способов, чтобы этого достичь. Вышеупомянутые сети являются высокоточными.
На ошибках учатся: как нейронные сети эволюционируют и делают более точные прогнозы
Алгоритмы нейронной сети пока еще не научились справляться с некоторыми проблемами, особенно с такими, где моделирования связано с установкой ложного минимума при определении погрешности.
Представьте, что вы прошли полпути, поднимаясь на Эверест, а затем утверждаете, что взобрались на вершину так легко, потому что не видели самую высшую точку горы со своей позиции.
Нейронные сети обучаются с помощью минимизации погрешности. Это схоже с классическим поведенческим состоянием, вспомним собак Павлова, реагирующих на звук звонка. Сеть прогнозирует, каким должно быть значение, и измеряет погрешность. Если операция приостанавливается из-за выбора неверного значения, то сеть измерит насколько далека она была от корректного значения и перепроверит свои нейроны. Затем сеть повторит операцию, и полученный прогноз, вероятно, будет ближе к желаемому значению. Несколько подобных повторений и результат станет более точным (при условии, что данные проявляют некое подобие шаблона).
Сети обычно сами выбирают наиболее подходящее предположение, хотя не всегда бывают правы. Ни на каком из этапов обучения алгоритм не может знать, что он наконец произвел расчет для всех критериев принятия решений. Но если изменение критериев не оказало существенного влияния на сокращение ошибок, то выполнение алгоритма прекращается. Часто это происходит именно тогда, когда полпути уже пройдено.
Смысл в том, что ни один алгоритм не является универсальным. Нет такого метода, который бы одинаково хорошо обучал все машины. Нужно быть готовым экспериментировать с другими методами моделирования, например, с такими, как деревья решений или регрессия.
В основном по принципу работы этапы любого алгоритма СНС схожи с традиционными нейронными сетями, поэтому мы не будем слишком углубляться.
Новый узел в PolyAnalyst – Сверточная нейронная сеть
PolyAnalyst недавно представил специальный функционал для тренировки моделей сверточных нейронных сетей. Узел Сверточная нейронная сеть имеет несколько настраиваемых параметров. В отличие от большинства схожих по функциональности пакетов программного обеспечения, где при настройке не обойтись без аналитика, в PolyAnalyst возможна автоматическая настройка структуры. С помощью этой разработки можно фильтровать и нормализовывать данные, формировать проверочную выборку для контроля переобучения, обучать сеть на выбранной архитектуре, разбивать пример на тренировочный и тестовый объемы и, наконец, выбирать лучшую модель.
Пример использования Сверточной нейронной сети в PolyAnalyst
Для тех, кто знаком с PolyAnalyst, использование нового узла не покажется чем-то сложным, он схож с другими узлами моделирования, выполняющими классификацию и регрессию.
Перед началом обучения важно выполнить подготовку данных. Когда данные готовы, необходимо обозначать зависимую и независимую переменные. В следующем анализе мы увидим входные данные, разбитые на обучающие и тестовые сегменты. Модель тренируется на обучающих сегментах и затем тестируется на тестовых сегментах.
На рисунке ниже показан отчет, который позволяет оценить исполнение модели с применением итеративного подхода к обучению шаблонов. Диаграмма показывает, что ошибка прогнозирования со временем уменьшается (при этом увеличивается число обучающих циклов), поскольку модель выявляет больше шаблонов и выполняет переобучение.