Обратное распространение ошибки
Vložit
- čas přidán 17. 05. 2021
- Одним из ключевых этапов обучения нейронной сети является применение алгоритма обратного распространения ошибки, или backpropagation. Целью этого алгоритма является поиск градиента ошибки по всем обучаемым параметрам нашей модели. Без понимания того, как он работает, нам будет тяжело написать свой собственный алгоритм обучения нейросети. Давайте разбираться.
В этом видео мы самостоятельно выведем все необходимые формулы для реализации алгоритма обучения нейронной сети с нуля. Для обучения нейросети можно использовать градиентный спуск, а для его работы нам потребуется градиент функции потерь по всем параметрам модели (весам нейросети).
В основе метода обратного распространения ошибки лежит цепное правило (chain rule) из матанализа. Еще это называют правило дифференцирования сложной функции:
cutt.ly/mbM7WYU
В некоторых случаях нам потребуется правило дифференцирования сложной функции нескольких переменных:
cutt.ly/ebM7xpS
Меня зовут Дмитрий Коробченко, и на моём канале будет много чего интересного, так что подписывайтесь и нажимайте на колокольчик, чтобы ничего не пропустить: / @user-uy8zl7qd2e
#Нейросети #ГлубокоеОбучение #ДмитрийКоробченко #НейронныеСети #МашинноеОбучение #ИскусственныйИнтеллект #ОбратноеРаспространениеОшибки #Backprop #Градиент
Рекомендуемый порядок просмотра:
1. Нейронные сети за 10 минут: czcams.com/video/GT6imQDxqko/video.html
2. Как обучить нейронную сеть: czcams.com/video/uWd9nyn0ql8/video.html
3. Нейронная сеть на Python с нуля: czcams.com/video/xMz7XSaqdRA/video.html
4. Обратное распространение ошибки: czcams.com/video/bW4dKxtUFpg/video.html
5. Обучение нейронной сети на Python: czcams.com/video/bXGBeRzM87g/video.html
Здравствуйте можете помочь разобраться? в общем я считаю что придумал улучшенную формулу вычисления весов одного нейрона позволяющую найти веса в один такт, я не программист и не математик и формулу по понятным причинам разглашать я не могу, так как же мне разобраться и возможно извлечь из этого пользу? я не знаю. По пробую показать примерный процесс моей работы на эту тему может это даст вам возможность лучше разобраться с чем и кем вы имеете дело:
Пример обученного нейрона к которому должен прийти мой:
X1*W1=S1
+ = E1 = Это выход нейрона без смещения и без функции активации просто число
X2*W2=S2
После нахождения весов в один такт мой нейрон похож на:
X1*W3=S3
+ = E1
X2*W4=S4
веса НЕ те же но итог совпадает без ошибки, как то так. но если изменить X сы после обучения то будет расхождение в итогах, в общем W3 и W4 превратить в W1 и в W2 у меня так и не вышло конечно если не манипулировать X ми так что один из них превращается в 0 или в огромное число.
Какая годнота, жалко, что мало просмотров. Надеюсь, не забросите делать видео, потому что я уверен, что ваш канал выстрелит
К сожалению не выстрелит. Людей, стремящихся к знаниям, недостаточно много
Малое кол-во видео с 2017 года
Почти 50 тыс просмотров
Отличная лекция! Нигде не встречал такого подробного и доходчивого объяснения получения градиентов
Класс! Жду с нетерпением следующих уроков!
Ура, новый контент. Продолжайте, пожалуйста!
То, что надо! Возвращаюсь к этому курсу, когда в голове начинает властвовать хаос) все четко и по полочкам!)
Супер объяснение, спасибо. С математическим обоснованием, пошаговым выводом формул, и прочие простые и надежные вещи. Не так как на других каналах - сразу итоговый алгоритм с итоговыми формулами, а почему они такие - не объясняют.
Пожалуйста, продолжайте ваше образовательное творчество, вы very good. У вас давно не выходило новых роликов. Еще столько интересных вопросов...
Спасибо за работу
Большое спасибо, в режиме ожидания следующего видео...
Отличное объяснение 👍 Спасибо, Вы талант.
Вы просто лучший, это невероятно. Только благодаря Вам нормально и всецело понял как рассчитываются градиенты и вообще откуда какой множитель берётся. Большое спасибо!
Благодарю за отличную подачу!
спасибо за уроки!
Очень интересно. Пришлось подтянуть математику, чтобы понять всё, но зато теперь можно не просто использовать готовые библиотеки, а честно понимать, как всё работает
очень подробно и грамотно все объясняете. правда иногда нужно по 2-3 раза переслушать. лайк и ждем новых роликов. От себя прошу разобрать сверточные сети с 0. также как и этот пример
Большое спасибо!
Самое понятное видео и по делу. без воды.
то что так долго искал. Спасибо!
Видос просто супер, с первого раза не понял, полностью пересмотрел и стало намного понятнее, спасибо!
огромное спасибо автору за проделанную работу
спасибо за видео!
Отличная лекция, спасибо!
Теперь бы градиентный спуск вот так понять)
Он и был описан в этой лекции в довольном сложном виде.
Это и есть градиентный спуск xD
Наконец-то я понял, как работает обратное распространение. Я уже все пересмотрел и на английском в том числе, но все пропускают, реализацию обратного распространения, а это самое важное. Большое спасибо.
Несмотря на то, что несколько раз ловил себя на мысли "Ничерта не понимаю", перематывал пересматривал и досмотрел до конца, не все но на самое важное для меня понял. Спасибо автору за столь качественный контент, даже сложно представить сколько сил и времени было затрачено. Очень круто все рассказано, но отсутствие мат практики в течении 20 лет дает о себе знать, как же я завидую сегодняшним школьникам и абитуриентам..... радостно сознавать, что у сегодняшних детей возможностей развиваться несоизмеримо больше, чем у нас 20 лет назад, правильной дорогой идем, Товарищи (несмотря на не идеальность мировой и Российской действительности)
Видео топ! Всё что нужно для начального понимания
Это круто!
Друг мой. Я из Узбекистана. Недавно начал изучать ИИ, ГО . У вас есть дар от Бога. Вы очень мягко и понятно объясняете.
Спасибо!
Отличное объяснение! Такого контента очень мало к сожалению(
Развивайте дальше канал
В ахуях, месяц назад начал всë изучать, поэтапно всë, что не понимал изучал, пришлось вернуться к школьной математике))) к работе функций, линейная функция, парабола и всë такое, очень трудно было понимать сначала, начался ад когда я перешёл к производным, но я прошёл всë это. Спустя 100 роликов про нейросети и матанализ, миллион охуеваний со всего, наконец-то ура, я понял как работает логика нахождения градиента ошибки, дело просто в матанализе, в векторах частных производных, или просто в производных, которые показывают куда растëт функция и велечину роста в по определённому параметру. И недавно я снова решил посетить этот ролик, и вдруг, оказалось что здесь так всë подробно и разжëванно объясняется, я некоторые моменты, которые упустил из виду смог отсюда взять, спасибо!!! Жаль что забросили канал
Просто супер
Хорошее объяснение, по шагам, но надо несколько раз пересмотреть, чтобы разжевать.
Пока не совсем понятно, для чего нужен градиент по входу (dE/dx).
Для того чтобы передать его на следующий слой и рассчитать градиент уже там
сделайте отдельно серию видео для "продвинутых". Если вы работаете в Nvidia, то расскажите про cuda, про embedded-системы, про то, как внутри устроены всякие NPU/TPU и мини-устройства типа jetsoнов. Ну, или чего-нибудь интересное другое, про науку или индустрию анализа данных. Вот вам вопрос от меня: как купить geforce rtx 3060 для обучения сеток, если майнеры захватили рынок железячек? И будет ли nvidia делать карточки специально для машинного обучения, но бюджетные?
Куда это расширение с++ от нвидии. Прямо в программе можно определять функции которые будут выполняться на ускорителе. Удобно обрабатывать большие объемы данных делая над ними вычисления. Не надо городить многопоточность, она получается из коробки. Надо лиш правильно задать формат потока данных и функцию обработки (ядро). Джетсон это арм с графикой, подобно мобильным телефонам. Отличие от мобильнтков в возможности работать с разнообразным внешним хардом. Эти возможности определяются не только джетсоном но и платой в которую он вставлен.
Ура !
В интернете полно статей с кривым переводом по этой теме, которые только запутывают. А этот парень все объяснил в два счета!
Жду видео по реализации!
что означает это д?
Блин, чувак, ты открыл мне глаза, вернись пожалуйста, буду смотреть все рекламы и ставить лайки
Первый раз смотрим - ах...ем, второй раз конспектируем... Но самый кайф слушать через колонки и наблюдать как окружающие ох...вают
То чувство, когда все что звучит так или иначе знакомо, но ума не хватает скомпоновать знания, усвоить материал и применить.
Большое спасибо, думаю долго буду изучать ваши видео :)
Хотите понять нейросети, надо выбросить эту заумную фигню. Есть канал foo52 техно шаман. Там все проще и нагляднее. Без кучи формул
@@denisyegorov5109если выбросить эти кучи формул, то ты ниче не поймешь наоборот или как обезьяна будешь делать то, не зная, что и не понимать как это работает, хотя 90% прогеров так и делают, берут библиотеку и все там за них уже умные люди сделали
Дмитрий, здравствуйте! На 16:58 мы берем производную от натурального логарифма, получается 1/(выражение) и мы еще дополнительно умножаем полученное выражение на е^tk. Почему? У нас ведь это не общий множитель или что-то подобное. Когда мы взяли производную от натурального логарифма, у нас все, что было в выражении, ушло в знаменатель. Откуда взялось еще и e^tk? Спасибо.
Здравствуйте. Здесь надо использовать правило дифференцирования сложной функции. (f(g))' = f'(g) * g'. То есть та производная будет равна [1 / (выражение)] умножить на производную от (выражения). То есть умножить на производную от суммы экспонент. А в такой производной все слагаемые занулятся кроме одного -- с индексом k. И производная от экспоненты равна той же самой экспоненте.
Здесь Вы гораздо энергичнее, чем в Skillbox ;)
Хорошее видео, спасибо автору, лайк заслужен. Понял и разобрал для себя 99% из просмотренного, единственное, что не понял, как мы получаем значения b и w из суммы произведений входных данных умноженный на вес w и b.... хотя.... пока пишу комментарий начинаю понимать, что мы бежим по сети с рандомно заданными весами и смещениями, и они получается нам известны... а может и нет, а может и да... пойду смотреть следующее видео =)
Я не часто пишу хволебные коментарии, но это просто замечательный и подробный ролик по данной теме. Как же я рад что я уже в 9 классе и вникал в математику. Теперь благодаря этому я понимаю половину того что вы рассказали, а может даже больше.
А я вот учусь в 9 классе и нихуя не понимаю из этого
Дмитрий, здравствуйте. Когда выйдет видео про обновление весов при обучении?
Можете выпустить видео на тему технологии нейролинк? И как эта технология будет работать с ИИ. Хотел бы углубиться в эту тему.
Ай, мозг сорвал
Каковы ограничения на функцию ошибки? Она должна быть метрикой?
10.23 - может поэлементное умножение имеется ввиду?
"Е" на 3ей минуте, это суммарная квардратичная ошибка?
скажите, пожалуйста, для чего нужна функция активации и нелинейность как таковая? спасибо
Если не использовать нелинейные функции активации, то мы ни за что не сможем приблизить нелинейную зависимость, наша нейросеть будет просто линейной функцией и приблизить она сможет разве что прямую (гиперплоскость). А это, в свою очередь, просто делает сеть бесполезной
Умножение на матрицу и прибавление вектора - это линейная операция (линейное преобразование). Так выглядел бы слой без функции активации. Два подряд линейных преобразования эквивалентны ОДНОМУ (какому-то другому) ЛИНЕЙНОМУ преобразованию. Чтоб такого не было, необходимо МЕЖДУ двумя линейными преобразованиями вставить НЕЛИНЕЙНОЕ преобразование (в нашем случае - функцию активации). Более формальный пример: представьте, что функция активации линейна (это функция вида F(x) = ax+c, то есть её график - прямая линия), или её совсем нет (a=1, c=0). Теперь, рассмотрим пару соседних слоёв нейросети: первый: h = F(Wx + b); второй: y = F(Vh + d). W и V - матрицы, b и d - вектора смещений. Если подставить одно в другое, получим y = F(V(F(Wx + b) + d). Если бы F не было, или если бы это была линейная функция [F(x) = ax+c], то можно было бы раскрыть скобки, привести подобные и получить, что y = Tx + s, где T - какая-то другая матрица, а s - какой-то другой вектор. Это значит, что два слоя эквивалентны некоторой однослойной нейросети. А однослойные сети могут работать только с очень простыми данными.
@@user-uy8zl7qd2e Отдельно стоит заметить, что линейная функция активации означает, что градиент постоянен и никак не связан с весом. Т.е. у линейной функции нет такой зависимости, что чем больше ошибка, тем больше градиент и тем быстрее спускаемся. А у нелинейной - есть.
Без функции активации нейронная сеть станет просто логистической регрессией
можно на цифрах реальных посмотреть пример или же на в Numpy
Как раз про это будет следующее видео. Продолжение вот этого: czcams.com/video/xMz7XSaqdRA/video.html
Моя нейронная сеть путает iris-versicolor и iris-virginica. Я использовал смещения, но это не помогло. Почему это могло произойти?
Она переобучилась
Теория - это хорошо. Но хочется посмотреть ее реализацию (метод обратного распространения) также просто и понятно на уровне кода. На уровне кода материала мало и он различается. Ясности нет.
Даже эту теорию можно было подать проще, в инете есть это все в более простом виде. На уровне кода с описанием то же есть. На numpy это буквально 10 строк кода.
нормально
Не знаю, смогу ли разобраться. Если формула с первого видео понятна, то здесь вообще ничего не понимаю. Тупо математика. Это тоже самое что в Википедии. Как мне с формулы вывести конкретно вес для нейронки после ошибки, я так и не понял. Попробую еще раз посмотреть. Может что-то упустил. Или хотя-бы на готовый код посмотреть, быстрей разберусь чем эти математические уравнения.
Извините, не понял что такое омега в функции E()
Ултра мега хорош
Видео интересное, спасибо. Есть один прикладной вопрос, как можно задать химическую формулу как входной параметр?
Попробуй присвоить каждому элементу число (номер эл из ПТМ). Коэффы точно так же делаешь. После обучения сеть может выдавать формулы используя некоторый разделитель, для определения границы узла элемент-коэфф. Через грамматику переводишь это все обратно в буквы где надо. Почитай про Backus-Naur forms. Это тебе поможет в освоении грамматик. Тема нетривиальная, но интересная. Удачи!
Саму формулу обычно не задают как параметр, скорее используют дескрипторы химические в качестве матрицы X и какие-то таргетные свойства в векторе Y. Саму молекулу можно разными способами кодировать, например SMILES, Mol2 форматы
16 мин 56 сек. Объясните, как вы ситуацию для самого правого слоя обобщили для всех остальных слоёв? Просто:
1. Именно на этом самом правом слое мы не применяли функцию Relu, а значит обобщать ситуацию вроде нельзя...
2. Чтобы обновить значения W и b на некотором k-ом слое вам получается надо знать y[k]? Тогда не совсем понимаю откуда взять y[k] на самом левом слое например...
17мин 2сек, производная внутренней функции, внутренняя функция - это сумма. Производная от суммы = сумме производных, а почему у вас там просто е^tk...
17 мин 23 сек, почему когда вы ввели эту переменную k и взяли производную, в знаменателе над е осталось j, а в числителе осталось k?!
Не совсем понимаю фразу на 19:14 "функции активации нет", а потом все равно применяем softmax то есть она все таки есть? Если она действительно есть, то при обратном распространении dE/dt_2 = dE/dz * dz/dt_2 = (z - y) * (diag (S(t_2)) - S.T(t_2) * S(t_2)). Вторая скобка это производная softmax
Это не функция активации, а, если так можно выразится, нормализация полученных данных для сравнения
Ничего не понятно, но было очень интересно
Что прикольно, то это то, что начинать бы объяснение было бы нагляднее с конца.. ))))
О, скьюб на столе!
дожились
Я так понимаю, при самом первом ПРЯМОМ прохождении графа мы берем абсолютно случайные веса?
Да
Почему W1 W2 матрицы? Просто я думал что 1 нейрон это одно число, следовательно на 1 слой 1 вектор. Что отождествляют столбцы и строки матрицы? (да да даже на самое подробное объяснение что есть на ютубе найдутся те кому оно не понятно)
Ставь лайк если ты тоже нихуя не понимаешь, но почему то тебе очень интересно!
Из этого видео я понял две вещи, то что я тупой и то что моя нееросеть останется необразованной🥲
Сижу пытаюсь делать лабу по сетям... это кошмаар какой-то, ничего не понятно
Так стоп)))
Наверное я начал не с того места постигать нейро сети. так то я системный аналитик . и опыта написания кода у меня нет.
Может прежде чем подходить к нейро сетям нужно(к примеру):
1. Постичь основы статистики
2. достаточно понимать Основы теории вероятностей
3 . математические алгоритмы - классические
?
или иное
4:37 "пусть откуда-то дано dE по dH в численном виде"
5:48 "ну что давайте все это выводить по очереди"
5:53 "при условии что dE по dH нам дан"
Ты прикалываешься? Прикольчики любишь, да? Приколдесики пулять, шутеечки шутить? Я РАЗРАБОТЧИК С 7 ЛЕТНИМ СТАЖЕМ И Я ТЕБЯ НЕ ПОНИМАЮ, АЛО, МОЖНО БОЛЕЕ ПОНЯТНО?))))
Что такое вектор b
сдвиг на константу после умножения. в первом ролике вводится, вроде
В топ
Дмитрий, вот такой вопрос, нигде не могу найти ответ... Я математик, только начинаю изучать ML и NN.
Почему вообще применяется такой многоиттерационный алгоритм? Почему, вместо backpropogation, - не вычисляется просто обратная матрица [W]+[B] линейно-алгебраическим способом, из уравнения [W][X1]+[B] = [Y1], где размерность пробной выборки из набора обучающих данных [Y1] равно размерности матрицы весов [W], чтобы уравнение имело однозначное решение? Потом, найдя решения [W1], [W2], [W3],... для разных случайный под-наборов обучающих данных, просто усреднить почленно w_ik всех [W1], [W2], [W3], т.о. получив максимально приближенное ко всем поднаборам решение ? Так не сработает, или просто нельзя выкидывать функции активации из архитектуры (их придется выкинуть для линейного решения уравнения) ?
Если вы хотите всех напугать или запутать начинайте все объяснять с дифференцирования…. На самом деле если отбросить все навороты математического языка то прямое и обратное распространение до смешного понятное и простое. Просто оно сложно и громоздко доя восприятия записывается на мат языке. Кому интересно можете поискать в интернете статьи или ролики где все то же самое рассказано боле простым языком. По факту все сводится к серии умножений матриц на вектора и вектора на вектор поэлементно.
очень приятно слушать, все очень круто снято, но расстраивает что автор как и многие програмисты не знает разницы между тензором и матрицей
ля, сколько формул, чтоб прийти к z-y
•_• я ваще не понял, что такое d? Почему мы к d приписываем w, E, W, b, t? Почему вообще мы делим d... на d...? Полегче бы... А то смотрю, а там и видно только d.../d...= d.../d... + ... * ...
Одни только d. Я потерял смысл слова градиент, когда в мире появились градиенты веса, t и еще чегото? Я слышал токо о просто градиенте.
Это не изложение мысли, идеи, это просто чтение формул, которые вы подглядели где-то и перерисовали и прочитали. Так? А знаете как Ньютон сформулировал закон всемирного тяготения: "ф равно ж на м на м и на р с верхним индексом два".
Это чтение сценария видео. В нейросети без высшей математики не советую лезть
Прошу Вас использовать в следующих видео фреймворк PyTorch
это надо нехило матанализ изучить предварительно чтоб хоть чтото понимать из происходящего. Мне понятны только ровно первые три минуты ролика. Дальше тёмный лес
Ясно, в 10м классе это тяжело понять, но я пытаюсь)))
На какой минуте ваш мозг вошёл в режим аварийного отключения?
Уля ля
А я думал сопромат это тяжело...
здравствуйте программисты из мгсу
Да уж, всё равно это всё поверхностное объяснение. Ищем градиент, а с чего вообще? И с чего вообще решили, что куча уравнений может вычислять то, что нам надо в реальной жизни. Блин, я учился на ВМК как раз на кафедре численных методов, где были курсы и по нейросетям, и по апроксимациям всяким в гильбертовых пространствах. Как жалко, что я не учился, а играл в Варкрафт. Но зато сейчас появилось желание всё это понять, хоть уже и возраст ближе к старому.
Наверное не стоило для демонстрации обратного распространения дополнительно на#евертить таких функций активации.. Теперь у всех мозги загажены кучей ненужных производных а в чем смысл обратного распространения понять уже никто не надеется...
Я знаю что такое функция, я знаю, что такое производная, но я не понимаю, что за д е по д т. Или как там... закорючка д делить на закорючка е. Какое е, какое т, почему они делятся... Вам следует научиться записывать свои мысли более понятно, а не в виде этих иероглифов. И тогда люди к вам подтянутся.
Я понял что ничего не понял
Без визуального представления, ничего не понятно.
Скажите!!!!Это я такой тупой 8-мом классе, что я почти не чего не понимаю
Tckb rbjvbenbj ELbfkbcm -ЕслиКиомиутио Удиаиось Тьфуты -аКиомутио -Ние Удиолиось -Тиооо... 1.33.с.
такие громоздкие вычисления лишь ради того, чтобы показать, что ошибка на нейроне равна выходному результату минус искомое значение (z-y), а ошибка на связи равна ошибке на нейроне, умноженной на соответствующий входной нейрон. Т.е. Е1=z1-y1, Ew11 = E1*x1
ы
Это видимо для теории нужно )) хотя для меня такое непонятно. Уже запутался что такое градиент, обратное распространение ошибки и производна, градиентный спуск? Хотя думаю все значительно проще.
нихуя не понятно
Блин чел как так можно объяснять? Я вот не математик, а обычный человек и я ничего не понял из того, что ты тут рассказал, я в других видео глядя понял как хотя бы общую ошибку вычислить, глядя на тебя я даже того не понял...
Потому что он всё видео говорил "х" в "ж", "п" на "л", "г" из "ж". Нехер делать таким деятелям на ютабах.
потому что чтобы реально понять нейросети нужно понимать математику
@@Fakster_Bakster Я ничего не понимаю в математике, но разжуйте мне достаточно сложную тему и в рот положите. Автор видео реально постарался и объяснил достаточно простым языком. Не поняли? Хоть попытайтесь сначала разобраться в основах матанала и аналитической геометрии, прежде чем писать этот бред)
@@Fakster_Baksterесли ты не разбираешься в базовой математике, это не значит, что автор плохо объясняет
Нормальное видео, очень пригодилось при построении программы первой моей нейросети с нуля, без сторонних библиотек, но надо хорошо понимать понятие производных, дифференцирования сложной функции нескольких переменных, которое он неоднократно упоминал и правило цепи. Благодарю за труд.
"Е" по "а", "в" на "е", "ю" под "я", "х" в "ж". Это всё что я понял. А вы пробовали говорить по-русски?
Все равно всё очень сложно. Гуманитарий не понимает. Что за Д? И от куда она взялась? Почему приходится самому додумывать что такое W11 и W21? И где она располагается. Надо было прямо над линиями писать. Ведь школу закончили многие давно. И не понятно что вектор, это линия по диагонали связующая между входным данным и нейроном. Данная инфа подходит только для тех, кто хорошо знает матчасть, и технарям. А тем кто забыл математику именно функции, просто мозг дёргает от каждого слово, как током.
Ну да, много не понятного. Но это не вина автора. Садитесь и учите теорию, сам вот нагоняю. И если вы решили сесть за нейросети, то нужно понимать, что это занятие совсем не для гуманитария
@@TheBoxGameDrop нашел одно видео, очень четко разжёвано и понятно. Осталось только с обучением у его на канале найти. Суть в том, что бы разобраться, именно в начале. Потом все самому будет понятно, по логике, свои идеи реализовывать.
@@ezelzip2309 Да именно так, я тоже только учу нейросети, но как я понял, самое тяжелое в начале )
очень торопитесь когда говорите это же технический материал нужно наоборот очень медленно говорить и вы суть не обьясняете а подробности вычислений и постоянно де по дэ тэ де по д аш все эти соотношения очень легко между друг другом путаются так что жирный дизлайк впаял ну и что что графика хорошая? нахер графа не нужна если обьяснять не умеете
Я ещё на производной сломался