Нейронная сеть с глубоким обучением: сложная или простая модель
Недавно я написал блог под названием Обнаружение пневмонии по рентгеновским изображениям с использованием нейронной сети глубокого обучения, где я представил результаты того, что я выбрал как лучшую из 15 различных архитектур моделей, которые я создал для решения задачи бинарной классификации. . Для читателей, не знакомых с этим, это означает, что моя модель предсказывает только 0 или 1. 0 соответствует НОРМАЛЬНОЙ или НЕТ ПНЕВМОНИИ, а 1 - ПНЕВМОНИИ.
Прежде чем я продолжу, не волнуйтесь, если вы не читали мой предыдущий блог, он вам не понадобится, чтобы понять этот, поскольку в нем будет вся необходимая информация для сравнения, как сказано в заголовке, от сложной модели к простой.
В моем предыдущем блоге я описал, как я начал с простой двухуровневой модели сверточной нейронной сети (CNN), использующей минимальные параметры для учета переобучения, и закончил с более сложной архитектурой, состоящей из 5 сверточных блоков, каждый с двойным слоев и с некоторыми гиперпараметрами для настройки модели.
Эту последнюю модель я назвал Model_15, что дало точность проверки и тестирования 94,83 и 90,84% соответственно. Действительно хорошие значения точности, но, как я объяснил в моем предыдущем блоге, одна только точность может вводить в заблуждение, если вы имеете дело с неравным количеством наблюдений в каждом классе (несбалансированное) или если у вас более двух классов в вашем наборе данных, и если вы читаете в моем последнем блоге, вы уже знаете, что набор рентгеновских данных был очень несбалансированным, поэтому мне также следует обратить внимание на «Точность» и «Отзыв».
Я лишь кратко описал эти две метрики, но без использования каких-либо уравнений, математических основ и объяснения их важности при попытке решить эту конкретную проблему, связанную со здоровьем. Что я попытаюсь сделать сейчас, так это подготовить контекст с некоторой базовой теорией, чтобы читатель мог понять, как, потратив некоторое время, я продолжал тестировать свои различные модели с использованием «матриц путаницы» и обнаружил, что одна из моих простейших архитектур превосходит сложность Model_15.
Прежде всего, важно понимать, что в целом между этими двумя показателями (точность и отзыв) точность имеет тенденцию быть более важным, чем отзыв. Почему? потому что более высокая точность означает, что алгоритм возвращает более релевантных результатов, чем нерелевантных, а высокий уровень отзыва означает, что алгоритм возвращает большинство релевантных результатов (независимо от того, возвращаются ли также нерелевантные результаты). Но это может варьироваться в зависимости от того, как вы хотите использовать эти переменные, и этот случай классификации рентгеновских изображений является одним из тех исключений, когда вспоминание будет более важным, но я объясню это позже. А пока давайте попробуем сначала понять, что такое Матрица путаницы.
Матрица неточностей - это метод, который суммирует производительность алгоритма классификации, давая вам лучшее представление о том, что модель делает правильно и какие типы ошибок допускают, другими словами, она показывает, как ваша модель классификации сбивается, когда она делает прогнозы (рисунок 1).
На рис. 1 показан базовый пример двухклассовой матрицы проблемной путаницы, где число «1» представляет положительный результат (наличие заболевания), а число «0» - отрицательный результат (отсутствие заболевания). Итак, давайте расшифруем эту простую матрицу:
- Целевые переменные имеют два значения: положительное или отрицательное.
- Строки представляют фактические значения
- Столбцы представляют собой прогнозируемые значения.
На самом деле не слишком сложно, но теперь перейдем к важной части матрицы, которая понимает следующие четыре концепции:
- Истинное положительное значение (TP): прогнозируемое значение соответствует фактическому значению, что означает, что фактическое значение было положительным, а модель предсказала положительное значение.
- Истинно-отрицательное значение (TN): прогнозируемое значение соответствует фактическому значению, что означает, что фактическое значение было отрицательным, а модель спрогнозировала отрицательное значение.
- Ложно-положительный результат (FP): предсказанное значение было неверно предсказанным, что означает, что фактическое значение было отрицательным, но модель предсказала положительное значение.
- Ложноотрицательное значение (FN): предсказанное значение было неверно предсказанным, что означает, что фактическое значение было положительным, но модель предсказала отрицательное значение.
Если на данный момент вы не понимаете предыдущие концепции, ничего страшного, я добавил рисунок 2, чтобы попытаться сделать их более понятными, поэтому, надеюсь, этого и случая, который будет обсуждаться в этом блоге, будет достаточно.
Теперь, когда мы знаем, что нам сообщает матрица путаницы, давайте перейдем к двойному понятию Precision и Recall и почему они важны, но давайте рассмотрим пример, в котором мы принять значения из рисунка 3:
Прежде чем мы начнем, посмотрим на распределение данных и на то, насколько несбалансирован этот набор данных с соотношением 20: 1 между TP и TN. Имея это в виду, давайте посчитаем точность и обсудим результаты:
Неплохо, точность 94,46%. Но что на самом деле говорит нам это число? Говорит ли это нам, что модель может предсказать 94,46% случаев, когда кто-то болен? или он говорит нам, что может предсказать 94,46% случаев, когда пациент не болен? на самом деле вы не можете использовать эту метрику, потому что данные несбалансированы и, следовательно, могут быть неверно интерпретированы, поэтому нам нужно обратить внимание на Precision и Recall.
Параметр Точность расскажет нам, сколько из правильно предсказанных случаев действительно оказались положительными:
И Напомнить, сообщает нам, сколько реальных положительных случаев мы смогли правильно предсказать с помощью нашей модели:
Точность и Отзыв оказались даже лучше, чем точность со значениями 97,09 и 99,01% соответственно.
Теперь давайте остановимся на секунду и вспомним мой предыдущий комментарий о Precision и Recall, где я упоминал, что Precision важнее, чем Вспомните, когда вы хотите иметь меньше FP в обмен на больше FN. Это означает, что получение FP очень дорого, а FN - не так дорого. Но в области медицины Отзыв более важен, потому что вам наплевать на FP, поскольку вы хотите охватить каждый положительный случай.
Проще всего понять это утверждение, проанализировав, как рассчитывается Recall, с помощью матрицы неточностей (рисунок 3). Проще говоря, напоминание - это связь между случаями, когда модель предсказывала, что пациент болен, и пациент действительно болен, путем добавления этого же значения со случаями, когда модель допустила ошибку и предсказала, что пациент здоров. но на самом деле пациент был болен. Если вы подумаете об этом, вы, как врач, хотите, чтобы у вас был высокий уровень отзыва, даже если это означает, что вы поднимете ложную тревогу, потому что фактические положительные случаи не должны оставаться незамеченными, и вы, как пациент, будете счастливее, если врач скажет вам, что вы больны, но вы не больны, вместо того, чтобы сказать, что вы не больны, но оказывается, что вы больны. Следовательно, когда дело доходит до здоровья, Отзыв превосходит Точность.
Теперь, надеюсь, вы поняли мою точку зрения, поэтому давайте сравним две архитектуры моделей (рис. 4 и 5) и посмотрим на их показатели.
Как показано на рис. 4 и 5, ни одна из моделей на самом деле не является модной, они обе используют базовые параметры с той разницей, что время обработки Model_15 примерно в три раза больше, чем у Model_5, что в основном связано с двойными сверточными слоями в каждой. из 5 сверточных блоков, по сравнению с 1, который Model_5 имеет на блок. Кроме того, Model_15 имеет Dropout на полностью подключенных слоях для учета переобучения, которое может вызвать дополнительные задержки обработки.
Давайте сравним обе эти модели Матрицы ошибок (рис. 6 и 7), а затем посмотрим на интересующие нас показатели (Precision и Recall), чтобы провести справедливое сравнение их выступления.
Не рассчитывая пока никаких показателей, давайте сосредоточимся на TP и FN обеих матриц. Для Model_15 (рисунок 6) TP = 289 и FN = 51, тогда как для Model_5 (рисунок 7) TP = 333 и FN = 7. Это говорит нам о том, что Model_15 будет ошибочно предсказывать 51 пациента, сообщая им, что они не болеют, когда на самом деле они больны, и Model_5 будет делать это только с 7 пациентами. В то же время Модель_15 точно прогнозирует, что 289 пациентов заболеют против 333 пациентов из Модели_5.
Если мы введем эти числа в наши уравнения, мы получим показатели, показанные на рисунке 8.
Эти метрики предполагают, что для значений Model_15 больше согласованности, но, опять же, это проблема со здоровьем / здоровьем из-за несбалансированного набора данных, поэтому Recall является для нас наиболее важной метрикой, а это означает, что это говорит о том, что Model_5 превосходит Model_15, даже когда Точность и Точность выше для Model_15.
Мы бы не увидели этого, если бы только взглянули на Точность обучения, проверки и тестирования и оценки на графиках. Посмотрите их на рисунках 9 и 10 и увидите сходство между обеими обученными моделями с одинаковым количеством эпох (50).
Очевидно, что точность обучения и проверки, а также потери для обеих моделей очень похожи, поэтому выбор модели на основе их производительности с использованием этих инструментов - непростая задача, но с помощью показателей Precision и Recall мы увидели, что Model_5 - лучший выбор. для этой конкретной проблемы.
Те, кто читал мой предыдущий блог, могут вспомнить, что я не тренировал все свои модели с одинаковым количеством эпох из-за нехватки времени. В среднем у меня было 10 эпох, и если оценка валидации превышала 75%, я увеличивал эпохи до 30 и / или 50 в зависимости от сложности модели. Model_5 стала жертвой этого сжатого дедлайна, и я тренировал ее всего за 10 эпох. Имея больше времени в моих руках, я вернулся и стал проводить более длительные тренировки, и именно так я понял, что мне нужно дважды проверить эту конкретную модель. Для сравнения вы можете увидеть на Рисунке 11 точность и потери, возникшие в результате 50-й эпохи для каждой модели.
Сложив все это вместе, легко сделать вывод, что Model_5 лучше подходит для классификации рентгеновских изображений для обнаружения пневмонии из-за его значительно более высокого уровня отзыва (97,9%).
Прежде чем закрыть этот блог, я хочу поделиться тремя выводами, которые могут показаться очевидными, но которые могли бы заставить меня выбрать другой вариант с точки зрения того, какую модель сохранить:
- В начале процесса проверьте распределение данных, чтобы вы могли правильно интерпретировать свою модель после ее обучения. Несбалансированный набор данных будет оцениваться не только с точностью, но и с другими показателями, такими как точность и отзыв. Матрицы путаницы очень полезны
- Не усложняйте архитектуру модели чрезмерно, поскольку она не обязательно приведет к лучшему исполнению. Начните с простого и добавляйте слои по мере продвижения
- Не ограничивайтесь одной моделью. Попробуйте разные варианты, чтобы сравнить результаты и уменьшить неопределенность
Имейте в виду, что мои выводы не говорят о том, что исходная модель неверна, а только о том, что для этого типа проблемы лучше подходит Модель_5.
Если вы зашли так далеко, я благодарю вас за то, что вы прочитали мой блог и любые комментарии или отзывы, которые у вас есть, не стесняйтесь обращаться ко мне через мой LinkedIn, и если вы хотите увидеть весь дополнительный прогресс, достигнутый в этом проекте, смело заходите на мой GitHub.