Отличное объяснение, я кайфанул))) Искренне не понимаю, почему преподы в университете не могут рассказывать так же понятно.
@yaroslavsergeev67372 жыл бұрын
скорее очень наглядно получается, когда демонстрируют работу. Преподам обязательно надо визуально подкреплять работу всего этого. Спасибо за материал)
@Ramozzzz2 жыл бұрын
Вот такое объяснение я и искал. По-человечески, с примерами и пояснениями, а не сухим ученым языком. Я когда писал курсовые, всегда старался именно так излагать материал. Премного благодарен)
@rustambox2 жыл бұрын
Разбирался в градиентном спуске, колеблясь "как точка около истины" пока не натолкнулся на это видео. Низкий поклон учителю!
@ВячеславКузнецов-ъ3щ3 жыл бұрын
Пожалуй, самое понятное объяснение Градиентного спуска во всем Рунете! Спасибо
@eugeneyuriev95774 жыл бұрын
Супер! Четко, ясно, локанично. Редко такое встречается. Спасибо за вашу работу!
@БорисАстафьев-в9ъ2 жыл бұрын
лучшее объяснение градиентного спуска, мой лайк стремиться к плюс бесконечности
@escozoonv4 жыл бұрын
Блин мне бы такие видео уроки когда я учился... Понятно и главное интересно! Спасибо
@Alex_chist4 жыл бұрын
Превосходно! Спасибо большое! очень крутой стиль изложения!
@данилкоролёв-ж9л Жыл бұрын
это первое хорошее объяснение !!!
@Lina_sg Жыл бұрын
очень круто и наглядно, спасибо! и отдельно за код на python:)
@NickyBricky373 Жыл бұрын
Потрясающее объяснение, спасибо!
@lordadwond3929 Жыл бұрын
Довольно интересная подача. Благодарю!
@andreishichko790611 ай бұрын
Спасибо за внятное объяснение.
@machinelearningpodcast95023 жыл бұрын
Очень крутое объяснение!
@ВасилийЛавский2 жыл бұрын
Спасибо вам за подробнейшее объяснение!!!
@cantwaitforit4 жыл бұрын
Классное видео, все очень понятно, спасибо!
@sergeyrykunov67373 жыл бұрын
Очень доступно и понятно! Спасибо!!!
@vladimirpotapov70503 жыл бұрын
Спасибо большое за понятное объяснение!
@_crimson16243 жыл бұрын
Большое спасибо!
@cpp Жыл бұрын
Благодарю, полезно, доступно
@АлексейБаринов-ь5н2 жыл бұрын
Восхитительно
@ChistoPit4 жыл бұрын
Очень крутые уроки!
@leonidzhezherun2318 Жыл бұрын
Супер!
@hippityhoppityboom4 жыл бұрын
Очень классное видео! Спасибо
@danysprrr3 жыл бұрын
Круто! Спасибо!)
@mar_kha Жыл бұрын
8:30 да это же подойдёт для анимации мяча, который упал в ямку! 😍
@LightningTrooper2 жыл бұрын
самое интересующее меня было - как найти величину шага. тут это по какой то причине не объяснено, пришлось искать на английские каналы, где всё по полочкам объяснено.
@stephencry11 ай бұрын
Величина шага сходимости ищется с помощью минимизации функции, мы хотим подобрать такой шаг, чтобы не улететь мимо минимума, а такого результата можно добиться с помощью такой штуки. Например, у меня есть функция x1^2 + x1 + 3x1x2 + 2x2^2 + x2 - 1, надо пройтись по ней методом наискор. спуска. Сначала ищем градиент функционала - это DF = ([2x1 +3x2 + 1], [3x1 +4x2 + 1]), начальное приближение возьмём как x0 = (0, 0). Запишем формулу первой итерации: x1 = x0 + L*DF(x0). Ищем х1: x1 = (0, 0) + L * (1,1) = (L, L), надо найти оптимальный L, это будет argminF(x1) = L^2 + L + 3L^2 + 2L^2 + L -1 = 6L^2 + L - 1. Минимум этой функции - вершина, так как это парабола, а значит её можно найти по формуле L0 = - b/2a = -1/12. Подставим к x1, получим (-1/12, -1/12) - это наша первая точка, дальше вторую итерацию можно записать как х2 = х1 + L*DF(x1) и т.д. В общем виде: xn+1 = xn + L*DF(xn). Вы можете мне возразить, а какого хуя там +, когда в видосе минус. Прикол в том, что с - мы идём вдоль антиградиента, когда с +, мы идём по градиенту.
@stephencry11 ай бұрын
Если хотите, можете просто в моей формуле поменять + на - и всё будет, как и в видеоролике. Надеюсь, что я нормально объяснил.
@yuraisme4 жыл бұрын
оч. круто и понятно
@1233-s3w4 жыл бұрын
Очень годно
@noriodan2442 жыл бұрын
А почему не используется библиотека decimal? Ведь она же позволяет убрать погрешность питона в работе с десятичными числами, а это очень важно для таких задач
@impellergimpeller51332 жыл бұрын
👍👍👍👍👍
@АлексейПетров-з1ф3с10 ай бұрын
Здравствуйте, спасибо за видео, вопрос такой зачем нужно вычислять градиент с помощью производной? направление движения мы поймем по разнице между выходным значением и эталоном. далее используем лямбда и все. Не совсем понятно зачем нужна производная. Спасибо
@selfedu_rus6 ай бұрын
Производная (численно) как раз то, что вы сейчас сказали ))
@JohnWickMovie Жыл бұрын
Хорошо бы было упомянуть седловые точки
@jamjam3337 Жыл бұрын
😎
@efraimfligil31192 жыл бұрын
А как поступать, если вычеслить производную достаточно проблиматично? (комбинация сложных функций типа Гамма функциая или бета и т.д. )
@selfedu_rus2 жыл бұрын
тогда использовать прилиженное вычисление, которое, в среднем, дает то же направление, что и истинный градиент
@ШамильЗиганшин-й3ю3 жыл бұрын
Здравствуйте, А что если мы изначально, случайным образом, попали в область локального максимума. Как тогда в этом случае поведет себя эта программа.
@selfedu_rus3 жыл бұрын
будет колебаться вокруг него, если это единственный минимум, либо же может выскочить и перейти в локальный минимум
@ШамильЗиганшин-й3ю3 жыл бұрын
@@selfedu_rus спасибо за ответ
@IlyaAb3 жыл бұрын
реализовать подобную анимацию в юпитере как-то можно? там сразу конечный вариант графика выдаёт
@selfedu_rus3 жыл бұрын
в юпитере не работал с анимацией не скажу
@dicloniusN355 ай бұрын
так только через дикую задницу for i in range(N): xx = xx - lmd*df(xx) # изменение аргумента на текущей итерации по формуле град. спуска point.set_offsets([xx, f(xx)]) # отображение нового положения точки на текущей итерации, которое получили в строке выше # перерисовка графика и задержка на 30 мс ''' не работает в юпитере, только в обычном пайчарме fig.canvas.draw() fig.canvas.flush_events() time.sleep(0.03) ''' #plt.plot(pl.randn(100)) fig, ax = plt.subplots() ax.grid(True) ax.plot(x_plt, f_plt, c='#448800') #point.Draw() plt.scatter(xx, f(xx), c='red'if(i==N-1)else'blue' ) display.clear_output(wait=True) display.display(plt.gcf()) time.sleep(0.03) if i
@СергейКондулуков-з9ч Жыл бұрын
Ничего не понял, но насладился логикой объяснения.
@Верховныйтехножрец3 жыл бұрын
Обычно же эпсиланд используют для обозначения шага сходимости
@selfedu_rus3 жыл бұрын
в разной литературе по разному
@user-ev7rm2yp9u4 жыл бұрын
А почему ось x которая вроде как ось абсцисс здесь называют осью ординат?
@selfedu_rus4 жыл бұрын
не нашел где, но во всех остальных случаях произносится "абсцисс"
@user-ev7rm2yp9u4 жыл бұрын
@@selfedu_rus 4:00-4:10
@selfedu_rus4 жыл бұрын
да, это оговорка )
@ДимаБарвинский-у6к3 жыл бұрын
Здравствуйте, попробовал написать такую же программу, но почему то выдает ошибку AttributeError: объект 'FigureCanvasTkAgg' не имеет атрибута 'flush' , подскажите. что делать) За видео респект, интересно, кратко и понятно!
@selfedu_rus3 жыл бұрын
Первое. По этой ссылке исходники github.com/selfedu-rus/python-algorithms Второе, вместо canvas попробуйте plt.draw() и plt.gcf().canvas.flush_events()
@ДимаБарвинский-у6к3 жыл бұрын
При запуске программы точка не движется, мб быть я какую-нибудь из библиотек не добавил(
@selfedu_rus3 жыл бұрын
@@ДимаБарвинский-у6к странно, тогда просто посмотрите в документации по matplotlib - это он все рисует
@savel2work2 жыл бұрын
А почему нельзя просто посчитать массив точек и выбрать наименьшую?
@selfedu_rus2 жыл бұрын
Во-первых, вы должны так сформировать этот массив, чтобы в нем было наименьшее значение. Если вы знаете, как это сделать, то уже что то знаете о граничных значениях и это можно использовать. Во-вторых, число оптимизируемых параметров часто составляет от нескольких сотен до миллионов (в нейронных сетях) и здесь простой перебор уже не поможет.
@savel2work2 жыл бұрын
@@selfedu_rus, но ведь у вас в примере двадцать шагов с шагом примерно 0.2 или около того? Ведь алгоритм не с while, а с range(N)
@selfedu_rus2 жыл бұрын
@@savel2work ну это просто пример, в реальных задачах не всегда известен диапазон
@savel2work2 жыл бұрын
@@selfedu_rus, а как же тогда поступать в реальности?
@selfedu_rus2 жыл бұрын
@@savel2work градиентный спуск, ему только начальное приближение нужно (можно взять случайное число и от него уже двигаться к оптимальному значению)
@n_bazarov3 жыл бұрын
Ну я так понял здесь это не разбирается, но типа learning rate можно динамически изменять, типа от 0.9 до 0.01 и так за счет этого можно выйти из локального минимума
@selfedu_rus3 жыл бұрын
Пока нет алгоритмов, которые бы за приемлемое время (объем вычислений) находили глобальный оптимум. Поэтому классический градиентный спуск пытаются улучшить разными способами. Например, это оптимизация Adagard, Adadelta, Adam, моменты Нестерова и т.п.
@Zelloss672 жыл бұрын
Это конечно все хорошо, но в Jupiter Notebook именно такой код не работает и никакой анимации вы не увидите
@vrs9106 Жыл бұрын
в первой ячейке перед импортами напиши %matplotlib