Исследование границы между человеческими и машинными правилами
Делиться

Глубокое обучение часто воспринимают как «чёрный ящик». Мы знаем, что оно обучается на данных, но вопрос в том, как оно на самом деле обучается.
В этой статье мы построим небольшую сверточную нейронную сеть (CNN) непосредственно в Excel, чтобы шаг за шагом понять, как CNN на самом деле работает с изображениями.
Мы откроем этот чёрный ящик и будем наблюдать за каждым шагом, происходящим прямо на наших глазах. Мы поймём все вычисления, лежащие в основе того, что мы называем «глубоким обучением».
Эта статья входит в серию статей о реализации алгоритмов машинного и глубокого обучения в Excel. Все файлы Excel можно найти по этой ссылке на Кофи.
1. Как машины видят изображения
1.1 Два способа обнаружения чего-либо на изображении
Когда мы пытаемся обнаружить объект на изображении, например, кошку, существует два основных подхода: детерминированный и машинное обучение. Давайте рассмотрим, как эти два подхода работают на примере распознавания кошки на изображении.
Детерминированный способ подразумевает написание правил вручную.
Например, мы можем сказать, что у кошки круглая мордочка, два треугольных уха, тело, хвост и т. д. Поэтому разработчик выполнит всю работу по определению правил.
Затем компьютер применяет все эти правила и выдает оценку сходства.

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

Вот тут-то все и может стать загадочным.
Мы обычно говорим, что машина сама во всем разберется, но настоящий вопрос в том, как это сделать.
Фактически, нам всё ещё нужно объяснить машинам, как создавать эти правила. И правила должны быть обучаемыми. Поэтому ключевой момент: как определить, какие правила будут использоваться?
Чтобы понять, как определять правила, нам сначала нужно понять, что такое изображение.
1.2 Понимание того, что такое изображение
Кошка — сложная форма, но мы можем взять простой и понятный пример: распознавание рукописных цифр из набора данных MNIST.
Для начала, что такое изображение?
Цифровое изображение можно представить как сетку пикселей. Каждый пиксель — это число, показывающее его яркость: от 0 для белого до 255 для чёрного.
В Excel мы можем представить эту сетку в виде таблицы, где каждая ячейка соответствует одному пикселю.

Исходный размер цифр — 28 x 28. Но для простоты мы будем использовать таблицу 10 × 10. Она достаточно мала для быстрых вычислений, но при этом достаточно велика, чтобы показать общую форму.
Поэтому мы уменьшим размерность.
Например, рукописную цифру «1» можно представить в виде сетки 10×10, как показано ниже в Excel.

1.3 До глубокого обучения: классическое машинное обучение для изображений
До использования сверточных нейронных сетей или любого метода глубокого обучения мы уже можем распознавать простые изображения с помощью классических алгоритмов машинного обучения, таких как логистическая регрессия или деревья решений .
При таком подходе каждый пиксель становится одним объектом . Например, изображение размером 10×10 содержит 100 пикселей, поэтому на входе у нас 100 объектов.
Затем алгоритм учится связывать шаблоны значений пикселей с метками, такими как «0», «1» или «2».

Фактически, при использовании этого простого подхода к машинному обучению логистическая регрессия может дать довольно хорошие результаты с точностью около 90%.
Это показывает, что классические модели способны извлекать полезную информацию из необработанных значений пикселей.
Однако у них есть существенное ограничение: они рассматривают каждый пиксель как независимое значение, не учитывая его соседей. В результате они не могут определить пространственные отношения между пикселями.
Интуитивно мы понимаем, что производительность будет невысокой для сложных изображений. Поэтому этот метод не масштабируется.
Если вы уже знакомы с принципами работы классического машинного обучения, то понимаете, что никакой магии здесь нет. Более того, вы уже знаете, что делать: нужно улучшить этап проектирования признаков, преобразовать их, чтобы получить более значимую информацию из пикселей.
2. Пошаговое создание CNN в Excel
2.1 От сложных сверточных нейронных сетей к простым в Excel
Когда мы говорим о сверточных нейронных сетях, мы часто видим очень глубокие и сложные архитектуры, такие как VGG-16. Много слоёв, тысячи параметров и бесчисленное количество операций — всё это кажется невероятно сложным, и, как говорится, невозможно понять, как именно это работает.

