Как влияет регуляризация на градиент?

Регуляризация похожа на кота, показанного выше, когда некоторые веса хотят быть «большими» по величине, мы наказываем их. И сегодня я хотел посмотреть, какие изменения вносит термин регуляризация в градиент. Ниже приведен список различных условий регуляризации, которые мы собираемся сравнить. (θ - вес каждого слоя.).

Я. Базовая линия (без регуляризации)
A. θ²
(гребенчатая регрессия)
B. abs (θ) + sqrt (abs (θ) ²)
(Эластичная сеть)
C. θ
(из статьи Сравнение показателей разреженности)
D. sqrt (θ²)
(из статьи Сравнение показателей разреженности)
E. abs (θ)
(p-норма со значением p, равным 1) < br /> F. sqrt (abs (θ) ²) (p-норма с p-значением 2)
G. sqrt (θ²) / θ
(из статья Сравнение показателей разреженности)
H. -tanh (θ)
(из статьи Сравнение показателей разреженности)
I . -tanh (θ²)
(из статьи Сравнение показателей разреженности)
J. -log (1 + θ²)
(из статьи « Сравнение Меры разреженности »)

Введение

Чтобы предотвратить чрезмерную подгонку или контролировать степень переобучения (серьезность переобучения), мы используем регуляризацию, такую ​​как исключение или добавление члена регуляризации L1 или L2. Общая идея регуляризации (за исключением исключения) состоит в том, чтобы минимизировать величину веса при минимизации целевой функции, и, конечно же, некоторая регуляризация направлена ​​на создание `` разреженных '' весов, что означает, что большинство значений веса равны нулю. .

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

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

Похожие работы

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

Кроме того, если кого-то интересует основная интуиция, лежащая в основе регуляризации L1 и L2, а также некоторая история именования, пожалуйста, ознакомьтесь с этим сообщением в блоге.

Настройка эксперимента

Синяя сфера → Входное изображение из фигуры Набор данных STL (20,96,96,3)
Желтый прямоугольник → Слой свертки с активацией ReLU
Красная площадь → член потери кросс-энтропии

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

Результаты

Точность обучения / тестирования

Когда мы просматриваем графики точности как для данных обучения, так и для данных тестирования, мы можем заметить, что… ..
Наивысшая точность обучения достигается при добавлении: sqrt (θ²) / θ
Наивысшая точность тестирования достигается при добавлении: -tanh (θ)
Самая низкая производительность достигается при добавлении: θ

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

Средняя статистика для gradientp (градиент, который передается на предыдущий слой)

Когда мы просматриваем значения градиента, которые передаются на предыдущий слой, выделяется один цвет - серый. Добавление термина -log (1 + θ²), кажется, приводит к значительному изменению значений градиента.

Средняя статистика для gradientw (градиент по весу)

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

И когда мы сосредотачиваем свое внимание на средних значениях стандартного отклонения, мы замечаем, что в последних областях тренировки розовая и желтая линии пересекаются. Однако вариант H (розовый) дал намного лучшую производительность на данных поезда / теста, чем вариант B (желтый).

Средняя статистика для слоя (значение слоя до активации)

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

Средняя статистика для слоев (значение слоя после активации)

Мы уже знаем, что добавление -tanh (θ) (розовая линия) дало нам лучшие результаты на тестовых изображениях, и когда мы сосредоточиваем внимание на количестве не- нулевые элементы после активационного слоя, случай H (розовая линия), находятся в своей собственной области.

В то время как другие случаи либо выше, либо ниже 60 000, странным образом случай H, похоже, сходится в этой области. Внутреннее представление данных более разреженное по сравнению с другими случаями.

Средняя статистика для весов (значения веса для каждого случая)

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

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

Средняя статистика для момента (часть импульса в Adam Optimizer)

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

Обсуждение

Я хочу начать этот раздел со слов:

Я ничего не делаю, это был всего лишь ОДИН эксперимент, поэтому было бы неправильно делать какие-либо выводы из одного образца. Кроме того, одним критическим недостатком моего эксперимента является тот факт, что все веса не были инициализированы одинаково! Я дал точно такое же начальное значение, а также стандартное отклонение (как показано ниже), но я не уверен, все ли веса были инициализированы одинаково.

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

