Вопрос

Я задавал этот вопрос другим специалистам по искусственному интеллекту, но на самом деле мне не дали ответа, который удовлетворил бы меня.

Для всех, кто ранее программировал искусственную нейронную сеть, как вы проверяете ее корректность?

Я думаю, можно сформулировать это по-другому: как отлаживается код, стоящий за нейронной сетью?

Это было полезно?

Решение

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

Это, конечно, имеет место только для нейронных сетей, которые достаточно велики, где прямое доказательство правильности невозможно. Можно доказать , что нейронная сеть верна с помощью анализа, если вы пытаетесь построить нейронную сеть, которая изучает XOR или что-то подобное, но для этого класса проблем редко требуется aNN.

Другие советы

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

Возникает вопрос, почему вы хотели бы использовать нейронные сети, если вы не можете быть уверены, что заключение, к которому они приходят, достоверно верно; Ответ заключается в том, что нейронные сети могут получать высоконадежные ответы для определенных классов задач (в частности, задач NP-Complete) за линейное время, в то время как достоверно правильные решения задач NP-Complete могут быть получены только за полиномиальное время. С точки зрения непрофессионала, нейронные сети могут «решить» проблемы, которые не могут сделать обычные вычисления; но вы можете быть уверены только в том, что ответ правильный. Вы можете определить эту уверенность по режиму обучения и, как правило, убедиться, что у вас будет уверенность не менее 99,9%.

Здесь вы открываете большую банку с червями, чем вы могли ожидать.

Кстати, NN лучше всего рассматривать как универсальные аппроксиматоры функций, которые могут помочь вам подумать об этом.

В любом случае, в NN нет ничего особенного с точки зрения вашего вопроса, проблема касается любого алгоритма обучения.

Уверенность в ваших результатах будет зависеть как от количества, так и от качества (часто труднее определить) имеющихся у вас данных об обучении.

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

Настоящая проблема в том, что вы обычно не заинтересованы в " правильности " (сравните качество) ответа на заданный вход, который вы уже видели, скорее, вам нужно прогнозировать качество ответа на входе, который вы еще не видели. Это гораздо более сложная проблема. Типичные подходы тогда включают «сдерживание»; некоторые ваши тренировочные данные (то есть материал, за который вы знаете "правильный" ответ) и тестирование вашей обученной системы на это. Это становится едва уловимым, когда вы начинаете считать, что вам может не хватать данных, или это может быть предвзятым, и т.д. Таким образом, есть много исследователей, которые в основном тратят все свое время на размышления о подобных проблемах!

Я работал над проектами, в которых есть тестовые данные, а также данные обучения, поэтому вы знаете ожидаемые результаты для набора входных данных, которые NN не видел.

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

Я - полный любитель в этой области, но разве вы не используете заранее определенный набор данных, который, как вы знаете, верны?

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

Один из способов, который я могу порекомендовать, - это Джекнифер .

Мой учитель всегда говорил, что его эмпирическое правило заключается в том, чтобы обучать NN 80% ваших данных и проверять их с другими 20%. И, конечно же, убедитесь, что набор данных является настолько полным, насколько вам нужно.

Если вы хотите выяснить, является ли обратное распространение сети правильным, есть простой способ.

Поскольку вы вычисляете производную от ландшафта ошибок, вы можете проверить, верна ли ваша реализация численно.Вы рассчитаете производную ошибки по отношению к определенному весу, ∂E/∂w.Ты можешь показать это

∂E/∂w = (E(w + e) - E(w - e)) / (2 * e) + O(e^2).

(Бишоп, Машинное обучение и распознавание образов, стр.246)

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

(Вот реализация: http://github.com/bayerj/arac/raw/9f5b225d6293974f8adfc5f20dfc6439cc1bed35/src/cpp/utilities/utilities.cpp)

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

Есть некоторые другие проблемы, которые помешают вам получить наилучший ответ, например:

  • Функция стоимости NN не является вогнутой, поэтому ваш градиентный спуск не гарантирует нахождения глобального оптимума.
  • Над/под фитингом
  • Неправильный выбор "правильных" функций / модели
  • и т.д.

Однако я думаю, что они выходят за рамки ошибки программирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top