Loss в нейронных сетях что это
Перейти к содержимому

Loss в нейронных сетях что это

  • автор:

Использование кастомных функций потери и метрики качества обучения в Keras

При обучении нейронной сети на обучающей выборке на выходе нейросети вычисляются два ключевых параметра эффективности обучения — ошибка и точность предсказания. Для этого используются функция потери (loss) и метрика точности. Эти метрики различаются в зависимости от поставленной задачи (классификация или сегментация изображения, детекция объекта, регрессия). В Keras мы можем определить свои собственные функцию потери и метрики точности под свою конкретную задачу. О таких кастомных функциях и пойдет речь в статье. Кому интересно, прошу под кат.

Кастомные функции потери в Keras

Для примера предположим, что нам необходимо реализовать функцию ошибки Mean Average Error (MAE). Кастомную функцию потерь MAE можно реализовать следующим образом:

from keras import backend as K def mae(y_true, y_pred): true_value = K.sum(y_true * K.arange(0, 100, dtype="float32"), axis=-1) pred_value = K.sum(y_pred * K.arange(0, 100, dtype="float32"), axis=-1) mae = K.mean(K.abs(true_value - pred_value)) return mae 

Здесь мы используем функции sum, arange, mean и abs, определенные в Keras.

Точно так же можно определить свою метрику точности. К примеру определим метрику earth_movers_distance для сравнения двух гистограмм:

from keras import backend as K def earth_movers_distance(y_true, y_pred): cdf_true = K.cumsum(y_true, axis=-1) cdf_pred = K.cumsum(y_pred, axis=-1) emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1)) return K.mean(emd) 

Чтобы использовать наши метрики mae и earth_movers_distance импортируем соответствующие функции из отдельного модуля и добавим их в параметры loss и metrics при компиляции модели:

from utils.metrics import mae, earth_movers_distance loss = earth_movers_distance model.compile(optimizer=optimizer, loss=loss, metrics=[mae, "accuracy"]) 

Загрузка модели Keras с кастомной функцией потери

При обучении модели в Keras можно сохранять веса модели в h5 файл для последующей загрузки обученной модели на этапе предсказания. Если мы используем кастомные функции потерь и метрики качества, то мы можем столкнуться с проблемой. Когда мы загружаем обученные веса из файла h5 для модели с помощью метода load_weights мы можем получить такую ошибку:

ValueError: Unknown loss function:earth_movers_distance 

Это известный баг в Keras (о нем писали в официальном репозитории на github).

Чтобы решить проблему нужно добавить наши кастомные функции потери и метрики качества в Keras:

from keras.utils.generic_utils import get_custom_objects get_custom_objects().update()

Функция потерь (Loss function)

В математической статистике и машинном обучении функция потерь — это функция, которая отображает некоторое событие в виде действительного числа, интуитивно представляя некоторую «стоимость», связанную с событием. Например, таким событием может быть допущение или не допущение клиентом просрочки по кредиту, а соответствующая функция потерь будет принимать два значения: 0 или 1.

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

Например, в контексте экономики это обычно экономические издержки или потери. В классификации это «штраф» модели за неправильное распознавание примера. В управлении потери могут быть издержками из-за неспособности достичь желаемого значения управляемых параметров. В управлении финансовыми рисками функция сопоставляется с денежными потерями.

Наиболее часто используемой является квадратичная функция потерь:

λ ( y ) = C ( y − y ′ ) 2 ,

где C — константа, y — истинное значение выхода модели (которое должно быть получено в идеальном случае), y ′ — фактический выход модели.

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

В бинарной классификации используется двоичная функция потерь (0-1 loss function), которая определяется следующим образом:

L ( ^ y , y ) = f ( ^ y ≠ y ) .

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

Используется также и простая функция потерь, равная разности истинного и фактического выходов модели:

L ( ^ y , y ) = f ( ^ y − y ) .

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

Средняя квадратическая ошибка

Когда у нас есть регрессионная задача, одна из функций потерь, которую вы можете выполнить, — эта. Как следует из названия, эта потеря рассчитывается путем взятия среднего квадрата разностей между фактическими (целевыми) и прогнозными значениями.

пример

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

Двоичный Кроссентропия