Я сосредоточу свое внимание только на случае H (розовый), как правило, мы понимаем регуляризацию как ограничение роста величины весов, однако из приведенного выше графика мы можем ясно видеть, что среднее значение весов для случая H было выше, чем у других ….так…? Возникает вопрос, хорошо ли это было упорядочено? Может ли использование термина «танх» быть причиной этого?

Но, кроме того, мы заметили, что после активации ReLU значение слоя H для случая H было более разреженным, чем для других. Это означает, что количество нулей для здоровой дозы смешано во внутреннем представлении. Мне действительно интересно, почему случай H дал лучшую точность теста, на данный момент подойдет объяснение «потому что он был хорошо регуляризован», но я знаю, что это еще не все.

Заключение / Код

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

Чтобы получить доступ к коду в Google Collab, нажмите здесь, чтобы получить доступ к коду в моем GitHub, пожалуйста, нажмите здесь.

Заключительные слова

Проводя эти эксперименты, я не мог не думать, что у этого типа регуляризации есть один (не столь критический) недостаток.

Все они являются пассивным методом регуляризации.

В частности, каждый вес в сети, независимо от того, где они расположены, какие функции они имеют тенденцию улавливать, все они упорядочиваются. Я, конечно, считаю, что это интересная область исследования, например, у нас может быть простое условное выражение, которое говорит: «Если величина веса больше, чем x, выполните регуляризацию» или более сложное, «если взаимная информация между этим вес и метка класса уже высоки, проведи регуляризацию ». Интересно, как эти методы изменят общую динамику тренировок.

Наконец, я хочу поблагодарить своего руководителя Dr. Брюс за рекомендацию статьи Сравнение показателей разреженности . Для получения дополнительных статей посетите мой сайт.

Приложение (анимация GIF для каждого слоя в каждом случае)

Случай Z: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай A: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай B: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай C: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай D: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай E: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай F: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай G: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай H: в порядке gradientp, gradientw, layer, layera, moment, weight

Случай I. В порядке gradientp, gradientw, layer, layera, moment, weight

Случай J: в порядке gradientp, gradientw, layer, layera, moment, weight

Приложение (производные)

