Нейронная сеть - значительно неравномерный прогресс обучения по всем входным векторам - PullRequest
3 голосов
/ 21 марта 2012

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

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

0.6666666657496451
0.6666666657514261
1.5039854423139616E-10
1.4871467103001578E-10
1.5192940136144856E-10
1.4951558809679557E-10
0.6666521719715195
1.514803547256445E-10
1.5231135866323182E-10
0.6666666657507451
1.539071732985272E-10

Могут ли быть какие-либо возможные причины, по которым это происходит?

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

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Мой ответ направлен на возможное решение «неравномерного» прогресса в обучении вашего классификатора.Относительно "почему" вы видите такое поведение, я откладываю.В частности, я не хочу пытаться приписать причины артефактам, которые наблюдаю в середине обучения - то есть это данные?Или реализация MLP?Или настраиваемая конфигурация, которую я выбрал?Дело в том, что именно взаимодействие вашего классификатора с данными, вызвавшими это наблюдение, а не какой-то присущей им характеристикой.

Классификатор нередко достаточно хорошо изучает определенные входные векторы, а также довольно быстро - то есть [наблюдаемый - предсказанный] ^ 2 становится очень маленьким только после небольшого числа циклов / эпох--и для одного и того же классификатора не удается повторно (и не улучшать) другие входные векторы.

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

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

В частности, возможно,проверьте эти элементы в вашей конфигурации:

  • правильно ли заданы ваши входные векторы - например, чтобы их диапазон был [-1, 1]?

  • правильно ли вы закодировали свои переменные ответа (т. Е. 1-из-C-кодирование )?

  • вы выбралиразумная начальная скорость обучения и срок импульса?И пытались ли вы тренироваться со скорректированными значениями скорости обучения по обе стороны от начальной скорости обучения?t

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

после некоторого количества эпох, изучите результаты (как вы делали).* Тем векторам данных, которые не удалось изучить классификатору, присваивается весовой коэффициент для увеличения erro * r (некоторые числа больше 1);аналогично, тем векторам данных, которые классификатор хорошо изучил, также присваивается весовой коэффициент, но здесь значение меньше единицы, так что важность ошибки обучения уменьшается.

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

Это два значения MSE из числа перечисленных в вашем Вопросе

0.667        # poorly learned input vector => assign error multiplier > 1 
1.5e-10      # well-learned input vector => assign error multiplier < 1  

В Boosting вы найдете входные векторы, которые соответствуют этим двум измерениям ошибок, и сопоставите каждому вес ошибки;этот вес будет больше единицы в первом случае и меньше единицы во втором.Предположим, вы назначили веса ошибок 1,3 и 0,7 соответственно.Далее предположим, что после следующей эпохи ваш классификатор не улучшился в отношении изучения первого из этих двух входных векторов - т.е. он возвращает те же предсказанные значения, что и в прошлую эпоху.Однако для этой итерации / эпохи вклад в общую ошибку от этого входного вектора составляет не 0,67, а 1,3 × 0,67 или прибл..87.

Как влияет эта ошибка увеличения на прогресс в обучении?

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

Вы можете себе представить, что каждый из этих векторов данныхимеет неявный вес ошибки 1,0.Увеличение просто увеличивает этот вес ошибки (для векторов, которые классификатор не может выучить) и уменьшает этот вес для векторов, которые он хорошо усваивает.

Я только что описал конкретную реализацию, названную AdaBoost , которая, вероятно, является самой известной реализацией Boosting. Для руководства и даже кода для специфичных для языка реализаций взгляните на boosting.com] 1 (серьезно). Этот сайт больше не поддерживается, поэтому вот несколько превосходных ресурсов, на которые я положился и могу рекомендовать. Первый - академический сайт в форме аннотированной библиографии (включая ссылки на статьи, обсуждаемые на сайте). Первая статья, указанная на этом сайте (со ссылкой на pdf), Подход, стимулирующий машинное обучение: обзор , является отличным обзором и эффективным источником для получения практических знаний этого семейства методов.

Существует также превосходное видеоурок по Boosting и AdaBoost на videolectures.net

0 голосов
/ 21 марта 2012

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

...