Back propagation - алгоритм обучения по методу обратного распространения | #3 нейросети на Python

  Рет қаралды 104,495

selfedu

selfedu

4 жыл бұрын

Описание алгоритма обратного распространения ошибки (back propagation). Пример его реализации на Python для обучения простой нейронной сети.
Телеграм-канал: t.me/machine_learning_selfedu
Инфо-сайт: proproprogs.ru
lesson 3. Back propagation.py: github.com/selfedu-rus/neural...
О градиентном спуске: • ЦОС Python #2: Метод г...

Пікірлер: 304
@iyashnaider
@iyashnaider Жыл бұрын
Лучший обучающий канал по нейронкам на всем русскоязычном ютубе! Всё максимально понятно и интересно. Спасибо большое за такой контент
@gorguliastone
@gorguliastone 3 жыл бұрын
Почему так мало просмотров?! Вы чудесно, четко, понятно объясняете. А самое главное - у вас хорошо поставленная речь без паразитов, и приятный тембр.
@rpuropu
@rpuropu 3 жыл бұрын
Поддержу оратора) мне 37 лет и даже мне понятно)
@user-hd3ov5lj1u
@user-hd3ov5lj1u 2 жыл бұрын
@@rpuropu мне 14, даже мне понятно
@noname-hw3bb
@noname-hw3bb 2 жыл бұрын
умных людей будет слишком много)
@user-lc9jk4ww8o
@user-lc9jk4ww8o 2 жыл бұрын
Вся проблема в том, что Ютубу не нравится технический контент. По большей степени я подписан на видео такого направления, но Ютуб предлагает посмотреть всякую шляпу.
@maxsmail1471
@maxsmail1471 2 жыл бұрын
Давайте честно признаемся, даже те кто в вузе это учат ничего не учат, а что говорить про самообучение
@nadyamoscow2461
@nadyamoscow2461 Жыл бұрын
Огромное спасибо за урок. Думала, что до нейронок не доберусь никогда. Когда начинала по вашим видео учить питон, этот плейлист казался порождением инопланетного разума. В итоге я здесь, и, как всегда, восхищаюсь вашим даром фундаментально и понятно объяснять сложный материал.
@evgenykonovalov4870
@evgenykonovalov4870 Жыл бұрын
Очень хорошая подача материала, прочитал пару книг по нейронным сетям для ознакомления с предметной областью. Текущий курс обьясняет все принципы нейронки без сложных мат деталей , что помогает структурировать в голове информацию и быстрее двигаться к поставленной цели. Спасибо автору огромное !
@Cygni7
@Cygni7 10 ай бұрын
Когда автор заговорил про производные, возникло сильное желание выключить видео, потому как не знал, как их применить для такой функции, хорошо что автор все правильно сделал. (Хотя производные - одна их моих любимых тем в математике))) Плейлист меня очень заинтересовал, не догадывался, как работают нейросети и тем более, как их написать. Думаю потом ещё изучу материалы, связанные с python, уверен, найду что-то новое. Спасибо за ваши видео и удачи вам в продвижении канала!
@ruslriz8949
@ruslriz8949 2 жыл бұрын
Сергей у Вас замечательные видео! Вы очень талантливый преподаватель. Просто, понятно и по существу. По этому видео - небольшая опечатка в программе ( выборка, последняя строка ) . Если подправить, почти идеальные результаты...
@selfedu_rus
@selfedu_rus 2 жыл бұрын
спасибо! а что там в выборке, последняя строка (1, 1, 1, -1)
@girrra1233
@girrra1233 Жыл бұрын
@@selfedu_rus Подскажите, а если у меня выходной нейрон не один а несколько их? Т.е. у меня выход сети это вектор, то как тогда быть?
@ShurikProg
@ShurikProg 11 ай бұрын
В прошлых видео было. Если красивый с домом, то пусть хоть хэви металл играет
@yurinikitin4942
@yurinikitin4942 Жыл бұрын
Огромнейшее спасибо! Очень долго не мог понять, как работает обратное распространение ошибки... голова кипела от математики.Теперь понял!
@user-ux5je8jk3t
@user-ux5je8jk3t Жыл бұрын
Добрый день, Сергей! Решил еше раз пройти Ваш курс по данным видео. Обнаружил ряд неточностей: 1. В Функции гиперболического тангенса отсутствует показатель степени 2 в экспоненте: должно быть 2/(1 + np.exp(-x*2)) -1; 2. На мой взгляд функция производной от гиперболического тангенса должна быть другой: я взял такую 4/np.power((np.exp(x)+np.exp(-x)), 2) ; 3. В обучающей выборке последняя строчка должна быть: (1, 1, 1, 1)]. Т.е. когда у мальчика есть квартира, он симпатичный, но при этом рок-гитарист, он все равно симпатичен девочке. Тем более, в самом начале видео у Вас приведён такой расклад. Изменив программу я получил более стабильные результаты обучения и весовых коэффициентов. До этого они очень сильно "плавали". На видео тоже видно, что по результатам на первой выборке получилось значение 0.025, хотя должно быть ближе к -1. Я получаю у себя такие значения (на модернизированной программе): Выходное значение НС: -0.9999942675244059 => -1 Выходное значение НС: 0.9999942461944535 => 1 Выходное значение НС: -0.9999942080082161 => -1 Выходное значение НС: 0.9999942702756277 => 1 Выходное значение НС: -0.9999942702756276 => -1 Выходное значение НС: 0.999994208008216 => 1 Выходное значение НС: -0.9999942461944537 => -1 Выходное значение НС: 0.999994267524406 => 1
@selfedu_rus
@selfedu_rus Жыл бұрын
Спасибо! 1. В общем случае у гиперболического тангенса используется параметр alfa > 0, который умножается на x. Я просто взял его 1, чтобы не перегружать материал. 2. Производная, да неверно записана, но в видео я ее ручками поправил. 3. Здесь полностью согласен, недоглядел! ))
@mistrebrown7642
@mistrebrown7642 3 жыл бұрын
Большущее вам спасибо за ролики!
@user-sr6dn7os5f
@user-sr6dn7os5f Жыл бұрын
Автор спасибо тебе ты единственный кто обьяснил достаточно понятно
@user-cc4vi6vz6t
@user-cc4vi6vz6t 3 жыл бұрын
Отлично. Всё сжато и без лишней информации. Впервые, мне в конце видео, пришлось замедлить воспроизведение.
@user-cs1bx6bw4g
@user-cs1bx6bw4g 9 ай бұрын
"Не буду делать математическую выкладку... " - после этих слов я свернул видео и поставил лайк. Спасибо за это видео!
@tysprogramist
@tysprogramist Жыл бұрын
мне 11 я низнаю других других преподователей такого уровня в 4 классе но очень здорово правда чуть ли не каждый второй термин смотрю в яндексе чтобы понимать
@nikkapusta838
@nikkapusta838 8 ай бұрын
В 11 лет надо пробовать сигареты курить, а не ерундой заниматься
@user-mu5cj4hv9l
@user-mu5cj4hv9l 7 ай бұрын
@@nikkapusta838 «гениальный» комент
@user-ic4cj1yd5k
@user-ic4cj1yd5k 2 ай бұрын
А мне 10 пропустил 1 видео про перспетрон и смотрю это
@user-nc3xf4pp1p
@user-nc3xf4pp1p 2 жыл бұрын
на 5:27 у логистической функции в знаменателе у экспоненты должен быть показатель с минусом, производная получается другая, да и в целом, постройте график, он не соответствует тому что в видео показано. А так видео очень качественное, все понятно, спасибо!
@selfedu_rus
@selfedu_rus 2 жыл бұрын
да, спасибо, это опечатка, недосмотрел
@lackevil3730
@lackevil3730 4 жыл бұрын
С меня лайк, подписка и колокол, за все ваши уроки. Спасибо!
@mrzxccxz
@mrzxccxz 2 жыл бұрын
Очень качественное и понятное преподавание.
@user-oq4si8nh9h
@user-oq4si8nh9h 3 жыл бұрын
ты лучший! я наконец-то понял после 3 мучительных дней.
@mr.brownstone8201
@mr.brownstone8201 2 жыл бұрын
Очень хорошее объяснение. Спасибо. Прохожу курс по нейросетям, иногда некоторые вещи не улавливаются сразу, а это видео отлично проясняет
@NONAME-wb7fv
@NONAME-wb7fv Жыл бұрын
А что за курс?
@mr.brownstone8201
@mr.brownstone8201 Жыл бұрын
@@NONAME-wb7fv уже не прохожу) От Тинькофф был DL
@vicentedeleon1382
@vicentedeleon1382 2 жыл бұрын
Шикарное изложение, ясное и логичное! Спасибо большое!
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Жыл бұрын
Благодарю! Идельно!! 🔥🔥🔥 Высший пилотаж!
@andreibeliak9725
@andreibeliak9725 Жыл бұрын
Спасибо, очень круто сделано, всё понятно.
@Sunny-bz9wp
@Sunny-bz9wp 2 жыл бұрын
Отлично и очень наглядно объяснили! Спасибо большое, наконец поняла алгоритм!)
@klimchegg
@klimchegg 2 жыл бұрын
Очень понятный и полезный урок
@leomysky
@leomysky 3 жыл бұрын
Просто великолепно, спасибо огромное!
@user-st4ih8cu6l
@user-st4ih8cu6l 3 ай бұрын
Благодарю вас за вашу работу!!!!
@THG6196
@THG6196 4 жыл бұрын
Больше спасибо за труд.👍👍👍 Очень хочется все понять. 😞😞😞 Если можно, обученные данные где и как сохранить, и как после использовать.
@pavel5878
@pavel5878 3 жыл бұрын
офигеть, жму руку!
@user-kb8mr3cb8q
@user-kb8mr3cb8q Жыл бұрын
Спасибо за урок
@grigogiyreznichenko2033
@grigogiyreznichenko2033 2 жыл бұрын
а можно рассказать про то как векторно-матричное дифференцирование происходит для бэкпропа? Не искать же частные производные по элементам...
@DaniilMusin
@DaniilMusin 3 жыл бұрын
очень круто!
@Dimofey
@Dimofey Жыл бұрын
Возможно я много требую, но было бы неплохо в последнем примере "в живую" показать, как там меняются числа, так было бы проще обучить нейронку, которая у меня в голове😆
@n-em3gt
@n-em3gt 4 ай бұрын
У меня два вопроса 1 когда мы складываем два произведения веса и локального градиента на втором слое не получится ли слишком большой локальный градиент? Может лучше было бы найти среднее арифметическое? 2 обязательно производить коррекцию весов сразу после вычисления их локальных градиентов, или можно сначала вычислить все локальные градиенты и на всех весах сразу произвести коррекцию? Просто после коррекции веса изменится и значение локального градиента на следующем с конца слое и коррекция возможно будет неверная. Либо допускаются оба варианта?
@user-iz9sj1nn5q
@user-iz9sj1nn5q Ай бұрын
1:31 2:58 3:58 обучение (корректировка весов) 4:17
@user-ze6mw6fr2g
@user-ze6mw6fr2g 10 ай бұрын
1) Backpropagation Algorithm, 5.06: логистическая функция (sigmoid) должна быть f(x) = 1 / (1 + e^(-x)) 2) Backpropagation Algorithm, 14.16: нейронная сеть обучилась, у нас нет никаких ошибок... А как насчет самого первого выходного значения?
@romandeveloper7720
@romandeveloper7720 4 ай бұрын
фух) а то я сижу, голову ломаю, почему у меня производная не равняется fx * (1-fx) ))
@alexanderkomarskiy9451
@alexanderkomarskiy9451 2 жыл бұрын
Почему 2 лайка поставить нельзя)!? Спасибо, классное объяснение!
@FundLikVis
@FundLikVis 7 ай бұрын
хехе, помню где-то год назад смотрел это видео и ничего не понял. Теперь, через месяцев эдак 10 я смотрю это видео и лишь одно в голову лезет: "Боже, спасибо, как же он легко объясняет вещи"
@abz.8951
@abz.8951 2 жыл бұрын
Спасибо большое за урок! Всё понятно, кроме одной вещи, надеюсь кто-нибудь сможет мне объяснить. Какова роль выходного сигнала в формуле на 6:37 (вычисление нового значения веса) ? Если роль шага сходимости это именно сдвиг, а градиента ( и закравшейся внутрь него ошибки) в направлении сдвига, то что нам даёт выходной сигнал? Какая-то корректировка сдвига? После того как я застрял на этом, я посмотрел урок по градиентному спуску, в нём мы позволили себе даже нормировать градиент, тем самым показав, что значение имеет лишь его знак. Если выходной сигнал влияет лишь на сдвиг, нельзя ли избавиться от выходного сигнала в формуле и оставить всё на шаг сходимости? Ведь таким образом выходной сигнал и ненормированный градиент создают шум, который неочевидным образом может подменить значение шага сходимости. (под подменить я имею ввиду, что мы указали например 0.01, а на деле получилось 0.28, это будет мешать, например, нашему творческому подбору следующих шагов сходимости). Заранее спасибо!
@nadyamoscow2461
@nadyamoscow2461 Жыл бұрын
Если я правильно понимаю, новые веса будут использоваться на другой итерации. А полученные на ней веса - еще на одной итерации. В итоге, из множества итераций ( а у нас их четко заданное количество) будет выбрана та, чьи веса дают наименьшую ошибку. То есть, сеть научится ошибаться по минимуму.
@user-bj9bf8jn9h
@user-bj9bf8jn9h 8 ай бұрын
Восторг!
@horseman3253
@horseman3253 3 жыл бұрын
написал relu функцию активации, и тоже сработало, причем намного быстрее
@user-nj1nd6ec4e
@user-nj1nd6ec4e Жыл бұрын
6:34 рассмторим конечный слой и связть f21*w_11 = y. Если рассчитать так называемый локальный градиент для w_11, то будет y(1 - y) * f_21. То есть f_21 это часть локального градиента, а в формуле для обновления веса она указана как просто выход прошлого слоя и стоит отдельно от локального градиента, так ли должно быть? Опирался на понятие локального градиента(изменения функции y от веса w) от стэнфорского определения данного в лекции№4 от 2016 года, зима
@mrzxccxz
@mrzxccxz 2 жыл бұрын
Пожалуйста скиньте ссылку на видео или другие материалы по выражению производной как в этом видео
@ISAWER1
@ISAWER1 10 ай бұрын
лайк и комментарий в поддержку канала.
@vitaliyhusti
@vitaliyhusti 2 жыл бұрын
Большое спасибо за урок! А не подскажешь, какие разделы математики учить, чтобы глубже разобраться с нейронкой?)
@selfedu_rus
@selfedu_rus 2 жыл бұрын
по сути, всю вышку, особенно теорию вероятностей и мат статистику
@vitaliyhusti
@vitaliyhusti 2 жыл бұрын
@@selfedu_rus Понял, спасибо!)
@bocik2854
@bocik2854 3 жыл бұрын
Спасибо!)))))
@Ventallica
@Ventallica 5 ай бұрын
Вы даёте индивидуальные уроки?
@youko3795
@youko3795 2 жыл бұрын
Спасибо за крутой материал! А можете пожалуйста объяснить момент когда мы прогоняем градиенты прошлых слоев на новые, почему их просто не вычислять как на первом этапе по формуле e*f’(v)?
@youko3795
@youko3795 2 жыл бұрын
А, здесь же нет целевого значения d на других слоях, возможно поэтому
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@youko3795 это вопрос типа, почему производная x^2 = 2x, ну вот так )) если все математически расписать и вычислить производную по слоям, как производную сложной функции, то именно так и получается - чистая математика
@yourzorge
@yourzorge 2 жыл бұрын
Хороший урок. А если добавить еще один слой нейронов, т.е. чтобы было три слоя взвешенных связей, какой будет код для обновления весов этих промежуточных связей?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Ну просто добавить математику для этого нового слоя и все. Там по аналогии делается.
@pasha5584
@pasha5584 Жыл бұрын
Пошла жара :)
@user-zg2tl5pn8x
@user-zg2tl5pn8x Жыл бұрын
У меня есть вопрос. Гиперболический тангенс почему он именно такой?
@maxsmail1471
@maxsmail1471 2 жыл бұрын
Понимаю что зачистил, но ни у кого не было такой проблемы что нейронка при любых обстоятельствах выдает одно и тоже значение, может это какая-то ошибка в логике обучения, или в количестве невидимых слоев? Скажу сразу, делаю на С#, данный код мне не подходит немножко
@GuNStaRia
@GuNStaRia Жыл бұрын
Подскажите, когда у нас на выходе не один нейрон, а несколько, то мы вычисляем дельту для каждого, как дельта = (значение - ожидаемое) * значение * (1-значение) или же как и для скрытых слоёв мы здесь должны как-то просуммировать ошибку для всего слоя типа Е = е31 + е32 + ... + е3х?
@selfedu_rus
@selfedu_rus Жыл бұрын
для каждого, а затем, все абсолютно также
@user-or2gv8zf4l
@user-or2gv8zf4l 2 жыл бұрын
Здравствуйте! Хорошее объяснение. Но у меня все же возник один вопрос: вычисление локального градиента следующего слоя с конца производится уже по обновленным весовым связам первого слоя с конца или по не обновлённым ?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Да, хороший вопрос. Реально, можно и так и так, на результат сильно не повлияет. Чисто математически, нужно брать исходные (не измененные веса).
@monacci
@monacci 2 жыл бұрын
@@selfedu_rus спасибо
@user-vs2nn1ug1l
@user-vs2nn1ug1l Жыл бұрын
важно знать "как правильно" и действительно, особо не на что не повлияло :)
@annaponomarova3472
@annaponomarova3472 3 жыл бұрын
спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@user-jt1gj6ex3g
@user-jt1gj6ex3g Жыл бұрын
А почему используется минус в формуле при прогонке весов?
@user-ue8bh7tj5k
@user-ue8bh7tj5k 3 жыл бұрын
У меня вопрос на 8:58. Сказано, что т.к. у нас два выхода - мы сначала считаем взвешенную сумму входных нейронов. Я так понимаю, взвешенная сумма считается когда количество входных нейронов меньше количества нейронов на скрытом слое? Или взвешенная сумма входных нейронов считается всегда, независимо от количества входных нейронов? Надеюсь понятно объяснил. p.s. материал дико крутой. В ру-сегменте довольно мало такого контента
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Да, запутанно немного написали. Все просто, если у нейрона более одного выхода (несколько выходных связей), то у каждой связи будет свой вес. Мы суммируем локальные градиенты от следующего слоя (идем назад) с учетом весов выходных связей. В анимации это как раз и показано.
@user-hr8vo2jy5c
@user-hr8vo2jy5c Жыл бұрын
все очень классно, но проблема в том, что я еще ничего не знаю про производную и не понял часть видео
@leylamehtiyeva6451
@leylamehtiyeva6451 Жыл бұрын
Добрый день! Возник вопрос на моменте 8:03 Мы умножаем локальный градиент на входящие значения связи, которые мы уже подкорректировали ранее? Или же это первоначальные значения w^3_11, w^3_12 ?
@selfedu_rus
@selfedu_rus Жыл бұрын
первоначальные (не измененные)
@user-of3pm6oi1m
@user-of3pm6oi1m 2 жыл бұрын
А почему на 4:24 мы находим локальный градиент, используя производную в точке Vout, а в коде в точке Y? Я вот так и не понял, в какой точке производную брать. В точке, равной входной сумме в нейрон, либо в точке, равной выходному значению нейрона?
@user-of3pm6oi1m
@user-of3pm6oi1m 2 жыл бұрын
А, видимо я понял. Я подумал, что в коде именно производная tahn, а там какая-то другая формула
@linping4473
@linping4473 10 ай бұрын
Хотелось бы подробный вывод формул
@selfedu_rus
@selfedu_rus 10 ай бұрын
В курсе "Машинное обучение" на этом канале (в последних видео)
@linping4473
@linping4473 10 ай бұрын
@@selfedu_rus спасибо
@vdvorezlaya
@vdvorezlaya 8 ай бұрын
kzbin.info/www/bejne/qIHCnGuZpdiBjbs
@Blade_Ruiner
@Blade_Ruiner Жыл бұрын
Все уроки по обратной ошибке поделились на два лагеря: у одних ошибка - это "Что получилось" минус "Что ожидалось", у других - наоборот. Приходится работать с двумя вариантами и долгими ночами искать верный.
@selfedu_rus
@selfedu_rus Жыл бұрын
математическая основа здесь: kzbin.info/www/bejne/rHSvZ3hsbdtpgpY
@jackpraid7710
@jackpraid7710 2 жыл бұрын
Я весь интернет перелазил, и ничего приспособленного к восприятию не нашёл, и тут я решил поискать в ютубе...
@ShurikProg
@ShurikProg 4 ай бұрын
Любопытно, что если взять набор epoch = [(1,1,1), (0,0,0), (1,0,1), (0,1,1)] как операцию ИЛИ - нормально. Потом как И - в последних двух поменять последние единицы на нули - нормально, а XOR - никак. epoch = [(1,1,1), (0,0,1), (1,0,0), (0,1,0)] В коде предполагал, что входов 2, соответственно
@Pr.A.M.
@Pr.A.M. 3 жыл бұрын
Здравствуйте, а где можно книги скачать для чайников по phyton? Подскажите пожалуйста
@selfedu_rus
@selfedu_rus 3 жыл бұрын
вот прям хорошую книжку сложно подсказать, не встречал
@Pr.A.M.
@Pr.A.M. 3 жыл бұрын
А каким образом вы учились
@cnota69
@cnota69 3 жыл бұрын
@@Pr.A.M. Я встречал книгу "Укус питона" (англ. "The byte of python"), вроде хорошая книга, я её для шпор использовал, если что-то забывал
@darkwingduck3152
@darkwingduck3152 2 жыл бұрын
Книгу не подскажу, но знаю просто замечательный курс "ленивый питон", тут же, в youtube.
@user-rm7fh4qo4b
@user-rm7fh4qo4b 2 жыл бұрын
Что такое производная функции активации?
@torbokovsanat
@torbokovsanat 3 жыл бұрын
подскажите пожалуйсто, почему на моменте 11:42 в коде питона говориться что 2/(1 + np.exp(-x)) - 1 это гиперболический тангенс ? мне кажеться что это сигмоид смещенный по оси Y вних на 1 , может я ошибаюсь ?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Это и есть частный вариант гиперболического тангенса
@torbokovsanat
@torbokovsanat 3 жыл бұрын
@@selfedu_rus спасибо за пояснение, Сергей !!!
@user-or2gv8zf4l
@user-or2gv8zf4l Жыл бұрын
Добрый вечер, уважаемый Сергей! Момент: у вас обучение сети идет по batch и для каждой обучающей пары у вас считаются свои градиенты и back pass. Вопросы: 1) нельзя ли для всех пар обучающей выборки считать один усредненный градиент и back pass? 2) если да, то правильно понимаю что при forward pass нужно как выходы активационлых функций (out1, out2 и т.д.), так и выход сети (y) усреднить, а потом начать считать градиенты по ним? 3) eсли 1 вопрос да, то как усреднить вектор входных значений, когда в качестве мини batch-а они идут скользящим окном?
@selfedu_rus
@selfedu_rus Жыл бұрын
1-2) мы подаем мини батч на вход, для каждого образа вычисляем градиент, вычисляем для него изменение весов (описанный алгоритм), а затем, в конце, усредняем все изменения весов, вычисленные для всех наблюдений их мини батча.
@user-or2gv8zf4l
@user-or2gv8zf4l Жыл бұрын
@@selfedu_rus Теперь понятно. Большое вам спасибо!
@vdvorezlaya
@vdvorezlaya 8 ай бұрын
(y-d) это формула не ошибки, а производной от ошибки. Формула ошибки в данном случае будет 0.5*(y-d)^2. Если это не уточнить то те кто попытается вникнуть откуда что берется - не поймут зачем просто ошибку множить на производную активационной функции. Перемножая производную ошибки на производную активационной функции мы как раз получаем локальный градиент. А с точки зрения просто формул - они правильные.
@user-nw6xp1iv2l
@user-nw6xp1iv2l 2 жыл бұрын
Крутой контент! Возник вопрос по поводу функции ошибки сети, почему мы используем просто разность, а не квадрат разности или модуль, почему это вообще сработало?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Спасибо! Здесь записана ошибка для вычисления локального градиента для квадратической функции потерь. То есть, на выходе имеем E = 1/2*sum(e^2) и производная от нее (по весовым коэффициентам), как раз имеет составляющую e - ошибку. Подробнее см. Саймон Хайкин "Нейронные сети" 2-е издание.
@user-nw6xp1iv2l
@user-nw6xp1iv2l 2 жыл бұрын
@@selfedu_rus Понял, спасибо)
@user-ib9qn8rd7v
@user-ib9qn8rd7v 3 жыл бұрын
Там, где Вы определяете функцию производной, должно быть все таки (1 + f(x))*(1 - f(x)) или (1 + x)*(1 - x)? Небольшое расхождение между презентацией и кодом
@selfedu_rus
@selfedu_rus 3 жыл бұрын
в коде x = f(x) - немного другие обозначения получаются )), конечно, должна быть функция
@user-df1lz6rx8p
@user-df1lz6rx8p 4 жыл бұрын
Жаль, что тут без математических выкладок, самое интересное! ИМХО
@selfedu_rus
@selfedu_rus 4 жыл бұрын
они очень подробно приведены в "Нейронные сети (полный курс) Саймон Хайкин"
@user-df1lz6rx8p
@user-df1lz6rx8p 4 жыл бұрын
@@selfedu_rus Спасибо. Посмотрю. Сейчас пока "Алгоритмы. Построение и анализ" грызу.
@ertargn
@ertargn 3 жыл бұрын
этот метод только для бинарных ответов катит? типо -1\1 0\1 с гиперболической функцией и вторым? или его можно усовершенствовать для других задач? похож на логистическую регрессию
@selfedu_rus
@selfedu_rus 3 жыл бұрын
да, это частный пример и усоврешенствовать его смысла нет, т.к. дальше разбираем общий подход на основе Keras
@t.g.8979
@t.g.8979 Жыл бұрын
3:45 Здравствуйте! Непонятна одна вещь, почему на данном моменте ошибка равна текущий результат минус желаемый? везде пишут, что наоборот, да и в принципе так более логично. Знаю, что уже куча времени прошло, но все же.
@selfedu_rus
@selfedu_rus Жыл бұрын
Это без разницы, т.к. там квадратичная функция потерь (x_i - y_i)^2 и разность можно записать в другом порядке (y_i - x_i)^2
@t.g.8979
@t.g.8979 Жыл бұрын
@@selfedu_rus благодарю за ответ!)
@__-pq1nt
@__-pq1nt Жыл бұрын
Ох, и ещё маленький вопрос: если добавить ещё один скрытый слой, то нейронная сеть станет точнее, так? В данном случае в этом нет необходимости, но очень интересно узнать, правильно ли я понимаю суть разного кол-ва слоёв
@selfedu_rus
@selfedu_rus Жыл бұрын
Теоретически (есть теорема с доказательством, см. курс "Машинное обучение") достаточно полносвязной НС с одним скрытым слоем, чтобы решать любые задачи. Проблема только с ее обучением и числом нейронов в этом скрытом слое.
@__-pq1nt
@__-pq1nt Жыл бұрын
@@selfedu_rus спасибо, обязательно посмотрю эту теорему
@userqh67vey6
@userqh67vey6 Жыл бұрын
Почему-то минимум в 80% случаев при каждой новой прогонке программы, нейросеть дает как минимум 1 ошибку, и увеличение N на порядок особо не помогает. Возможно есть смысл на каждой итерации прогонки всех обучающих данных проверять верность работы сети и останавливаться, когда сеть обучилась? И наличие рандома тут не очень понятно, ведь с ростом N выборки будут выбираться поровну. В общем убрал рандом и перебираю выборки в цикле по очереди. for k in range(N): for i in range(0, count): x = current_epoch[i] При lmd=0.5 нейросеть обучается за 104(k=13) оюучения, при lmd = 0.1 нейросеть обучается за 408 (k=51) итераций обучений, при lmd = 0.01 за 8544 (k=1068) обучений. Лайк за видео!
@eneverov
@eneverov 3 жыл бұрын
а как корректировать смешения? почему-то в большинстве обучающих видео этот момент игнорируется.
@selfedu_rus
@selfedu_rus 3 жыл бұрын
они также корректируются как и веса
@dubinin_s
@dubinin_s 2 жыл бұрын
У меня вопрос. Формулу локального градиента на выходном нейроне мы получаем при дифференциировании функции ошибки? И конкретно в приведенном примере мы получаем формулу е*f'(..), где е - ошибка нейронки, выступает в качестве коэффициента. И при других функциях потерь такой красивой формулы (е*f'(..)) для локального градиента на выходном нейроне мы не получим?! Я же все правильно понял?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
да, все верно, при других ФП будут другие формулы
@dubinin_s
@dubinin_s 2 жыл бұрын
@@selfedu_rus Спасибо большое за ответ.
@user-kl3gp8qw5w
@user-kl3gp8qw5w 4 жыл бұрын
Добрый день, а что не так с предыдущим видео уроком? Спасибо
@selfedu_rus
@selfedu_rus 4 жыл бұрын
там была ошибка... теперь, все правильно )
@user-kl3gp8qw5w
@user-kl3gp8qw5w 4 жыл бұрын
@@selfedu_rus хорошо, а то я все Ваши видео сохраняю после просмотра. Уроки очень хорошие, правда не всё понимаю с первого раза. Спасибо
@SuperWolchara
@SuperWolchara 3 жыл бұрын
Здравствуйте, почему где то используют для нахождения ошибки d - y?, а не как у вас y - d и в корректировке весов не w[i,j] = w[i,j] - лямда * амегу * f[i,j] , а w[i,j] = w[i,j] + лямда * амегу * f[i,j]? и вы показали с одним выходным нейроном, а как поступить с N выходами? У вас амега на предпоследний слой приходит от одного нейрона, а от нескольких будет сумма? Надеюсь я понятно выразился)
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Это не принципиально, просто дальше нужно ставить перед этой разностью или минус, или плюс, в зависимости что из чего вычитают.
@user-vz8hw8ws1r
@user-vz8hw8ws1r 2 жыл бұрын
Всем привет! Пожалуйста, подскажите, почему локальный градиент вычисляется как e*f'(v)?
@user-vz8hw8ws1r
@user-vz8hw8ws1r 2 жыл бұрын
Не досмотрела до 10:25 :) теперь все понятно.
@user-vz8hw8ws1r
@user-vz8hw8ws1r 2 жыл бұрын
Спасибо за ваш видео курс, так все четко, постепенно и понятно:)
@Resident-1337
@Resident-1337 Жыл бұрын
Допустим, функция активации выражается через общую формулу f(x)=bigL/(1+exp(-k*(x-x0)))+n. Как выразить производную через саму эту функцию (используя переменные bigL, k, x0, n)
@horseman3253
@horseman3253 3 жыл бұрын
я е совсем понял куда число ейлера делось из производной от функции?
@torbokovsanat
@torbokovsanat 3 жыл бұрын
потому что там x=f(x)
@NationalVerrater
@NationalVerrater 3 ай бұрын
Почему для получения локального градиента производную надо умножать на ошибку??
@selfedu_rus
@selfedu_rus 2 ай бұрын
здесь подробнее математика: kzbin.info/www/bejne/rHSvZ3hsbdtpgpY
@user-kp7qh4yb6m
@user-kp7qh4yb6m Жыл бұрын
почему градиент для последнего умножается на е?
@BlackXFo
@BlackXFo 3 жыл бұрын
График функции f(x) = 1/(1+e^x) выглядит несколько иначе, чем ваш. У вас нарисован график 1/(1+e^(-x))
@selfedu_rus
@selfedu_rus 3 жыл бұрын
да, нарисован верно, там e^(-x)
@user-hd3ov5lj1u
@user-hd3ov5lj1u 2 жыл бұрын
@@selfedu_rus здравствуйте, я не могу понять в функции e, это ошибка или что?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@user-hd3ov5lj1u ошибка, в степени - должна быть минус x, а не просто x
@thatPerson0000
@thatPerson0000 5 ай бұрын
У меня чёт код об 1,1,1 и -1,-1,-1 запинается. На других всё нормально, а на этих ошибка в ~0.6-1.8 постоянно. В чём может быть причина?
@selfedu_rus
@selfedu_rus 5 ай бұрын
нужно bias добавить в схему НС
@maxsmail1471
@maxsmail1471 2 жыл бұрын
Имеется вопрос, уместно ли будет запустить этот алгоритм в виде рекурсии с сохранением взвешенной суммы и локального градиента внутри нейрона, или это лишняя трата ресурсов?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Не совсем понятно. Но это уже все исследовано и вряд ли вы тут Америку открываете ))
@maxsmail1471
@maxsmail1471 2 жыл бұрын
@@selfedu_rus я понимаю что мне самоучек не открыть ни чего нового, до меня было много людей которые это уже делали, но гладя на этот метод обучения сразу начинаю думать о рекурсии. Дабы изменить веса нам нужны градиенты последующих для которых нужны градиенты последующих, и так до выполнения условия завершения, последний слой или тип выходной
@maxsmail1471
@maxsmail1471 2 жыл бұрын
Ну и чем больше комментариев тем лучше, спасибо за лекцию
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@maxsmail1471 Back propagation, как раз и учитывает эту рекурсию, когда сначала проходит вперед по сети, а затем, вычисляет ошибки, проходя по ней назад.
@user-mx9yb8ue7r
@user-mx9yb8ue7r 4 ай бұрын
На моменте 6:25, где логистическая функция, там не -x в 1/(1+e^x)?
@selfedu_rus
@selfedu_rus 4 ай бұрын
да, это ошибка
@Rusia-16
@Rusia-16 Жыл бұрын
что такое DF в коде ?
@greenpixelman5809
@greenpixelman5809 7 ай бұрын
на 5:49 точно нет ошибки при задании логистической функции (e^{-x} вроде должно быть)?
@selfedu_rus
@selfedu_rus 7 ай бұрын
да, там степень должна фигурировать
@user-du8kn8yp2v
@user-du8kn8yp2v Жыл бұрын
Если на входе имеется смещение, веса для него так же корректируются, или нет?
@selfedu_rus
@selfedu_rus Жыл бұрын
да, все абсолютно также
@user-du8kn8yp2v
@user-du8kn8yp2v Жыл бұрын
@@selfedu_rus я пробовал корректировать веса, сеть не обучается. Потом отказался от весов смещения и поставил небольшое значение смещения как константу и все заработало. Это как объясняется?
@selfedu_rus
@selfedu_rus Жыл бұрын
что то не так сделали, смещение не может ухудшать результаты (на bias ограничений по значениям не накладывается, в том числе и регуляризаторы, шаг изменения при обучении лучше задавать отдельно)
@__-pq1nt
@__-pq1nt Жыл бұрын
Здравствуйте, возник вопрос: y, out = go_forward(x[0:3]) в x[0:3] за что отвечает двоеточие после 0?
@selfedu_rus
@selfedu_rus Жыл бұрын
срез берутся элементы с индексами 0, 1, 2
@__-pq1nt
@__-pq1nt Жыл бұрын
@@selfedu_rus спасибо
@user-hd1fn2ir1v
@user-hd1fn2ir1v 2 жыл бұрын
Здравствуйте, я не совсем понимаю когда нужно использовать "гиперболический тангенс", а когда нужно использовать "логистическую функцию".
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Основное отличие, что тангенс выдает и отрицательные и положительные значения [-1; 1], а логистическая - только положительные [0; 1]. Исходя из этого их и выбирают при решении конкретной практической задачи.
@user-hd1fn2ir1v
@user-hd1fn2ir1v 2 жыл бұрын
@@selfedu_rus я заметил эту разницу и понял что исходя из этого и выбирают но не понял как выбирают всмысле когда нам нужно чтобы был порог целых чисел а когда целых и отрицательных чисел.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@user-hd1fn2ir1v Вы посмотрите дальше этот курс, я думаю, найдете ответ на этот вопрос. В двух словах мне как-то сложно это объяснить.
@user-hd1fn2ir1v
@user-hd1fn2ir1v 2 жыл бұрын
@@selfedu_rus хорошо
@user-xc4ek5mq5z
@user-xc4ek5mq5z 2 жыл бұрын
Подскажите пожалуйста, что такое (inp) в 12-й строке кода и чему оно равно?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
входной вектор
@user-xc4ek5mq5z
@user-xc4ek5mq5z 2 жыл бұрын
@@selfedu_rus Спасибо!
@adrianchervinchuk5632
@adrianchervinchuk5632 3 жыл бұрын
расскажите пожалуйста как-нибудь с теми самыми мат. выкладками!!
@selfedu_rus
@selfedu_rus 3 жыл бұрын
подумаю, в принципе они подробно изложены в литературе: 1. Bishop. Neural Networks for Pattern Recognition 2. Хайкин Саймон. Нейронные сети полный курс
@user-qb5bo3jv3e
@user-qb5bo3jv3e 3 жыл бұрын
Скажите пожалуйста, вот в данном примере у сети всего один выход. Тогда функция ошибки это (y - t)^2 где y это выход сети (одно значение, число), а t (тоже одно значение, число) это целевое значение. Тогда что бы уменьшить ошибку, мы меняем значение весов, фиксируя один вес за другим и вычисляем частные производные по соответствующим переменным (весам). После того как мы нашли все необходимые частные производные мы от соответствующего веса отнимаем значение производной, домножив его на альфа коэф. Но что если у сети N выходов, где N > 1? Получается, что нам нужно рассматривать N функций ошибок вида (y - t)^2 где y это значение полученное на каждом выходном узле а t это целевое значение конкретного выходного узла и так N раз? Как в таком случае рассматривать (понимать) функцию ошибки и как правильно минимизировать эту функцию используя алгоритм обратного распространения ошибки?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Совершенно верно и в соответствии с back propagation частные производные выходных нейронов, затем, суммируются на соответствующих нейронах предыдущего слоя с учетом текущих весов связей. Сама выходная функция является уже векторной, конечное значение берется, обычно, или как сумма всех потерь (на всех выходах) или как среднее значение.
@user-qb5bo3jv3e
@user-qb5bo3jv3e 3 жыл бұрын
@@selfedu_rus Спасибо за помощь! В общем как я понял когда у нас несколько выходов, то мы определяем ошибку для каждого выхода, затем определяем как должна выглядеть ошибка всей сети. Например, мы для себя определили, что за ошибку сети будем считать сумму ошибок на выходах сети. Далее, что бы изменить конкретный вес, мы фиксируем все веса (кроме того, который собираемся оптимизировать) в функции ошибки всей сети (которая в данном случае является суммой ошибок на выходных узлах) и считаем частную производную по этому весу. Затем просто вычитаем то что получилось из веса, по которому мы считали частную производную. Это делается с целью уменьшения ошибки всей сети.
@selfedu_rus
@selfedu_rus 3 жыл бұрын
@@user-qb5bo3jv3e Лучше я скажу своими словами, чтобы не было недопонимания. Сумма всех ошибок - это ориентир для нас, людей, но не для алгоритма обучения. Когда множество выходов, то для корректировки всех весов, идущих к конкретному выходу, вычисляется частная производная именно для него. Благодаря этому, значение ошибки для этого выхода будет постепенно уменьшаться. Делая так для всех выходов, будем уменьшать и общую суммарную ошибку.
@user-qb5bo3jv3e
@user-qb5bo3jv3e 3 жыл бұрын
@@selfedu_rus Спасибо что поддерживаете тему! Подобные обсуждения важны для нас, начинающих)) Только мне видится странным то, что вы сказали что сумма всех ошибок не является ориентиром для алгоритма обучения. Ведь частные производные мы считаем именно по функции ошибки фиксируя все веса кроме одного. То есть, работа с функцией ошибки сети (сумма ошибок на узлах) это часть алгоритма обучения, но как я понял вы почему-то говорите об этом как о чем-то отдельном от процесса обучения. Так же вы сказали, что корректируются веса идущие к выходному узлу и так для каждого выходного узла. Это действительно так. Но разве этого достаточно? Ведь если у нас будет скрытый слой, мы будем редактировать не только веса идущие к выходным узлам, но и те веса, которые ведут в скрытый слой. Здесь мы снова вернемся к функции ошибки сети, и возьмем у нее производную но уже по весу, который ведет в скрытый слой, так ведь?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
@@user-qb5bo3jv3e Да, для скрытых слоев сначала вычисляется сумма локальных градиентов от предыдущего слоя с учетом весов связей, а затем, корректируются веса соответствующих входящих связей у нейронов. Вроде об этом есть в видео?
@__-pq1nt
@__-pq1nt Жыл бұрын
Возник вопрос с математикой. Если не сложно, то могли бы вы написать, какие темы нужны. Я сам в десятом классе, интересуюсь нейронными сетями в практических задачах (занимаюсь робототехникой, но на серьёзном уровне, а там как раз хочется подключить их). Я понимаю, что нужна высшая математика, но не понимаю с чего начать разбираться, какие темы нужны для нейронных сетей. Если вас не затруднит, то не могли бы вы написать базовые темы? P.s. я примерно понимаю, какие темы нужны, но в каком порядке? Я начал с производных, там какие-то правила дифференцирования применяются, то есть точно уж не с производных надо начинать
@selfedu_rus
@selfedu_rus Жыл бұрын
для таких вопросов есть телеграм канал: t.me/machine_learning_selfedu там сообщество много чего порекомендует! ))
@__-pq1nt
@__-pq1nt Жыл бұрын
@@selfedu_rus спасибо, подписался
@mikhalpalych
@mikhalpalych 3 жыл бұрын
Можете, пожалуйста, посоветовать какие-то гайды или что-то еще, чтобы быстро подтянуть математику, а то у меня с момента производной и градиентов понимание осталось только на уровне интуиции:)
@selfedu_rus
@selfedu_rus 3 жыл бұрын
по производным курс на этом канале: kzbin.info/www/bejne/Z53SqqePlKyrh6M по градиентному спуску также есть отдельное занятие в этом плейлисте: kzbin.info/www/bejne/f5C4m4OciMd0hsU
@mikhalpalych
@mikhalpalych 3 жыл бұрын
@@selfedu_rus СПасибо огромное!
@sergei864
@sergei864 2 жыл бұрын
Объясните пожалуйса, в процессе обучения ошибка считается как (y - d), в других источниках указывается, что ошибка считается как квадрат ошибки(y - d)**2. Если ошибка будет квадратной, то она никогда не будет отрицательной и не сможет уменьшать веса. Я так понял, что в формуле расчета весов участвует просто ошибка, а в оценке обучения (рисование графика) используется квадрат ошибки. Или я что-то не понял?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Здесь производные вычисляются, возьмите производную от квадрата ошибки и будет просто разность.
@sergei864
@sergei864 2 жыл бұрын
@@selfedu_rus Спасибо. Я похоже не догадался, что в формуле градиента d = e * f'(x) ошибка это уже производная от квадрата ошибки. Получается формула градиента для нейрона равна d = производна от 1/2 квадрата ошибки умноженная на производную функции активации от суммы взвешенных не активированных сумм входов нейрона, верно?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@sergei864 да, обычно, такой множитель и прописывают, чтобы осталась только разность
@silentage6310
@silentage6310 Жыл бұрын
пример только получился неудачный. формаула сразу понятна y = x3. нейросеть должна научится игнорировать первые 2 параметра.
@sergeygetto7480
@sergeygetto7480 2 жыл бұрын
Как-то странно, код 1 в 1, но при этом моя нейронка не учиться она выдаёт некоторые значения близкие к 1 или -1, но грубо говоря угадывает. Также заметил, что веса растут до 3.5, может быть ошибка в этом? Но тогда не совсем понятно, где именно ошибка, потому что опять же код 1 в 1
@sergeygetto7480
@sergeygetto7480 2 жыл бұрын
Ещё раз пересмотрев нашёл ошибку)
@CoolAliexpress
@CoolAliexpress 2 жыл бұрын
@@sergeygetto7480 В чем ошибка была?
Её Старший Брат Настоящий Джентельмен ❤️
00:18
Глеб Рандалайнен
Рет қаралды 7 МЛН
Is it Cake or Fake ? 🍰
00:53
A4
Рет қаралды 16 МЛН
FOOTBALL WITH PLAY BUTTONS ▶️❤️ #roadto100million
00:20
Celine Dept
Рет қаралды 15 МЛН
How to Create a Neural Network (and Train it to Identify Doodles)
54:51
Sebastian Lague
Рет қаралды 1,8 МЛН
Практика обратного распространения ошибки
13:33
Центр digital профессий ITtensive
Рет қаралды 7 М.
The Most Important Algorithm in Machine Learning
40:08
Artem Kirsanov
Рет қаралды 257 М.
Обратное распространение ошибки
21:53
Дмитрий Коробченко
Рет қаралды 54 М.
What is Back Propagation
8:00
IBM Technology
Рет қаралды 47 М.
Её Старший Брат Настоящий Джентельмен ❤️
00:18
Глеб Рандалайнен
Рет қаралды 7 МЛН