Я пытаюсь начать использовать нейронные сети для решения проблемы классификации. Я решил использовать библиотеку Encog 3.x, так как работаю над JVM (в Scala). Пожалуйста, дайте мне знать, если эта проблема лучше решается другой библиотекой.
Я использовал устойчивое обратное распространение. У меня есть 1 скрытый слой и, например. 3 выходных нейрона, по одному на каждую из 3 целевых категорий. Таким образом, идеальными выходами являются либо 1/0/0, 0/1/0, либо 0/0/1. Теперь проблема в том, что обучение пытается минимизировать ошибку, например. превратить 0,6/0,2/0,2 в 0,8/0,1/0,1, если идеальный результат равен 1/0/0. Но поскольку я выбираю наивысшее значение в качестве прогнозируемой категории, для меня это не имеет значения, и я бы хотел, чтобы обучение тратило больше усилий на фактическое уменьшение количества неправильных прогнозов.
Итак, я узнал, что я должен использовать функцию softmax в качестве вывода (хотя мне неясно, станет ли это 4-м слоем или я должен просто заменить функцию активации 3-го слоя на softmax), а затем обучение уменьшит крест энтропия. Теперь я думаю, что эту кросс-энтропию нужно рассчитывать либо по всей сети, либо по всему выходному слою, но ErrorFunction
, который можно настроить, вычисляет ошибку для каждого нейрона (считывает массив идеальных входов и фактических входов , записывает массив значений ошибок). Так как же на самом деле минимизировать перекрестную энтропию с помощью Encog (или какую другую библиотеку на основе JVM выбрать)?