Я тебе очень благодарен за твой объяснения и то с каким трудом подходишь к подаче материала, после долгих скитаний от статей к статьи и курсов к курсу, твой канал как свежий воздух где понимаешь сложные вещи без проблем, СПАСИБО!!!!
Не очень понял на 1:38, почему "шаги лямбда один и лямбда два, НЕЗАВИСИМЫЕ для параметра a и для параметра b". Лямбда определяет длину шага в направлении, обратном градиенту. Лямбда - это скаляр, на который умножается градиент, поэтому она может меняться от шага к шагу, но на каждом шаге должна быть одинакова для a и для b, иначе теряется смысл "градиентного спуска".
Мы независимо двигаемся по антиградиенту для параметров a и b. Можно попробовать учитывать зависимости, тогда у нас в формуле будут смешанные производные по a и b.
@@selfedu_rus извините, все равно не понял, откуда в формуле появятся смешанные производные, имхо, там останутся только частные производные E по a и b. Вообще зачем нам двигаться независимо по антиградиентам для a и b, когда по методу градиентного спуска нам нужно двигаться по антиградиенту E(a, b) (двух переменных, результат - двумерный вектор): - lambda * grad E = - lambda * (dE/da, dE/db) (производные - частные), поэтому a(n+1) = a(n) - lambda * dE/da b(n+1) = b(n) - lambda * dE/db lambda - одна в обоих выражениях. Или я совсем не понимаю метод градиентного спуска, или здесь используется не он. Поправьте меня, пожалуйста, если не прав.
Наконец нашел канал, на котором автор не пишет сразу какой-то код из гугла, а объясняет математику происходящего, это и есть самое увлекательное
Я тебе очень благодарен за твой объяснения и то с каким трудом подходишь к подаче материала, после долгих скитаний от статей к статьи и курсов к курсу, твой канал как свежий воздух где понимаешь сложные вещи без проблем, СПАСИБО!!!!
Что же я раньше не обнаружил-то этот материал! Большая человеческая благодарность!!!!
Наконец-то хоть кто-то человеческим языком объяснил работу градиентного спуска)👍
спасибо большое, как раз именно то, что мне нужно было!
Материал просто топчик!
Круть, как всегда!!!
Очень доступно и интересно, спасибо
Шикарно!
Записывайте еще, док! ;)
aa и bb нужно расчитывать независимо. У вас при расчете bb используется уже новое значение aa
Да, согласен!
Как полезно читать комментарии
aa1 = 0
bb1 = 0
for n in range(Niter):
aa1 = aa - lmb1 * Eda(y, aa, bb)
bb1 = bb - lmb2 * Edb(y, aa, bb)
ax.scatter(aa1, bb1, E(y, aa, bb), color='y')
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.01)
print(aa1, bb1)
aa = aa1
bb = bb1
типа так? Вроде, они независимо вычисляются
😎
👍👍👍👍👍
Не очень понял на 1:38, почему "шаги лямбда один и лямбда два, НЕЗАВИСИМЫЕ для параметра a и для параметра b". Лямбда определяет длину шага в направлении, обратном градиенту. Лямбда - это скаляр, на который умножается градиент, поэтому она может меняться от шага к шагу, но на каждом шаге должна быть одинакова для a и для b, иначе теряется смысл "градиентного спуска".
Мы независимо двигаемся по антиградиенту для параметров a и b. Можно попробовать учитывать зависимости, тогда у нас в формуле будут смешанные производные по a и b.
@@selfedu_rus извините, все равно не понял, откуда в формуле появятся смешанные производные, имхо, там останутся только частные производные E по a и b. Вообще зачем нам двигаться независимо по антиградиентам для a и b, когда по методу градиентного спуска нам нужно двигаться по антиградиенту E(a, b) (двух переменных, результат - двумерный вектор):
- lambda * grad E = - lambda * (dE/da, dE/db) (производные - частные), поэтому
a(n+1) = a(n) - lambda * dE/da
b(n+1) = b(n) - lambda * dE/db
lambda - одна в обоих выражениях.
Или я совсем не понимаю метод градиентного спуска, или здесь используется не он. Поправьте меня, пожалуйста, если не прав.
Не совсем понял почему при использовании функции dEda транспонировали матрицу. Можете пожалуйста подсказать?
где это?
5+
Извините за вопрос, но почему у нас итераций 50, а не 100?
число итераций мы выбираем сами, я решил взять 50