Основная идея слоев: пошаговое обнаружение закономерностей.
На примере рукописных цифр зададимся вопросом: какой может быть простейшая возможная архитектура CNN?
Во-первых, прежде чем создавать все скрытые слои, уменьшим их количество. Сколько? Давайте сделаем один. Всё верно: только один.
Что касается фильтров, каковы их размеры? В реальных свёрточных нейронных сетях мы обычно используем фильтры 3×3 для обнаружения небольших закономерностей. Но начнём с крупных.
Насколько большой? 10×10!
Да, почему бы и нет?
Это также означает, что вам не нужно перемещать фильтр по изображению. Таким образом, мы можем напрямую сравнить входное изображение с фильтром и увидеть, насколько хорошо они соответствуют друг другу.
В этом простом случае речь идет не о производительности, а о ясности.
В нем будет показано, как сверточные нейронные сети шаг за шагом обнаруживают закономерности.
Теперь нам нужно определить количество фильтров. Назовём их 10, это минимум. Почему? Поскольку цифр 10, нам нужно минимум 10 фильтров. Мы рассмотрим, как их найти, в следующем разделе.
На изображении ниже представлена схема простейшей архитектуры нейронной сети CNN:

2.2 Обучение фильтров (или их самостоятельное проектирование)
В настоящей сверточной нейронной сети фильтры не пишутся вручную. Они обучаются в процессе обучения.
Нейронная сеть корректирует значения внутри каждого фильтра, чтобы обнаружить закономерности, которые лучше всего помогают распознавать изображения.
В нашем простом примере Excel мы не будем обучать фильтры.
Вместо этого мы создадим их сами, чтобы понять, что они собой представляют.
Поскольку нам уже известны формы рукописных цифр, мы можем разработать фильтры, которые будут похожи на каждую цифру.
Например, мы можем нарисовать фильтр, соответствующий форме 0, другой — 1 и т. д.
Другой вариант — взять среднее изображение всех примеров для каждой цифры и использовать его в качестве фильтра.
Каждый фильтр будет представлять собой «среднюю форму» числа.
Здесь граница между человеком и машиной снова становится заметной. Мы можем либо позволить машине найти фильтры, либо, используя собственные знания, создать их вручную.
Всё верно: машины не определяют природу операций. Их определяют исследователи машинного обучения. Машины годятся только для выполнения циклов, для поиска оптимальных значений для этих правил. И в простых случаях люди всегда лучше машин.
Итак, если нужно определить всего 10 фильтров, мы знаем, что можем напрямую определить 10 цифр. Таким образом, мы интуитивно понимаем природу этих фильтров. Но, конечно, есть и другие варианты.
Теперь, чтобы определить числовые значения этих фильтров, мы можем напрямую использовать наши знания, а также обучающий набор данных.
Ниже представлены 10 фильтров, созданных путём усреднения всех изображений каждой рукописной цифры. Каждый из них демонстрирует типичный шаблон, определяющий число.

2.3 Как CNN обнаруживает закономерности
Теперь, когда у нас есть фильтры, нам нужно сравнить входное изображение с этими фильтрами.
Центральная операция в сверточной нейронной сети называется кросс-корреляцией . Это ключевой механизм, позволяющий компьютеру сопоставлять закономерности на изображении.
Это работает в два простых шага:
- Умножение значений/скалярное произведение: мы берём каждый пиксель входного изображения и умножаем его на пиксель в той же позиции фильтра. Это означает, что фильтр «смотрит» на каждый пиксель изображения и измеряет, насколько он похож на шаблон, сохранённый в фильтре. Да, если оба значения большие, то и результат будет большим.
- Сложить результаты/сумму: произведения этих умножений затем складываются, чтобы получить одно число. Это число показывает, насколько точно входное изображение соответствует фильтру.

В нашей упрощенной архитектуре фильтр имеет тот же размер, что и входное изображение (10×10).
Благодаря этому фильтру не нужно перемещаться по изображению.
Вместо этого кросс-корреляция применяется один раз, сравнивая все изображение напрямую с фильтром.
Это число показывает, насколько хорошо изображение соответствует шаблону внутри фильтра.
Если фильтр похож на среднюю форму рукописной цифры «5», то высокое значение означает, что изображение, вероятно, представляет собой цифру «5».
Повторяя эту операцию со всеми фильтрами, по одному на каждую цифру, мы можем увидеть, какой шаблон дает наибольшее совпадение.
2.4 Создание простой сверточной нейронной сети в Excel
Теперь мы можем создать небольшую сверточную нейронную сеть от начала до конца, чтобы увидеть, как весь процесс работает на практике.
- Входные данные: матрица 10×10 представляет собой изображение для классификации.
- Фильтры: Мы определяем десять фильтров размером 10×10, каждый из которых представляет собой усредненное изображение рукописной цифры от 0 до 9. Эти фильтры действуют как детекторы шаблонов для каждого числа.
- Взаимная корреляция: каждый фильтр применяется к входному изображению, создавая единую оценку, которая измеряет, насколько хорошо изображение соответствует шаблону этого фильтра.
- Решение: Фильтр с наивысшей оценкой даёт предсказанную цифру. В системах глубокого обучения этот шаг часто выполняется функцией Softmax , которая преобразует все оценки в вероятности.
В нашей простой версии Excel для определения того, какую цифру, вероятнее всего, представляет изображение, достаточно набрать максимальное количество баллов .

