Локальная скорость обучения весов нейронов в алгоритме обратного распространения ошибки

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



    Теория


    Начнем с теории, для начала вспомним чему равно изменение одного веса, в данном случае с регуляризацией, но сути это не меняет:

    • эта (η) — скорость обучения
    • m — размер обучающего множества
    • n — номер слоя
    • полная нотация тут

    В базовом случае скорость обучения — это глобальный параметр для всех весов.

    Введем для каждого веса каждого нейрона модификатор скорости обучения , а изменять веса нейронов будем по следующему правилу:


    На первом батче обучения все модификаторы скорости обучения приравниваются к единице, далее динамическая настройка модификаторов в процессе обучения происходит следующим образом:

    • — значение градиента в определенный момент времени
    • тау τ — текущий момент времени или текущий батч обучения
    • b — аддитивный бонус, который получает модификатор, если направление градиента по определенной размерности не меняется
    • p — мультипликативный штраф, в случае смены направления вектора градиента


    Имеет смысл бонус делать очень маленьким числом меньшим единицы, а пенальти , таким образом b + p = 1. Например a = 0.05, p = 0.95. Такая настройка гарантирует, что в случае осцилляции направления вектора градиента, значение модификатора будет стремиться обратно к начальной единице. Если не вдаваться в математику, то можно сказать так, что алгоритм поощряет те веса (рост в рамках какой то размерности пространства весов) которые сохраняют свое направление относительно предыдущего момента времени, и штрафует тех, кто начинает метаться.

    Автор этого метода Geoffrey Hinton (он кстати один из первых предложил использовать градиентный спуск для обучения нейронной сети) так же советует учесть следующие вещи:
    • во-первых стоит задать разумные пределы роста для модификаторов
    • во-вторых не стоит использовать этот прием для онлайн обучения, или для маленьких батчей; нужно что бы в процессе батча аккумулировался достаточно общий градиент; а иначе увеличивается частота осцилляции направления, и тем самым теряется смысл в модификаторе


    Эксперименты


    Все эксперименты проводились на множестве картинок 29 на 29 пикселей, на которых нарисованы английские буквы. Использовался один скрытый слой из 100 нейронов с сигмоиндной функцией активации, на выходе softmax слой, а минимизировалась перекрестная энтропия. Итого легко подсчитать что всего в сети 100 * (29*29 + 1) + 26 * (100 + 1) = 86826 весов (учитывая смещения). Начальные значения весов были взяты из равномерного распределения . Во всех трех экспериментах использовалась одна и та же инициализация весов. Так же используется полный батч.

    Первый

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


    • красный — без использования модификатора
    • зеленый — bonus = 0.05, penalty = 0.95, limit = [0.1, 10]
    • синий — bonus = 0.1, penalty = 0.9, limit = [0.01, 100]


    Видно что на очень простом множестве положительный эффект модификатора есть, но он не велик.

    Второй

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


    • красный — без использования модификатора
    • синий — bonus = 0.05, penalty = 0.95, limit = [0.1, 10]


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

    Третий

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


    • красный — без использования модификатора
    • синий — bonus = 0.005, penalty = 0.995, limit = [0.01, 100]


    В данном случае мы получаем очень существенный прирост к качеству. И если после 300 эпох прогнать распознавание на обучающем множестве и тестовом:
    • красный: на обучающем множестве 94.74%, на тестовом 67.18%
    • синий: на обучающем множестве 100%; на тестовом 74.4%


    Вывод


    А вывод я для себя сделал один, что этот способ не является заменой выбора глобальной скорости обучения, но является хорошим дополнением к уже подобранной скорости обучения.
    • +17
    • 13k
    • 7
    Поделиться публикацией

    Комментарии 7

      0
      Описаный способ подстройки модификатора гораздо точнее определяется словом «инерция». Вес который «разогнался» в своем изменении медленно меняет скорость. Также надо не забывать, что полезны нулевые коэфициэнты для ускорения обучения. К примеру когда у вас шаг 0.01 и коэфциент инерции еще уменьшает это значение, то выгодно вообще остановить изменение веса на несколько итераций. При этом вычислений нужно производить меньше, соответственно скорость обсчета возрастает.
        0
        не совсем инерция, для этого есть понятие момент, о нем можно прочитать тут внизу http://www.learnartificialneuralnetworks.com/backpropagation.html

        а в данном случае модифицируется так сказать степень шага в определенной размерности пространства весов
          0
          Цитата: «Если не вдаваться в математику, то можно сказать так, что алгоритм поощряет те веса (рост в рамках какой то размерности пространства весов) которые сохраняют свое направление относительно предыдущего момента времени, и штрафует тех, кто начинает метаться.»
          Это и есть «инерция», если масса начинает менять свою скорость делает она это с «инерцией», тот самый ваш «штраф на тех кто мечется»
            0
            да но только штраф и бонус не зависит от абсолютного значения предыдущего изменения, какая же это инерция
              0
              Вы сами себе противоречите, в приведенной выше цитате явно написано именно зависимость от предыдущего момента.
                0
                смотри формулы в общем, что тут объяснять
                  0
                  Так в формуле это и написано: дельта на ПРОШЛОМ шаге помноженная на дельту на этом шаге больше нуля, тогда бонус, иначе штраф. Меньше нуля она тогда, когда знак дельты поменялся. Т.е. «скорость» веса резко поменялась и штраф тут действует как некая «инерерция».

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

      Самое читаемое