← Вернуться к списку

Почему градиентный спуск пакетом выполняет хуже, чем стохастический и мини-пакетный градиентный спуск?

Краткое содержание

Я реализовал нейронную сеть с нуля (используя только numpy) и у меня возникли проблемы, понимая, почему результаты такие разные между стохастическим/минимальным батчем градиентного спуска и пакетным градиентным спуском. Данные для обучения представляют собой коллекцию координат точек (x,y). Метки – 0 или 1 (выше или ниже параболы). В качестве теста я выполняю задачу классификации. Моя цель состоит в том, чтобы NN научился, какие точки находятся выше параболы (желтые), а какие – ниже параболы (фиолетовые). Вот ссылка на блокнот: https://github.com/Pign4/ScratchML/blob/master/Neural%20Network.ipynb Почему пакетный градиентный спуск показывает такие плохие результаты по сравнению с двумя другими методами? Это ошибка? Но как это возможно, учитывая, что код почти идентичен минимальному батчу градиентного спуска? Я использую одни и те же (выбранные случайно методом проб и ошибок) гиперпараметры для всех трех нейронных сетей. Нужен ли пакетному градиентному спуску более точный метод для поиска правильных гиперпараметров?

Полный текст

Почему градиентный спуск пакетом работает хуже, чем стохастический и мини-пакетный градиентный спуск? Задать вопрос

Задано 6 лет, 2 месяца назад Изменено сегодня Просмотрено 755 раз

Задано 6 лет, 2 месяца назад

4 $\begingroup$ Я реализовал нейронную сеть с нуля (только используя numpy) и у меня возникают проблемы, понимая, почему результаты такие разные между стохастическим/мини-пакетным градиентным спуском и пакетным градиентным спуском: Данные для обучения представляют собой коллекцию координат точек (x,y). Метки - это 0 или 1 (выше или ниже параболы). В качестве теста я выполняю задачу классификации. Моя цель — заставить НС научиться, какие точки находятся выше параболы (желтые), а какие точки находятся ниже параболы (фиолетовые). Вот ссылка на блокнот: https://github.com/Pign4/ScratchML/blob/master/Neural%20Network.ipynb Почему пакетный градиентный спуск работает так плохо по сравнению с другими двумя методами? Это ошибка? Но как это возможно, учитывая, что код почти идентичен мини-пакетному градиентному спуску? Я использую одни и те же (случайно выбранные методом проб и ошибок) гиперпараметры для всех трех нейронных сетей. Нужен ли пакетный градиентный спуск более точный метод для поиска правильных гиперпараметров? Если да, то почему? машинное обучение глубокое обучение python градиентный спуск пакетное обучение Поделиться Улучшить вопрос Следить за редактированием 6 авг. 2024 г., 17:04 Super Kai - Kazuya Ito 109 5 5 бронзовые значки задано 26 сентября 2019 г., 16:21 Pigna 295 2 2 серебряные значки 6 6 бронзовых значков $\endgroup$ 0 Добавить комментарий | 2 ответа 2 Отсортировано по: Сбросить по умолчанию Наивысший рейтинг (по умолчанию) Измененная дата (от новых к старым) Созданная дата (от старых к новым) 2 $\begingroup$ Предполагая, что проблема заключается в классификации (Выше или Ниже параболы), это, вероятно, связано с природой пакетного градиентного спуска. Поскольку градиент вычисляется для всего пакета, он хорошо работает только на функциях потерь с выпуклой формой. Причина, по которой пакетный градиентный спуск не работает так хорошо, скорее всего, заключается в большом количестве минимумов в многообразии ошибок, что приводит к тому, что ничего не изучается. Вы можете изменить функцию потерь и посмотреть, как изменится результат — они могут быть не очень хорошими (обычно пакетный GD не очень хороший), но вы увидите различия. Вот ссылка на больше информации о различиях между тремя методами. Надеюсь, это помогло! Поделиться Улучшить ответ Следить за ответом Отвечено 27 сентября 2019 г., 8:37 ashenoy 1 419 6 6 серебряные значки 19 19 бронзовые значки $\endgroup$ 2 1 $\begingroup$ Спасибо, я лучше это понимаю. Итак, по сути, BGD не так часто используется, потому что, вероятно, большинство функций потерь имеют несколько минимумов. Я не прав? Какие другие функции потерь можно использовать в этом конкретном примере? $\endgroup$ Pigna – Pigna 2019-09-27 12:15:07 +00:00 Комментировано 27 сентября 2019 г., 12:15 1 $\begingroup$ Да. Какие другие функции потерь можно использовать в этом конкретном примере - Вы использовали разницу в качестве потери (написанную как «ошибка» в вашем коде), если я не ошибаюсь? Если да, то вы также можете попробовать величину разницы, квадрат разности, логарифмическую перекрёстную энтропию — поиск общих функций потерь даст вам огромное количество потенциальных вариантов. $\endgroup$ ashenoy – ashenoy 2019-09-27 14:32:43 +00:00 Комментировано 27 сентября 2019 г., 14:32 Добавить комментарий | 0 $\begingroup$ Поскольку вычисление пакетного градиентного спуска (ПГС) более стабильно (менее колебатся), чем мини-пакетный градиентный спуск (МПГС) и стохастический градиентный спуск (СГС), ПГС менее легко (более трудно) покидает локальные минимумы, чем МПГС и СГС, что приводит к плохому обучению, даже если ПГС может получить более точный выход, чем МПГС и СГС. Поделиться Улучшить ответ Следить за редактированием 4 часа назад Mithical ♦ 2 984 5 5 золотые значки 29 29 серебряные значки 40 40 бронзовые значки Отвечено 28 июля 2024 г., 4:47 Super Kai - Kazuya Ito 109 5 5 бронзовые значки $\endgroup$ Добавить комментарий | Вы должны войти, чтобы ответить на этот вопрос. Задайте вопрос, чтобы получить ответы Найдите ответ на свой вопрос, задав его. Задайте вопрос Исследуйте связанные вопросы машинное обучение глубокое обучение python градиентный спуск пакетное обучение