Ссылка

  1. Брюс, Н. (2016). Нил Д. Б. Брюс. Нил Д. Б. Брюс. Получено 4 января 2019 г. с сайта http://www.scs.ryerson.ca/~bruce/.
  2. Херли, Н., и Рикард, С. (2008). Сравнение показателей разреженности. arXiv.org. Получено 4 января 2019 г. с сайта https://arxiv.org/abs/0811.4706.
  3. Численные и научные вычисления с помощью Python: создание подзаголовков с помощью Python и Matplotlib. (2019). Python-course.eu. Получено 4 января 2019 г. с сайта https://www.python-course.eu/matplotlib_multiple_figures.php.
  4. scipy.stats.kurtosis - Справочное руководство SciPy v1.2.0. (2019). Docs.scipy.org. Получено 4 января 2019 г. с сайта https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kurtosis.html.
  5. scipy.stats.skew - Справочное руководство SciPy v0.13.0. (2019). Docs.scipy.org. Получено 4 января 2019 г. с сайта https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.skew.html.
  6. numpy.count_nonzero - Руководство по NumPy v1.15. (2019). Docs.scipy.org. Получено 4 января 2019 г. с сайта https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.count_nonzero.html.
  7. массив ?, Э. (2017). Эффективно подсчитать нулевые элементы в массиве numpy ?. Переполнение стека. Получено 4 января 2019 г. с сайта https://stackoverflow.com/questions/42916330/efficiently-count-zero-elements-in-numpy-array.
  8. синтаксический анализ, С. (2013). SyntaxError: неожиданный EOF во время синтаксического анализа. Переполнение стека. Источник по состоянию на 4 января 2019 г.
  9. matplotlib.pyplot.legend - документация Matplotlib 3.0.2. (2019). Matplotlib.org. Получено 4 января 2019 г. с сайта https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html.
  10. строка против столбца - поиск в Google. (2019). Google.com. По состоянию на 4 января 2019 г., из «https://www.google.com/search?q=row+vs+column&rlz=1C1CHBF_enCA771CA771&oq=row+vs+col&aqs=chrome.0.35i39j69i60j69i57j0l3.2289j1j7&sourceid=
  11. Legend guide - документация Matplotlib 2.0.2. (2019). Matplotlib.org. Получено 4 января 2019 г. с сайта https://matplotlib.org/users/legend_guide.html.
  12. [Архивный пост] Случайные примечания к производным для условий регуляризации. (2019). Середина. Получено 4 января 2019 г. с сайта https://medium.com/@SeoJaeDuk/archived-post-random-notes-for-derivative-for-regularization-terms-1859b1faada
  13. IPython, Р. (2013). Освобождение памяти огромного массива numpy в IPython. Переполнение стека. Получено 5 января 2019 г. с сайта https://stackoverflow.com/questions/16261240/releasing-memory-of-huge-numpy-array-in-ipython.
  14. Встроенные волшебные команды - документация IPython 7.2.0. (2019). Ipython.readthedocs.io. Получено 5 января 2019 г. из «https://ipython.readthedocs.io/en/stable/interactive/magics.htm Факl.
  15. Чепмен, Дж. (2017). Как делать гифки с помощью Python. Лишний секстант. Получено 5 января 2019 г. с сайта http://superfluoussextant.com/making-gifs-with-python.html.
  16. В чем разница между Ridge Regression, LASSO и ElasticNet ?. (2017). Эклектичная эзотерика. Получено 5 января 2019 г. с сайта https://blog.alexlenail.me/what-is-the-difference-between-ridge-regression-the-lasso-and-elasticnet-ec19c71c9028.
  17. (2019). Web.stanford.edu. Получено 5 января 2019 г. с сайта https://web.stanford.edu/~hastie/Papers/B67.2%20%282005%29%20301-320%20Zou%20&%20Hastie.pdf.
  18. Методы регуляризации L1 и L2 - к науке о данных. (2017). К науке о данных. Получено 5 января 2019 г. с сайта https://towardsdatascience.com/l1-and-l2-regularization-methods-ce25e7fc831c.
  19. В чем разница между Ridge Regression, LASSO и ElasticNet ?. (2017). Эклектичная эзотерика. Получено 5 января 2019 г. с сайта https://blog.alexlenail.me/what-is-the-difference-between-ridge-regression-the-lasso-and-elasticnet-ec19c71c9028.
  20. Набор данных STL-10. (2019). Cs.stanford.edu. Получено 5 января 2019 г. с сайта https://cs.stanford.edu/~acoates/stl10/.
  21. сюжет, Х. (2010). Как изменить размер шрифта на графике matplotlib. Переполнение стека. Получено 5 января 2019 г. с сайта https://stackoverflow.com/questions/3899980/how-to-change-the-font-size-on-a-matplotlib-plot.
  22. matplotlib ?, Х. (2015). Как я могу построить несколько фигур в одной строке с помощью matplotlib ?. Переполнение стека. Получено 5 января 2019 г. с сайта https://stackoverflow.com/questions/34291260/how-can-i-plot-multiple-figure-in-the-same-line-with-matplotlib.
  23. текст, I. (2016). Поиск текста с помощью сочетания клавиш в ноутбуке IPython. Переполнение стека. Получено 5 января 2019 г. с сайта https://stackoverflow.com/questions/35119831/ipython-notebook-keyboard-shortcut-search-for-text.
  24. Создание и экспорт видеоклипов - документация MoviePy 0.2.3.2. (2019). Zulko.github.io. Получено 5 января 2019 г. с сайта https://zulko.github.io/moviepy/getting_started/videoclips.html.
  25. Создание GIF из видеофайлов с помощью Python - __del __ (self). (2014). Zulko.github.io. Получено 5 января 2019 г. с сайта «http://zulko.github.io/blog/2014/01/23/making-animated-gifs-from-video-files-with-python женщина/.