Вот набор данных, который поможет продемонстрировать, когда рекуррентная сверточная нейронная сеть (RCNN) превосходит своего единовременного аналога, сверточную нейронную сеть (CNN).

Немного грунтовки

Рекуррентные модели - это модели, специально разработанные для использования последовательности данных при прогнозировании (например, прогнозирующий индикатор фондового рынка, который использует последовательность точек данных за последние 3 дня).

Сверточные модели - это модели, специально разработанные для работы с данными изображений.

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

Набор данных

Загрузите его здесь с Kaggle, также можно найти на моем Github.

Задание

Предскажите следующую позицию квадрата!

Вход

В качестве CNN вы получаете в качестве входных данных только один кадр:

В качестве RCNN вы получаете несколько кадров на входе:

Интуиция

Почему CNN должна недостаточно эффективно обрабатывать этот набор данных?

Взгляните на ввод для CNN выше (одиночный кадр). Можете ли вы с уверенностью предсказать, каким будет следующее положение Скользящей площади? Я предполагаю, что вы ответите на это «Нет». Это потому, что он совершенно неоднозначен, то есть может двигаться вправо или влево, нет способа узнать, основываясь на одном изображении.

Почему RCNN должна хорошо работать с этим набором данных?

Попробуйте предсказать следующую позицию, используя вход RCNN сверху (два кадра). Теперь довольно легко? Направление, в котором движется квадрат, больше не является двусмысленным.

Тестирование производительности CNN против RCNN

Ознакомьтесь с этой записной книжкой, чтобы увидеть код для создания и обучения простых CNN и RCNN (модели Keras) на этом наборе данных.

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

Ниже приведена частотная диаграмма ошибок, которые каждая модель сделала в своих прогнозах. Например, вы можете видеть, что за 7 тестов CNN правильно разместила квадраты (нулевая ошибка).

Что происходит с оценками ошибок CNN?

Вы можете заметить, что CNN делает много ошибок, которые составляют +/- 4. Что ж, все открывается, когда мы проверяем одно из этих предсказаний:

Кажется, что CNN всегда предсказывает, что квадрат находится в том же положении, что и во входном изображении. Вы можете подумать, что это странно, потому что следующая позиция квадрата может быть только слева или справа. Зачем ему предсказывать, что он окажется там, где его демонстративно не будет !? Одним словом ... последовательность! Как правило, для моделей машинного обучения лучше все время немного ошибаться, чем время от времени сильно ошибаться. Это предпочтение достигается в большинстве алгоритмов обучения путем возведения ошибки в квадрат, как показано ниже:

CNN научился угадывать ту же позицию, что и ввод, потому что тогда он всегда будет отклоняться не более чем на +/- 5 от правильного ответа. Если бы он всегда предполагал, что квадрат движется вправо: в половине случаев это было бы точно, но в другой половине предсказания были бы неверными на 10! (что было бы не очень согласованно)

Естественно, что RCNN находится в своем элементе ’

Из диаграммы ошибок видно, что RCNN не дает такого количества ошибок, как CNN. Это потому, что у него нет проблем с выяснением, в каком направлении движется квадрат.

Надеюсь, это дало вам немного больше интуиции относительно того, когда использовать RCNN вместо стандартных CNN.

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