Я тебе очень благодарен за твой объяснения и то с каким трудом подходишь к подаче материала, после долгих скитаний от статей к статьи и курсов к курсу, твой канал как свежий воздух где понимаешь сложные вещи без проблем, СПАСИБО!!!!
Не очень понял на 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 - одна в обоих выражениях. Или я совсем не понимаю метод градиентного спуска, или здесь используется не он. Поправьте меня, пожалуйста, если не прав.
Наконец нашел канал, на котором автор не пишет сразу какой-то код из гугла, а объясняет математику происходящего, это и есть самое увлекательное
Я тебе очень благодарен за твой объяснения и то с каким трудом подходишь к подаче материала, после долгих скитаний от статей к статьи и курсов к курсу, твой канал как свежий воздух где понимаешь сложные вещи без проблем, СПАСИБО!!!!
Что же я раньше не обнаружил-то этот материал! Большая человеческая благодарность!!!!
Наконец-то хоть кто-то человеческим языком объяснил работу градиентного спуска)👍
спасибо большое, как раз именно то, что мне нужно было!
Очень доступно и интересно, спасибо
Материал просто топчик!
Круть, как всегда!!!
Шикарно!
Записывайте еще, док! ;)
Не очень понял на 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
типа так? Вроде, они независимо вычисляются
😎
Не совсем понял почему при использовании функции dEda транспонировали матрицу. Можете пожалуйста подсказать?
где это?
Извините за вопрос, но почему у нас итераций 50, а не 100?
число итераций мы выбираем сами, я решил взять 50
5+