Преимущества и недостатки использования softmax/sigmoid и categorical_crossentropy/binary crossentropy для бинарной классификации с использованием CNN

Вопрос или проблема

Я разрабатываю модель глубокого обучения, используя tensorflow и keras. У меня есть вопрос касательно архитектуры выхода. Я хочу классифицировать между двумя классами: изображения с дефектами и изображения без дефектов. Я построил свёрточную нейронную сеть (CNN) на основе VGG16, но меньшего размера.
Проблема заключается в бинарной классификации. Можно использовать один уникальный нейрон на выходе, используя сигмоидальную активацию и функцию потерь бинарной кросс-энтропии. Другой вариант — использовать два нейрона, используя softmax и категориальную кросс-энтропию в качестве потерь (естественно, используя one-hot кодировку для представления 2-х меток). Я искал подробное объяснение различий между этими двумя вариантами, но не нашел ответ на то, что действительно хочу знать.

Вот связаный вопрос, который я читал: https://stats.stackexchange.com/a/260537/295456. Здесь говорится, что бинарная кросс-энтропия – это просто особый случай категориальной кросс-энтропии.

Есть ли какие-либо преимущества у какого-либо из этих подходов? Я хотел бы узнать преимущества и недостатки обоих вариантов. Сеть будет сходиться быстрее/медленнее? Будет ли больше параметров для обучения? Можно ли считать один из этих вариантов плохим дизайном?

Это просто схематичный код для представления двух подходов:

## Опция 1.
targets = [[0,1], [1,0],...]
...
model.add(Dense(units = 2, activation = 'softmax'))
model.compile(loss="categorical_crossentropy")

## Опция 2.
targets = [1,0,1,...]
...
model.add(Dense(units = 1, activation = 'sigmoid'))
model.compile(loss="binary_crossentropy")

В случае бинарной классификации эти два метода эквивалентны. Между ними не будет значимой разницы в обучении.

.

Ответ или решение

В контексте бинарной классификации с использованием сверточной нейронной сети (CNN) описанная задача предосталяет два подхода для настройки выходного слоя и функции потерь. Это использование одного нейрона с активацией сигмоидой и функцией потерь binary_crossentropy, или использование двух нейронов с функцией активации softmax и функцией потерь categorical_crossentropy. Давайте подробно рассмотрим оба подхода, обсуждая их теоретическую основу, примеры и практическое применение.

Теоретическая основа

Sigmoid и Binary Crossentropy

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

Теоретические преимущества:

  1. Простота: Архитектура модели более простая, так как используется один нейрон.
  2. Интерпретируемость: Выход модели соответствует вероятности принадлежности ко второму классу.
  3. Низкая вычислительная нагрузка: Меньше параметров в выходном слое.

Softmax и Categorical Crossentropy

Использование двух нейронов с функцией активации softmax превращает задачу в многоклассовую классификацию на два класса. Softmax нормализует выходные сигналы нейронов, предоставляя вероятности для каждого класса, которые в сумме составляют 1. Categorical crossentropy оценивает ошибку в прогнозировании этих вероятностей.

Теоретические преимущества:

  1. Обобщаемость: Подход вполне применим к задачам многоклассовой классификации, что может быть полезно при модификации модели.
  2. Явная интерпретация: Модель в явной форме предсказывает вероятность для каждого класса.

Практический пример

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

Пример 1: Sigmoid + Binary Crossentropy

targets = [1, 0, 1, ...]
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy')

Модель будет предсказывать скалярное значение, представляющее вероятность дефектности изображения. Обучение модели может происходить быстрее за счет меньшего числа параметров.

Пример 2: Softmax + Categorical Crossentropy

targets = [[0, 1], [1, 0], ...]
model.add(Dense(units=2, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy')

Хотя этот подход обладает избыточностью для бинарной классификации, он предоставляет аналогичный результат с точки зрения правильной классификации изображений.

Применение и выбор

С практической точки зрения, выбор между этими двумя подходами зависит от контекста задачи и возможных будущих требований:

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

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...