Когда у нас есть задача бинарной классификации, одна из функций потерь, которую вы можете выполнить, — эта. Если вы используете BCE Функция потерь, вам просто нужен один выходной узел, чтобы классифицировать данные на два класса. Выходное значение должно быть передано черезсигмоидФункция активации и диапазон выхода (0 — 1).

пример

Например, у нас есть нейронная сеть, которая берет данные об атмосфере и предсказывает, будет ли дождь или нет. Если выходной сигнал больше 0,5, сеть классифицирует его как rain и если выходной сигнал меньше 0,5, сеть классифицирует его как not rain , (это может быть противоположным в зависимости от того, как вы тренируете сеть). Чем больше значение показателя вероятности, тем больше вероятность дождя.

Во время обучения сети целевое значение, подаваемое в сеть, должно быть 1, если онодождьв противном случае 0.

Примечание 1

Одна важная вещь, если вы используете BCE Функция потерь на выходе узла должна быть между (0–1). Это означает, что вы должны использовать функцию активации сигмоида на вашем конечном выходе. Так как сигмоид преобразует любое действительное значение в диапазоне между (0–1).

Заметка 2

Что если вы не используете сигмоидальную активацию на последнем слое? Затем вы можете передать аргумент from logits как true к функции потерь, и он будет внутренне применять сигмоид к выходному значению.

Категориальная кроссентропия

Когда у нас есть задача классификации с несколькими классами, одна из функций потерь, которую вы можете выполнить, — эта. Если вы используете CCE Функция потерь, должно быть столько же выходных узлов, сколько классов. И окончательный выходной слой должен быть пропущен черезSoftMaxактивация, чтобы каждый узел выводил значение вероятности в диапазоне (0–1).

пример

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

Для подачи целевого значения во время тренировки мы должны одним нажатием их кодировать. Если изображение имеет вид кошки, тогда целевой вектор будет (1, 0), а если изображение имеет собаку, целевой вектор будет (0, 1). По сути, целевой вектор будет иметь тот же размер, что и число классов, а позиция индекса, соответствующая фактическому классу, будет 1, а все остальные будут равны нулю.

Заметка

Что делать, если мы не используемSoftMaxактивация на последнем слое? Затем вы можете передать аргумент from logits как true к функции потерь, и она будет внутренне применятьSoftMaxдо выходного значения. То же, что и в приведенном выше случае.

Редкая категориальная кроссентропия

Эта функция потерь почти аналогична CCE за исключением одного изменения.

Когда мы используем SCCE Функция потери, вам не нужно одно горячее кодирование целевого вектора. Если целевым изображением является кошка, вы просто передаете 0, иначе 1. В основном, какой бы класс ни был, вы просто передаете индекс этого класса.

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

это исходный код всех доступных функций потерь в Керасе

Настройка функции потерь для нейронной сети на данных сейсморазведки

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

Рассмотрены 2 базовых класса функций – Binary cross entropy и Intersection over Union – в 6-ти вариантах с подбором параметров, а также комбинации функций разных классов. Дополнительно рассмотрена регуляризация функции потерь.

Спойлер: удалось существенно улучшить качество прогноза сети.

Бизнес-цели исследования

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

На идею данного исследования нас натолкнули результаты соревнования по поиску солевых отложений на 2D-срезах. По отзывам участников соревнования, при решении этой задачи использовался целый зоопарк различных функций потерь, причем, с разным успехом.

Поэтому мы и задались вопросом – действительно ли для подобных задач на таких данных подбор функции потерь может дать существенный выигрыш в качестве? Или это характерно только для условий соревнования, когда идет борьба за четвертый-пятый знак после запятой для заранее определенной организаторами метрики?

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

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

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

В рамках данного эксперимента мы попытались найти ответы на следующие локальные вопросы:

  1. Действительно ли для рассмотренной ниже задачи наилучший результат даст функция потерь класса Intersection over Union? Вроде ответ очевиден, но какая именно? И насколько лучший с точки зрения бизнеса?
  2. Можно ли еще улучшить результаты, комбинируя функции различных классов? Например, Intersection over Union и кросс-энтропийную с разными весами.
  3. Можно ли еще улучшить результаты, добавляя к функции потерь разные дополнения, разработанные специально для сейсмических данных?

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

Общее описание эксперимента и использованных данных

Для эксперимента мы взяли все ту же задачу выделения геологических слоев на 2D-срезах сейсмического куба (см. рисунок 1).

