Как найти решение задачи по ее описанию? Градиентный спуск: Теория и Практика на Tensorflow

Поділитися
Вставка
  • Опубліковано 26 лис 2024

КОМЕНТАРІ • 22

  • @КрасноТех
    @КрасноТех  26 днів тому +4

    А я напомню, что анонсы роликов и что-то о текущих проектах иногда появляются в мое тг канале t.me/krasnoteh_ai

  • @АртёмЧавыкин-у5щ
    @АртёмЧавыкин-у5щ 21 день тому +2

    Информативность и подача материала отличная, анимация в видео с каждым роликом все лучше и лучше!

  • @VitVit312
    @VitVit312 26 днів тому +6

    Ну наконец то видево, ты не пропадай там

    • @Faif01
      @Faif01 26 днів тому

      Во-во

  • @ТатьянаСуржикова-м4ж

    Очень сильно!
    Ролики с каждым разом все круче!
    Больше спасибо!

  • @Морковка-д7й
    @Морковка-д7й 26 днів тому +3

    Ничего не понятно, но очень интересно. Огромное спасибо за ролик!

  • @artbeam1
    @artbeam1 25 днів тому +2

    Спасибо. Давай еще.

  • @deprome999
    @deprome999 23 дні тому

    это очень хороший видеоролик: информация, графика - все на уровне! ты замотивировал меня сдуть пыль с моего старого проекта (писал свою версию такотрона2 для курсачча) и продолжить изучение нейронок и соответственно разработку проекта. жду еще видеороликов на подобные темы, которые объясняют самую базу. спасибо !

  • @qsler
    @qsler 24 дні тому

    Честно говоря, пока только начинаю в этой теме разбираться, но вроде всё так. Видео отличное

  • @marvelfunoriginal6576
    @marvelfunoriginal6576 23 дні тому

    Очень хорошо объяснил спасибо

  • @АлександрХарченко-ц9ю

    Интересные у вас видео про нейросети... Скажите, а на каком компе вы работаете, какой процессор, сколько оперативки?

    • @КрасноТех
      @КрасноТех  16 днів тому

      Ноут просто, asus, лет 5 ему, средней ценовой категории, оператива 32 гб, проц ryzen radeon, gpu gtx 1650

  • @mogway791
    @mogway791 26 днів тому +1

    Круть. Все понятно. Это было у нас на теории эксперемента в институте. Только тогда питона небыло 😂😂😂. А что делать если есть 2 вершины.например график функции увеличивается, наступает локальный максимум потом уменьшается. Получается обучение застрянет на этом локальном максимуме, но дальше функция какое то время уменьшается, а потом опять увеличивается. И второй максимум например выше чем прошедший первый. Как убедится что мы нашли самый максимальный максимум за всю функцию, а не локальный?

    • @КрасноТех
      @КрасноТех  26 днів тому +2

      Никак) Градиентный спуск находит именно локальный минимум, но с увеличением числа параметров появляются довольно интересные эффекты, из-за которых нам становится довольно все-равно на это. Может будет об этом еще отдельный ролик, но если вкратце: если у нас функция одной переменной, то мы по ней можем двигаться только "влево" и "вправо" и попадаем в минимум очень быстро. Если переменных две, то мы уже можем "огибать" некоторые возвышенности, перемещаясь по более сложной траектории. Когда мы попадаем в минимум, производная по всем производным становится нулем, а вокруг функция только возрастает. Так вот с увеличением количества параметров вероятность того, что по всем из них больше некуда двигаться уменьшается. Если у нас функция от миллиарда параметров, то надо еще очень постараться, чтобы найти хотя-бы локальный минимум. При этом в функции появляется огромное количество почти равнозначных минимумов, и мы просто будем идти в какой-то из них.

    • @mogway791
      @mogway791 26 днів тому

      @КрасноТех спасибо за ответ!

  • @ВалКар-ш3э
    @ВалКар-ш3э 22 дні тому

    Пркатическое применение с изменением углов в графе подскажите пожалуйста.
    Интересная задача, но где и для чего ее применить.
    Спасибо!

    • @КрасноТех
      @КрасноТех  20 днів тому

      Ну это только пример, можно адаптировать под свои задачи. Например мы делам программу, в которой пользователь от руки рисует какую-то фигуру, например прямоугольник. Алгоритмом находим его углы и делаем их вершинами, чтобы выровнять используем этот алгоритм. Кажется, в corel draw что-то похожее было.

  • @bunasha
    @bunasha 26 днів тому

    Краснотех, у тебя ошибка. На 4:46 ты говоришь, что стоит задача 2-ая - как сильнее двигаться на более крутых склонах. Наоборот, чем склон круче, т.е. чем сильнее ошибка минимизируется при малейшем изменении параметров, тем меньший шаг мы должны делать, а не сильнее двигаться. А вот при плоских склонах как раз-таки нужно побольше шаги делать. И да, ты не ответил на этот вопрос. У тебя константный выбор шага изменения параметров, т.е. ты всегда двигаешься с одинаковой скоростью.
    И я вот не могу понять, объясни. Пусть у нас 2 параметра. Их значение 15 и 20. Шаг прироста 1. Чтобы вычислить градиент, мы должны сделать их 16 и 21 и высчитать ошибку, верно? А дальше? Если ошибка оказалась меньше, чем при 15 и 20, значит на 1 увеличиваем оба параметра? А что если лучше было бы лишь 1 параметр увеличить, .е. 15 на 16, а 20 не изменять? Или градиентный спуск сможет это понять? С 1 переменной логика понятна, но с 2-мя - не понимаю.

    • @newtestch
      @newtestch 25 днів тому

      Так он же сказал, что мы должны искать именно вектор к наилучшему решению из текущей позиции. То есть ты сначала замеряешь, что будет при изменении a на дельту, выбираешь лучшее изменение (то есть -1, 0 или +1), потом по b делаешь то же самое. Делаешь шаг и повторяешь процедуру, пока по обоим переменным изменение не будет 0. И ты правильно пишешь, что стоит изменять шаг при разных ситуациях и это уже будет считаться оптимизацией. То есть в зависимости от изменения loss относительно предыдущего шага мы может изменять дельту шага.

    • @КрасноТех
      @КрасноТех  25 днів тому +2

      1. Нет, мы должны быстрее двигаться на более крутых склонах. Это точно правильно, посмотрите еще раз анимацию спуска, которая сразу после кода. Там значения взяты из того, что выдал тензорфлоу спуск, т.е. его не я написал, и он как раз двигается сильнее на более крутом склоне. Тут логика такая: Если склон крутой, то мы еще где-то далеко от ответа и надо двигаться быстрее. Если очень пологий, почти плато, то нужно двигаться на очень маленький шаг, ответ уже рядом и нужно отсюда не "улететь".
      2. Вот эта подстановка чисел - это скорее про первый алгоритм поиск восхождением, он бы по честному проверял все 8 вариантов (какой изменять и куда). Градиентный спуск ничего не проверяет (я думал, это сказано достаточно явно, но видимо нужно было еще сильнее). Он использует производную функции, которая вычисляется где-то автоматически и по ней сразу понимает направление. Т.е. если там хоть 1000 параметров измерение он проводит одно, далее проводит одно измерение производной для каждого параметра (эти процессы на оптимизируются и данные проходят через нейросеть всего один раз) и мы сразу получаем численное значение ошибки и градиент.

    • @bunasha
      @bunasha 25 днів тому +1

      @@КрасноТех Я имею ввиду, после рассчета вектора градиента, как правильно изменить веса? Судя по тому, как мне ответили - делаем это по знаку каждой частной производной. Если мы получили скажем такой вектор [-5, +3, -3], то мы должны 1 параметр уменьшить на минимальный шаг, второй увеличить, а третий - уменьшить. Я правильно понимаю? Ты просто этот момент не раскрыл с наглядными примерами, как мне показалось.
      Еще вопрос, ты шаришь за обратное распространение ошибки? Интересно было бы увидеть видос на эту тему, как никак самый главный инструмент для обучения многослойных сетей.

    • @КрасноТех
      @КрасноТех  25 днів тому

      @@bunasha Просто прибавить вектор градиента к весам умноженный на learning rate, например, веса [10, 20, 30], градиент [1, -2, 0.5], lr = 0.1, тогда новые веса [10 + 0.1, 20 - 0.2, 30 + 0.05].
      Обратное распространение это просто способ найти градиент, он сам считает производные по каждому параметру применяя формулу производной сложной функции много раз.