#8. Стохастический градиентный спуск SGD и алгоритм SAG | Машинное обучение

Поділитися
Вставка
  • Опубліковано 28 лис 2024
  • Практический курс по ML на Stepik: stepik.org/cou...
    Суть стохастических алгоритмов при оптимизации эмпирического риска. Рассматривается классический алгоритм Stochastic Gradient Descent (SGD, Роббинса-Монро) и Stochastic Average Gradient (SAG).
    Инфо-сайт: proproprogs.ru/ml
    Телеграм-канал: t.me/machine_l...
    Градиентный алгоритм: • ЦОС Python #2: Метод г...

КОМЕНТАРІ • 34

  • @АлександрКаптуров-с8и
    @АлександрКаптуров-с8и 8 місяців тому +3

    О SAG никогда не слышал. Разве он где-то применяется? Объяснение SGD шикарное, спасибо!

  • @kochkindi
    @kochkindi 2 роки тому +12

    Спасибо вам большое за отличное доступное объяснение! Очень жду полного продолжения по ML, с вами получается учиться.

  • @Алекс21-р8р
    @Алекс21-р8р 2 роки тому +37

    Чем дальше в лес, тем толще партизаны.

    • @LolaL7088
      @LolaL7088 8 місяців тому

      Раз 5 пересмотрела, но медик поняла😅

  • @СарматПересветов
    @СарматПересветов 9 місяців тому +1

    Спасибо за понятное обьяснение!)

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov Рік тому +4

    Сергей, благодарю! 👍

  • @forwarddenz2976
    @forwarddenz2976 2 роки тому +5

    В том же духе!!!

  • @PrimaLuceAstronaut
    @PrimaLuceAstronaut 2 роки тому +3

    Здравствуйте, видео по мл нравятся и я решил параллельно попробовать себя в комьютерном зрении, но недавно наткнулся на задачу, с которой сам разобраться до конца не могу. Суть задачи вот в чем: Требуется реализовать алгоритм сборки пазла из прямоугольных фрагментов изображений (с
    точностью до поворота на 180 градусов). В задании будут представлены разбиения на разное количество
    фрагментов (от 12 до 432). Каждый фрагмент может быть случайно повернут на один из углов (0, 90,
    180, 270). Разрешение исходного изображения - 1200x900.
    Пользоваться можно только numpy, но я думаю этого должно хватить. Сам я смог придумать такой алгоритм:
    Брать у каждого фрагмента изображения по два пикселя с начала и конца каждой стороны и сравнивать их с другими пикселями каждой стороны других фрагментов. По сути, пиксель из себя представляет три значения: уровень красного, зеленого и синего от 0 до 255. Вычитая пиксели одного фрагмента из другого можно по разности определить, какие фрагменты имеют наибольшую схожесть.
    Проблема возникла с ограничением фрагментов в одной строке. Потому, что доходя до края изображения программа не может понять, что это край и продолжает подбирать фрагменты. Если вдруг кто-то осилит это полотнище и подсказать, что можно сделать, я буду безгранично благодарен! Заранее спасибо

    • @selfedu_rus
      @selfedu_rus  2 роки тому +6

      1. Думаю, все их можно привести к единому углу и масшатбу, используя собственные числа и собственные векторы (метод главных компонент над координатами точек каждого квадрата).
      2. Сравнивать можно либо по корреляционному принципу, либо, все точки каждого квадрата вытянуть в строку, упорядочить по возрастанию (цветов) или убыванию и дальше брать те, что наиболее похожи. (Хотя здесь масса алгоритмов).

    • @PrimaLuceAstronaut
      @PrimaLuceAstronaut 2 роки тому +1

      @@selfedu_rus с самим сравнением у меня вроде проблем нет. Все фрагменты ровно квадратные, посчитать необходимое количество фрагментов в строке/столбце можно просто поделив высоту или ширину итогового изображения(это фиксированные значения 1200 и 900) на длину грани этого квадратного фрагмента. У меня возникла проблема с тем, чтобы вовремя остановить программу. Я не могу придумать способ, чтобы передать программе, что данный фрагмент является краем изображения и что дальше него идти не надо

  • @impellergimpeller5133
    @impellergimpeller5133 2 роки тому +4

    👍👍👍👍👍

  • @Салфетка-ь1ы
    @Салфетка-ь1ы Рік тому +2

    Возник вопрос по поводу пересчёта функционала качества. Мы берём случайное значение x_k из нашей выборки и считаем функцию потерь и градиент. После чего мы хотим сравнить функционал качества для найденных текущих значений(например коеффициентов a, b в линейной регрессии) с функционалом качества предполагаемой хорошей прямой. Почему мы каждый раз берём разное количество элементов этой суммы в зависимости от выбранного случайного значения. Типа если мы выбрали x_2, то берём сумму первых двух слагаемых, а если x_100, то сумму первых 100?
    И что если у нас эпох(итераций) больлше, чем размер датасета, как тогда считать?

    • @selfedu_rus
      @selfedu_rus  Рік тому

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

  • @PhyzmatClass
    @PhyzmatClass 7 місяців тому +1

    13:31 каким образом инициализировать градиенты? Вычислить как-то или взять случайные значеия?

    • @selfedu_rus
      @selfedu_rus  7 місяців тому

      первый раз вычисляются по всей выборке

  • @efraimfligil3119
    @efraimfligil3119 2 роки тому +2

    А почему, скачко-образное схождение плохо? Вот например, в генечиских алгорирмах это сплош и рядом.

    • @selfedu_rus
      @selfedu_rus  2 роки тому +2

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

  • @PhyzmatClass
    @PhyzmatClass 8 місяців тому

    8:32 это ведь не средняя сумма, а просто сумма. А средней она будет только при делении на m-1!

  • @NationalVerrater
    @NationalVerrater 8 місяців тому +1

    Зачем в классическом методе суммировать градиенты?? Надо ведь из каждой переменной (веса) вычитать свой градиент.

    • @NationalVerrater
      @NationalVerrater 8 місяців тому

      Я понял, сумма градиентов не по разным переменным, а по набору образов, верно?

  • @kirillbalabanov39
    @kirillbalabanov39 2 роки тому

    Почему используется именно экспоненциальное среднее, а не обычное рекуррентное среднее?

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      а как вы его подсчитаете? для последних m значений придется хранить все m величин в памяти

  • @PhyzmatClass
    @PhyzmatClass 7 місяців тому +1

    9:45 почему нельзя так и оставить 1/m и не заменять ее лямбдой, взятой, вообще говоря, с потолка? К тому же лямбда изначально переменная величина, ведь она зависит от m, а вы ее волюнтаристски делаете постоянной.

    • @selfedu_rus
      @selfedu_rus  7 місяців тому +1

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

    • @PhyzmatClass
      @PhyzmatClass 7 місяців тому

      @@selfedu_rus А в чем вычислительный выигрыш? При вычислении ЭС будет то же число слагаемых, только с другими коэффициентами.

    • @selfedu_rus
      @selfedu_rus  7 місяців тому +1

      @@PhyzmatClass простая рекуррентная формула: Q_m = r*a_(n-1) + (1-r)*Q_(m-1)

    • @PhyzmatClass
      @PhyzmatClass 7 місяців тому +1

      @@selfedu_rus Так ведь и обычное СА можно вычислять по той же самой рекуррентной формуле, но с лямбдой равной 1/m.

    • @selfedu_rus
      @selfedu_rus  7 місяців тому +1

      @@PhyzmatClass хранить все m значений придется

  • @YbisZX
    @YbisZX Рік тому +1

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

    • @selfedu_rus
      @selfedu_rus  Рік тому

      в SAG не нужно все усреднять каждый раз, мы храним все значения по отдельности и всю сумму (среднюю) сразу, поэтому можем ее корректировать новым вычисленным значением, исключив старое и добавив новое с множителем 1/L, где L - размер выборки

    • @YbisZX
      @YbisZX Рік тому

      @@selfedu_rus Так в том и проблема! При выборке в миллион наблюдений обновление лишь одного компонента практически не изменит средний градиент. Это вносит сильную инерцию в корректировку параметров w. В какой-то момент мы получим правильное разделение, но средний градиент будет толкать w в прежнем направлении. Так как оценка качества тоже идет с инерцией из-за "скорости забывания", то w может занести сильно дальше нужного...

    • @selfedu_rus
      @selfedu_rus  Рік тому

      @@YbisZX В инерции нет ничего плохого, многие (если не все) оптимизаторы именно и создают эту инерцию, чтобы "выпрыгивать" из локальных минимумов. Ну а стоит его применять для какой-либо конкретной задачи или нет, нужно смотреть. Универсального решения здесь нет.