Рисунок 1. Пример 2D-среза (слева) и результата разметки соответствующих ему геологических слоев (справа) (источник)

И тот же набор полностью размеченных данных из голландского сектора акватории Северного моря. Исходные сейсмические данные представлены на сайте Open Seismic Repository: Project Netherlands Offshore F3 Block. Их краткое описание можно найти в статье Silva et al. «Netherlands Dataset: A New Public Dataset for Machine Learning in Seismic Interpretation».

Поскольку в нашем случае речь идет о 2D-срезах, мы использовали не исходный 3D-куб, а уже сделанную «нарезку», доступную здесь: Netherlands F3 Interpretation Dataset.

В процессе эксперимента мы решили следующие задачи:

  1. Просмотрели исходные данные и отобрали срезы, которые по качеству ближе всего к ручной разметке (аналогично предыдущему эксперименту).
  2. Зафиксировали архитектуру нейронной сети, методику и параметры обучения и принцип выбора срезов для обучения и валидации (аналогично предыдущему эксперименту).
  3. Выбрали исследуемые функции потерь.
  4. Выбрали наилучшие параметры для параметризованных функций потерь.
  5. Обучили нейронные сети с разными функциями на одном и том же объеме данных и выбрали наилучшую функцию.
  6. Обучили нейронные сети с разными комбинациями выбранной функции с функциями другого класса на том же объеме данных.
  7. Обучили нейронные сети с регуляризацией выбранной функции на том же объеме данных.

Результаты данного эксперимента в виде оценочных метрик и предсказанных сетями масок срезов представлены далее.

Задача 1. Отбор данных

В качестве исходных данных мы использовали готовые инлайны и кросслайны сейсмического куба из голландского сектора акватории Северного моря. Как и в предыдущем эксперименте, имитируя работу интерпретатора, для обучения сети мы выбрали только чистые маски, просмотрев все срезы. В результате было отобрано 700 кросслайнов и 400 инлайнов из ~1600 исходных изображений.

Задача 2. Фиксирование параметров эксперимента

Данный и следующий разделы представляют интерес, в первую очередь, для специалистов по Data Science, поэтому будет использоваться соответствующая терминология.

Для обучения мы выбрали 5% от общего количества срезов, причем, инлайны и кросслайны в равных долях, т.е. 40 + 40. Срезы выбирались равномерно по всему кубу. Для валидации использовалось по 1 срезу между соседними изображениями тренировочной выборки. Таким образом, валидационная выборка состояла из 39 инлайнов и 39 кросслайнов.

В отложенную выборку, на которой и проводилось сравнение результатов, попали 321 инлайн и 621 кросслайн.

Аналогично предыдущему эксперименту, предобработка изображений не проводилась, и использовалась та же архитектура UNet с теми же параметрами обучения.

Целевые маски срезов были представлены как бинарные кубы размерностью HxWx10, где последнее измерение соответствует количеству классов, а каждое значение куба равно 0 или 1 в зависимости от того, принадлежит ли данный пиксель изображения классу соответствующего слоя или нет.

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

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

Задача 3. Выбор функций потерь

Для эксперимента были выбраны 2 базовых класса функций в 6-ти вариантах:

Binary cross entropy:

  • binary cross entropy;
  • weighted binary cross entropy;
  • balanced binary cross entropy.
  • Jaccard loss;
  • Tversky loss;
  • Lovász loss.

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

В формулах далее используются обозначения:

  • pt – для бинарной целевой маски (Ground Truth);
  • pp – для маски прогноза сети.

Binary cross entropy

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

Weighted binary cross entropy

Данная функция совпадает с бинарной кросс-энтропией при значении коэффициента beta = 1. Рекомендуется при сильном дисбалансе классов. При beta > 1 уменьшается количество ложно отрицательных прогнозов (False Negative) и увеличивается полнота (Recall), при beta < 1 уменьшается количество ложно положительных прогнозов (False Positive) и увеличивается точность (Precision).

Balanced binary cross entropy

Данная функция похожа на взвешенную кросс-энтропию, но корректирует вклад не только единичных, но и нулевых значений целевой маски. Совпадает (с точностью до константы) с бинарной кросс-энтропией при значении коэффициента beta = 0.5.

Jaccard loss

Коэффициент Жаккарда (он же Intersection over Union, IoU) определяет меру «похожести» двух областей. То же самое делает Dice index:

Рассматривать обе эти функции смысла нет. Мы выбрали Жаккард.

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

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

Tversky loss

Данная функция является параметризованным вариантом оптимизации коэффициента Жаккарда совпадает с ним при значениях alpha = beta = 1 и с Dice-индексом при alpha = beta = 0.5. При иных ненулевых и несовпадающих значениях мы можем смещать акценты в сторону точности или полноты аналогично тому, как это делалось в функциях взвешенной и сбалансированной кросс-энтропии.

Задача смещения акцентов может быть переписана с помощью одного коэффициента, лежащего в интервале (0, 1). Итоговая функция потерь будет выглядеть следующим образом:

Lovász loss

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

Описание функции можно посмотреть здесь, один из вариантов кода – здесь.

Важное пояснение!

Для упрощения сравнения значений и графиков далее под термином «коэффициент Жаккарда» далее мы будем понимать единицу минус собственно коэффициент. Jaccard loss – это один из способов оптимизации такого коэффициента, наряду с Tversky loss и Lovász loss.

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

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

Количество компонент связности (т.е. сплошных пятен одного цвета) на каждом полученном прогнозе является косвенным критерием оценки объема его последующей доработки интерпретатором. Если это значение равно 10, то слои выделены правильно и речь идет максимум о незначительной коррекции горизонтов. Если их ненамного больше, то потребуется лишь «чистка» небольших зон изображения. Если их существенно больше, то все плохо и может даже понадобится полная переразметка.

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

Weighted binary cross entropy

По результатам экспериментов было выбрано значение параметра beta = 2:

Рисунок 2. Сравнение качества прогноза сети по основной функции потерь и выбранным критериям

Рисунок 3. Статистики для количества компонент связности по части значений параметра beta

Balanced binary cross entropy

По результатам экспериментов было выбрано значение параметра beta = 0.7:

Рисунок 4. Сравнение качества прогноза сети по основной функции потерь и выбранным критериям

Рисунок 5. Статистики для количества компонент связности

Tversky loss

По результатам экспериментов было выбрано значение параметра beta = 0.7:


Рисунок 6. Сравнение качества прогноза сети по основной функции потерь и выбранным критериям


Рисунок 7. Сравнение качества прогноза сети по основной функции потерь и выбранным критериям

Из приведенных рисунков можно сделать два вывода.

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

Задача 5. Выбор наилучшей функции потерь

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

Рисунок 8. Сравнение прогнозов сетей, обученных с разными функциями потерь, по выбранным критериям

Таблица 1. Усредненные значения критериев

Рисунок 9. Сравнение прогнозов сетей по количеству предсказаний с указанным количеством компонент связности

Из представленных диаграмм и таблицы можно сделать следующие выводы относительно использования «сольных» функций потерь:

  • В нашем случае «Жаккардовые» функции класса Intersection over Union действительно показывают лучшие значения, чем кросс-энтропийные. Причем, существенно лучшие.
  • Среди выбранных подходов к оптимизации функции потерь на основе коэффициента Жаккарда лучший результат показала Lovazh loss.


Рисунок 10. Прогнозы сетей для одного из лучших срезов


Рисунок 11. Прогнозы сетей для одного из худших срезов

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

Итак, на данном шаге у нас определился явный лидер — Lovazh loss, результаты которого можно охарактеризовать следующим образом:

  • около 60% прогнозов близки к идеальным, т.е. потребуют не более чем корректировки отдельных участков горизонтов;
  • еще примерно 30% прогнозов содержат не более 2 лишних пятен, т.е. требуют незначительной доработки;
  • примерно 1% прогнозов содержит от 10 до 25 лишних пятен, т.е. требует существенной доработки.

Можно ли еще его улучшить путем комбинации разных функций? Проверим.

Задача 6. Выбор наилучшей комбинации функции потерь

Комбинирование функций потерь различной природы используется достаточно часто. Однако, нащупать оптимальное сочетание непросто. Наглядный пример – результат предыдущего эксперимента, который оказался даже хуже, чем «сольная» функция. Цель таких сочетаний – улучшить результат за счет оптимизации по разным принципам.

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

Итого, мы проверили 3 пары с 9-ю возможными коэффициентами каждую (от 0.1\0.9 до 0.9\0.1). На рисунках ниже по оси Х указан коэффициент перед Lovazh loss. Коэффициент перед второй функцией равен единице минус коэффициент перед первой. Левое значение – только кросс-энтропийная функция, правое – только Lovazh loss.