2.5 Свертка или кросс-корреляция?
В этот момент вы, возможно, задались вопросом, почему мы называем это сверточной нейронной сетью, если описанная нами операция на самом деле является взаимной корреляцией .
Разница тонкая, но простая:
- Свертка означает переворачивание фильтра как по горизонтали, так и по вертикали перед наложением его на изображение.
- Взаимная корреляция означает применение фильтра напрямую, без переворачивания.
Более подробную информацию вы можете прочитать в этой статье:
Свертка против корреляции
По какой-то исторической причине термин «свёртка» остался, тогда как операция, которая фактически выполняется в CNN, — это кросс-корреляция.
Как вы можете видеть, большинство фреймворков глубокого обучения, таких как PyTorch или TensorFlow, фактически используют взаимную корреляцию при выполнении «сверток».

Суммируя:
CNN называются «сверточными», но на практике — «взаимно-корреляционными».
3. Создание более сложных архитектур
3.1 Небольшие фильтры для обнаружения более подробных закономерностей
В предыдущем примере мы использовали один фильтр 10×10 для сравнения всего изображения с одним шаблоном.
Этого было достаточно, чтобы понять принцип кросс-корреляции и то, как CNN обнаруживает сходство между изображением и фильтром.
Теперь мы можем сделать еще один шаг вперед.
Вместо одного глобального фильтра мы будем использовать несколько фильтров меньшего размера , каждый размером 5×5 . Эти фильтры будут анализировать небольшие области изображения, выявляя локальные детали, а не всю форму целиком.
Рассмотрим пример с четырьмя фильтрами 5×5, примененными к рукописной цифре.
Входное изображение можно разрезать на 4 части размером 5×5 пикселей каждая.
Мы по-прежнему можем использовать среднее значение всех цифр. Таким образом, каждый фильтр даст четыре значения вместо одного.

В конце мы можем применить функцию Softmax, чтобы получить окончательный прогноз.
Но в этом простом случае можно просто просуммировать все значения.
3.2 Что делать, если цифра не находится в центре изображения?
В предыдущих примерах я сравнивал фильтры с фиксированными областями изображения. И тут возникает интуитивный вопрос: что делать, если объект не по центру? Да, он может находиться в любой точке изображения.
К сожалению, решение очень простое: вы перемещаете фильтр по изображению.
Давайте снова рассмотрим простой пример: размер входного изображения — 10×14. Высота не меняется, а ширина — 14.
Итак, фильтр по-прежнему имеет размер 10 x 10 и будет скользить по изображению горизонтально. Тогда мы получим взаимную корреляцию 5.
Мы не знаем, где находится изображение, но это не проблема, потому что мы можем просто получить максимальное значение из 5 перекрестных корреляций.
Это то, что мы называем слоем максимального объединения.

3.3 Другие операции, используемые в сверточных нейронных сетях
Мы пытаемся объяснить, почему каждый компонент полезен в сверточной нейронной сети.
Самый важный компонент — это взаимная корреляция между входными данными и фильтрами. Мы также объясняем, почему небольшие фильтры могут быть полезны, и как метод максимального пулинга обрабатывает объекты, которые могут находиться где угодно на изображении.
В сверточных нейронных сетях часто используются и другие шаги, например, использование нескольких слоев подряд или применение нелинейных функций активации.
Эти шаги делают модель более гибкой, более надежной и способной усваивать более сложные закономерности.
Почему именно они полезны?
Я оставлю этот вопрос вам в качестве упражнения.
Теперь, когда вы поняли основную идею, попытайтесь подумать о том, как каждый из этих шагов помогает CNN развиваться дальше, и попробуйте рассмотреть какой-нибудь конкретный пример в Excel.
Заключение
Моделирование сверточной нейронной сети в Excel — это интересный и практичный способ увидеть, как машины распознают изображения.
Работая с небольшими матрицами и простыми фильтрами, мы можем понять основные этапы работы сверточной нейронной сети.
Надеюсь, эта статья дала вам пищу для размышлений о том, что такое глубокое обучение. Разница между машинным и глубоким обучением заключается не только в глубине модели, но и в том, как она работает с представлениями изображений и данных.
Источник: towardsdatascience.com



























