Вопрос или проблема
Я столкнулся с необычным поведением при обучении нейронной сети.
Задача состоит в том, чтобы предсказать, принадлежит ли образец к первому или второму классу. (Классификация на 2 класса). Классы несбалансированы (~ 5 / 95). Я использую взвешенную кросс-энтропию.
Что я вижу, так это вероятности двух классов для каждого образца, и мне кажется странным, что независимо от того, сколько я жду (количество эпох), вероятности находятся в диапазоне [0, 0.9) и нет образцов близко к вероятности 1.0. Я предполагаю, что дисбаланс и взвешенная потеря + ADAM с низким начальным процентом обучения могли привести к этому, но я не уверен.
Кто-нибудь сталкивался с подобным?
Это не так уж странно. У вас, вероятно, есть функция активации на выходе, которая достигает только 0 или 1 на бесконечности. Чтобы достичь этих 0 или 1, вам нужно, чтобы ваш последний скрытый слой выдавал +/- бесконечность. Что сложно, учитывая структуру весов. Лучшее, что он может сделать — это выдавать чрезвычайно большие положительные или отрицательные значения.
Это может быть проблемой, потому что во время процесса калибровки (который является задачей оптимизации) вы потратите значительные ресурсы и время на попытки достичь +/- бесконечности. Важно, что это одна из причин известной проблемы взрыва градиента.
Как с этим справиться? В Эффективной обратной пропаганда (Лекун и др., 1998) автор предлагает использовать функцию активации, которая способна достигать желаемых выходов. В статье утверждается, что хорошая функция активации должна иметь следующие свойства:
-
$f(\pm1)=\pm1$
-
Вторая производная максимальна при $x=1$
-
Эффективный коэффициент близок к 1
Ваша проблема заключается в том, что у вас нет ничего, что соответствовало бы первому условию. Чтобы соответствовать этим условиям, Лекун предлагает использовать функцию активации: $1.7159*tanh(\frac{2}{3}x)$. Возможно, вам не нужно использовать ее во всех ваших слоях. Теперь ваша проблема, вероятно, заключается в том, чтобы найти фреймворк, который позволяет использовать пользовательские функции активации.
Ответ или решение
Удивительное распределение выходов нейронной сети: возможные причины и решения
Во время тренировки нейронной сети могут возникать различные странные явления. Одним из таких феноменов является поведение выходных значений сети, когда предсказанные вероятности классов в задаче двоичной классификации остаются на уровне, близком к 0, но не достигают 1. Это часто происходит в условиях несбалансированных классов, как в вашем случае, где соотношение классов составляет примерно 5 к 95.
Причины необычного поведения
-
Несбалансированность классов: Ваша проблема связана с высокой степенью несбалансированности данных. Для различных классов используются разные веса в функции потерь (в вашем случае — взвешенная кросс-энтропия), что может повлиять на обучение модели и привести к тому, что предсказания будут лишь частично покрывать классы, и вероятности будут колебаться в пределах [0, 0.9).
-
Активационная функция: Например, если на выходном слое используется активационная функция типа сигмоиды или softmax, это может иметь свои ограничения. Элементы, принимаемые на самих выходах, могут быть выведены так, что значения приближаются к 1, но никогда не достигают его. Это связано с тем, что сигмоидальная функция стремится к границам 0 и 1 только в предельном случае и требует бесконечно больших значений.
-
Проблема затухания и взрыва градиентов: Использование метода АДАМ с низким начальными значениями скорости обучения в сочетании с активациями, которые не достигают границ, также может привести к тому, что обучение будет затруднено. Это связано с тем, что обновления параметров становятся слишком малозначительными и модель не способна резко изменять свои прогнозы.
Возможные решения
-
Исключение проблемы несбалансированности классов: Необходимо оптимизировать использование взвешенной кросс-энтропии, чтобы обеспечить более быстродействующее решение для нашей модели. Попробуйте предварительно сбалансировать классы, либо с помощью увеличения числа образцов меньшинства, либо уменьшения числа образцов большинства.
-
Выбор подходящей активационной функции: Согласно исследованиям, представленным Яном Лекуном и его коллегами в их работе "Эффективный обратный прогон" (1998), стоит рассмотреть активационные функции, которые могут достигать нужных выходов. Например, функция активации вида (1.7159 \cdot \tanh\left(\frac{2}{3}x\right)) может помочь в вашей ситуации. Эта функция достигает ±1, что отвечает одному из ключевых условий для хорошей активационной функции.
-
Промежуточные слои и обучение: Используйте несколько скрытых слоев с адаптивными функциями активации, а также настройте их так, чтобы они могли лучше адаптироваться к требованиям вашей задачи. Это может улучшить общую производительность модели.
-
Оценка обучения: Проводите более детальный анализ процесса обучения. Настройте значения гиперпараметров, таких как шаг перемещения и количество эпох, для достижения желаемых результатов. Сохраняйте результаты после каждой эпохи для дальнейшего анализа, чтобы определить, происходит ли улучшение.
Заключение
Необычное поведение выходов ваших нейронных сетей можно объяснить несколькими факторами, включая несбалансированность классов и особенности используемых активационных функций. Корректируя выбор функций активации и подходы к балансировке классов, вы сможете значительно улучшить предсказательную способность вашей модели. Запомните, что процесс обучения — итеративен, и его важно постоянно пересматривать и настраивать для достижения оптимальных результатов.