Рисунок 12. Оценки результатов прогноза сетей, обученных на BCE + Lovazh


Рисунок 13. Оценки результатов прогноза сетей, обученных на WBCE + Lovazh

Рисунок 14. Оценки результатов прогноза сетей, обученных на BBCE + Lovazh

Видно, что выбранную «сольную» функцию добавлением кросс-энтропийной улучшить не удалось. Уменьшение некоторых значений коэффициента Жаккарда на 1-2 тысячных может быть важным в условиях соревнований, но не компенсирует для бизнеса ухудшение критерия количества компонент связности.

Чтобы убедиться в типичности поведения комбинации функций разных типов, мы провели аналогичную серию обучения для Jaccard loss. Только для одной пары удалось незначительно улучшить значения обоих критериев одновременно:

0.8 * JaccardLoss + 0.2 * BBCE
Average of connected components: 11.5695 -> 11.2895
Average of Jaccard: 0.0307 -> 0.0283

Но и эти значения хуже, чем «сольная» Lovazh loss.

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

Задача 7. Регуляризация наилучшей функции потерь

На этом шаге мы попробовали улучшить выбранную ранее функцию потерь дополнением, разработанным специально для сейсмических данных. Речь идет о регуляризации, описанной в статье: «Neural-networks for geophysicists and their application to seismic data interpretation».

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

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

Мы обучили 13 сетей с описанной в статье регуляризацией и коэффициентом перед ней, принимающим значения от 0.1 до 0.0001. На рисунках ниже представлена часть оценок по обоим критериям.


Рисунок 15. Сравнение качества прогноза сети по выбранным критериям


Рисунок 16. Статистики для количества компонент связности по части значений коэффициента перед регуляризацией

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

Рисунок 17. Сравнение прогнозов сетей по количеству предсказаний с указанным количеством компонент связности

Напоследок сравним границы классов на целевых и предсказанных масках для выбранного ранее наихудшего среза.

Рисунок 18. Прогноз сети для одного из худших срезов

Рисунок 19. Наложение части горизонтов целевой маски и прогноза

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

Итоговые характеристики выбранной функции потерь с регуляризацией:

  • около 87% прогнозов близки к идеальным, т.е. потребуют не более чем корректировки отдельных участков горизонтов;
  • еще примерно 10% прогнозов содержат 1 лишнее пятно, т.е. требуют незначительной доработки;
  • около 3% прогнозов содержит от 2 до 5 лишних пятен, т.е. требуют чуть более существенной доработки.

Выводы

  • Только за счет настройки одного параметра обучения – функции потерь – мы смогли существенно улучшить качество прогноза сети и уменьшить объем необходимой доработки примерно втрое.
  • При острой нехватке времени на эксперименты стоит брать любую из функций потерь класса Intersection over Union (на рассмотренной задаче лучшей оказалась Lovazh loss) с подбором коэффициента для сглаживающей регуляризации. При наличии времени можно поэкспериментировать с комбинациями этого класса функций с кросс-энтропийными, но шансы на существенное увеличение качества невелики.
  • Такой подход хорош для бизнес-задач, поскольку исправляет незначительные погрешности исходной разметки. Но регуляризация вряд ли будет полезной в условиях соревнований, т.к. ухудшает оценку по целевой метрике.

Список использованных источников:

  1. Reinaldo Mozart Silva, Lais Baroni, Rodrigo S. Ferreira, Daniel Civitarese, Daniela Szwarcman, Emilio Vital Brazil. Netherlands Dataset: A New Public Dataset for Machine Learning in Seismic Interpretation
  2. Lars Nieradzik. Losses for Image Segmentation
  3. Daniel Godoy. Understanding binary cross-entropy / log loss: a visual explanation
  4. Seyed Sadegh Mohseni Salehi, Deniz Erdogmus, and Ali Gholipour. Tversky loss function for image segmentation using 3D fully convolutional deep networks
  5. Maxim Berman, Amal Rannen Triki, Matthew B. Blaschko. The Lovasz-Softmax loss: A tractable surrogate for the optimization of the intersection-over-union measure in neural networks
  6. Bas Peters, Eldad Haber, and Justin Granek. Neural-networks for geophysicists and their application to seismic data interpretation

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *