На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела
1. Название темы должно отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишите свою проблему, тем быстрее получите вразумительный совет

Модераторы: esperanto
  
> стохастический градиентный спуск , Помогите разобраться с тем, как работает стохастический градиентный спуск
    Здравствуйте. Поясните пожалуйста, кто понимает.
    До какого-то момента идея стохастического градиентного спуска мне казалась ясной. Но тут наткнулся на одну статью, и вся ясность пропала. И чем дальше копаю, тем все хуже. ТО есть по началу я просто решил, что в статье ошибка. Но ет - многие авторы с ней солидарны.
    Вот смотрите. Пусть у меня нейросеть для распознавания цифр. Есть MNIST, 60000 примеров картинок 28х28, то есть 784 входа. Я делаю алгоритм обратного распределения методом градиентного спуска. Как я привык? Я беру один пример, прогоняю ее через сетку, и сразу же корректирую коэффициенты методом обратного распространения. ОК. Я полагал, что это и есть нормальный градиентный спуск. А схоластический - это когда я в каждом шаге беру не все 784 входа, а только его часть.
    Так вот. Я натолкнулся на другой алгоритм. Что вроде бы мы прогоняем все 60000 примеров, определяем вероятность ошибки (Cross entropy loss, я так понимаю), и только тут корректируем веса. А стохастический градиентный спуск - это когда мы берем один пример ( то есть то, что раньше я считал обычным градиентным спуском). Ну или не один пример, а несколько.
    Черт с ними, с терминами. НО - как мы можем выполнить обратное распределение по всем 60000 примерам? Мы можем определить частные производные - что по значению входов, что по коэффициентам W - только для конкретной входной комбинации. Для одного примера. Как можно ее определить по сразу 50000 входов?
    Что-то я где-то не так понял. Буду очень признателен, если прольете свет.
      Цитата protoder @
      Черт с ними, с терминами. НО - как мы можем выполнить обратное распределение по всем 60000 примерам?

      От 60000 мы считаем энтропию одно число определяющее меру беспорядка. Вернее у нас по каждому выходу свое число.

      Цитата protoder @
      Черт с ними, с терминами. НО - как мы можем выполнить обратное распределение по всем 60000 примерам? Мы можем определить частные производные - что по значению входов, что по коэффициентам W - только для конкретной входной комбинации. Для одного примера. Как можно ее определить по сразу 50000 входов?

      Есть такое вначале берут 100 примеров по ним рассчитывают ошибку потом считают энтропию типа как средняя ошибка и используют в качестве вектора ошибки. Потом снова берут эти 100 и прогоняют для обучения весов.
      А что бы не гонять 2 раза каждый раз придумали с накоплением по времени считать.
      Adaptive subgradient methods
      https://habr.com/ru/post/318970/
      https://arxiv.org/pdf/1212.5701.pdf
        Огромное спасибо.
        А но действительно того стоит? Ведь сети на - как теперь оказалось - стохастическом спуске, когда коэффициенты меняют после каждого шага, вроде работают очень не плохо. При том, что эта схема сильно проще и гораздо быстродейственнее.
          Есть понятие batch_size. Это размер пакета. Batch_size = 1 значит статистический градиентный спуск. В этом случае веса корректируется после каждой картинки. Это гораздо медленнее. Могу поделиться своим опытом. Серьёзная большая нейронная сеть для распознавания эмоций по лицам. Сверточная сеть. Batch_size вначале стояло 200 и падала с ошибкой memoryerror. Сначала все веса хранит в памяти и потом вычисляет среднее приращение по всему пакету и корректирует веса сразу для пакета. Потом уменьшили бэтч сайз до 20 и сетка считалась сутки но без ошибок. Потом плюнули и сдали так курсовик и препод поставил тройку. Ну нет времени у меня искать оптимальный batch_size!

          Добавлено
          Ещё чем больше размер пакета, тем помехоустойчивость выше и можно с большим шагом
          Альфа идти.

          Добавлено
          Если пакет - 200, то с одними весами алгоритм работает весь пакет.
            Цитата доктор Рагин @

            То есть мы считаем суммарный градиент как сумма градиентов для всех значений в батче? И потом по нему определяем смещения для коэффициентов? Странно, казалось бы наоборот медленнее должно быть обучение
              Пакетный градиентный спуск быстрее потому что мы сначала прохожим 200 раз вперёд, рассчитывает СРЕДНЮЮ ошибку и дальше один раз проходом назад алгоритмом обратного распространения ошибки рассчитывает новые веса.

              Добавлено
              Обратная сторона медали: поскольку веса пересчитываются на основании входных данных, то нам приходится хранить весь пакет в памяти. Все 200 фоток. А при стахостическом спуске можно по одной фотке из файла подгружать.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0265 ]   [ 15 queries used ]   [ Generated: 19.03.24, 10:48 GMT ]