Корректность нейронных сетей - PullRequest
14 голосов
/ 07 мая 2009

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

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

Полагаю, есть и другой способ, как отладить код в нейронной сети?

Ответы [ 9 ]

12 голосов
/ 07 мая 2009

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

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

8 голосов
/ 07 мая 2009

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

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

3 голосов
/ 07 мая 2009

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

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

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

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

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

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

2 голосов
/ 07 мая 2009

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

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

1 голос
/ 07 мая 2009

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

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

1 голос
/ 07 мая 2009

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

0 голосов
/ 13 октября 2014

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

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

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

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

0 голосов
/ 02 июня 2009

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

Поскольку вы вычисляете производную ландшафта ошибок, вы можете проверить, является ли ваша реализация численно правильной. Вы вычислите производную ошибки по конкретному весу, ∂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)

0 голосов
/ 27 мая 2009

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

...