Учимся обучать нейронные сети, за 30 минут от теории до практики.
Вставка
- Опубліковано 21 лют 2017
- Поговорим о там как можно обучить сеть методом обратного распространения ошибки. В данном видео затронуты (но не раскрыты) такие темы как:
- производная • 02. Что такое производ...
- число е • Число e.
• Discord-чат академии: bit.ly/2K6XQQ2
• Поддержать проект можно вот тут: / b0noi
Notebook: s3-us-west-1.amazonaws.com/yo...
смотрю второе видео по данной теме.... сложилось четкое нейронное убеждение, что друг который все время говорит что ему понятно... на самом деле нихуа не понимает))))
U MENA TAKOYE JE OSUSENIYE
@@elxanelxanov258 Alt + Shift и Caps Lock
@@user-fg3bz5wt5s Win+Space
@@donrumata5299 alt + f4 или ctrl + w
++, мог бы много хороших вопросов позадавать
Делаю проект, связанный с нейронными сетями. Этот ролик всё понятно поясняет. Пока не нашёл аналогов в русском Ютубе. Большое спасибо
Спасибо!
привет. как успехи с проектом? тоже заинтересовался этой идеей. сейчас собираю крупицы знаний в русскоязычных источниках. интересно было бы пообщаться с человеком, который уже через все это прошел)
Отличная идея с математикой. Просто изучать математику довольно скучно и если вы будете делать уроки по ML , оставляя ссылки на видео с объяснением применных математических терминов , то это будет просто изумительно. В общем я считаю, что имеет место делать уроки по математике в контексте ML
Думаем начать с урока о чем то простом вроде операций над векторами и том как numpy это упрощает а то возможно код может показаться немного непонятным при первом изучении.
Спасибо чувак, первый раз нормальное объяснение нашёл
Отличнейший урок про нейросеть! Спасибо большое
import numpy as np
import sys
class PartyNN(object):
def __init__(self, learning_rate=0.1):
self.weights_0_1 = np.random.normal(0.0, 2 ** -0.5, (2,3))
self.weights_1_2 = np.random.normal(0.0, 1, (1, 2))
self.sigmoid_mapper = np.vectorize(self.sigmoid)
self.learning_rate = np.array([learning_rate])
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def predict(self, inputs):
inputs_1 = np.dot(self.weights_0_1, inputs)
outputs_1 = self.sigmoid_mapper(inputs_1)
inputs_2 = np.dot(self.weights_1_2, outputs_1)
outputs_2 = self.sigmoid_mapper(inputs_2)
return outputs_2
def train(self, inputs, expected_predict):
inputs_1 = np.dot(self.weights_0_1, inputs)
outputs_1 = self.sigmoid_mapper(inputs_1)
inputs_2 = np.dot(self.weights_1_2, outputs_1)
outputs_2 = self.sigmoid_mapper(inputs_2)
actual_predict = outputs_2[0]
error_layer_2 = np.array([actual_predict - expected_predict])
gradient_layer_2 = actual_predict * (1 - actual_predict)
weights_delta_layer_2 = error_layer_2 * gradient_layer_2
self.weights_1_2 -= (np.dot(weights_delta_layer_2, outputs_1.reshape(1, len(outputs_1)))) * self.learning_rate
error_layer_1 = weights_delta_layer_2 * self.weights_1_2
gradient_layer_1 = outputs_1 * (1 - outputs_1)
weights_delta_layer_1 = error_layer_1 * gradient_layer_1
self.weights_0_1 -= np.dot(inputs.reshape(len(inputs), 1), weights_delta_layer_1).T * self.learning_rate
def MSE(y, Y):
return np.mean((y-Y)**2)
train = [
([0, 0, 0], 0),
([0, 0, 1], 1),
([0, 1, 0], 0),
([0, 1, 1], 0),
([1, 0, 0], 1),
([1, 0, 1], 1),
([1, 1, 0], 0),
([1, 1, 1], 1),
]
epochs = 5000
learning_rate = 0.05
network = PartyNN(learning_rate=learning_rate)
for e in range(epochs):
inputs_ = [ ]
correct_predictions = [ ]
for input_stat, correct_predict in train:
network.train(np.array(input_stat), correct_predict)
inputs_.append(np.array(input_stat))
correct_predictions.append(np.array(correct_predict))
train_loss = MSE(network.predict(np.array(inputs_).T), np.array(correct_predictions))
sys.stdout.write("
Progress: {}, Training loss: {}".format(str(100 * e/float(epochs))[:4], str(train_loss)[:5]))
for input_stat, correct_predict in train:
print("For input: {} the prediction is: {}, expected: {}".format(
str(input_stat),
str(network.predict(np.array(input_stat)) > .5),
str(correct_predict == 1)))
for input_stat, correct_predict in train:
print("For input: {} the prediction is: {}, expected: {}".format(
str(input_stat),
str(network.predict(np.array(input_stat))),
str(correct_predict == 1)))
Лучший. Спасибо.
Самые толковые примеры из того, что мне до сих пор доводилось видеть. Спасибо!
и вам спасибо, будем очень благодарны если поможете распространить =)
Большое спасибо. Очень помогает разобраться с основными принципами.
Просто супер и все понятно! Спасибо за такие интересные и понятные видео!
Спасибо за Ваш труд, все очень подробно и понятно
Очень подробное и самое лучшее описание нейросетей что я смог найти.
Немного непривычно читать питон, и не люблю видео, ибо когда пытаешься сам что то сделать проще работать с текстовой информацией.
Огромное Вам спасибо за курс. Надеюсь он будет продолжаться.
+Александр Петров и Вам спасибо ! Будем признательны за помощь с распространением:)
Поделюсь, расскажу друзьям, покажу девушкею. Что угодно, только продолжай , прошу тебя =)
Спасибо большое, чем больше просмотров тем больше у нас стимула продолжать делать видео на эту тему =)
Лучший курс в мире, все понятно и ясно. Спасибо за курс
Пожалуй это лучшее толкование на русском языке, спасибо большое)
И вам спасибо большое!
Пожалуй лучше было бы слышать монолог.
Глеб тут явно лишний.
@@MrGerser ничуть не лишний. Он как индикатор. Раз головой кивает, значит и другие слушатели будут понимать.
Поддерживаю - самое толковое видео.
@@MisterKoK22 да ничерта не понятно никому, и ему самому, похоже. херовый индикатор либо просто бесит.
Вот это я понимаю, понятно и с примерами!!! пойду смотреть дальше и показывать всем =)
Ну наконец-то я увидел и услышал про функцию активации в понятной форме, спасибо автору. Для новичков супер! 3 месяца искал нормальное толкование!
Супер! Очень понятный и полезный контент . Благодарю автора
Спасибо огромное! Это поистине самое понятное объяснение
Впервые вижу такой качественный контент по нейронным сетям! Я пошел учить питон...
Отличный урок, спасибо!
Хороший формат, формирует интуиции для дальнейшего углубления в тему. Детали лучше понимаешь на родном языке, как ни крути.
Круто!Нечасто можно найти такой полезный контент.Однозначно лайк
Спасибо!
Очень интересно, огромное спасибо ! , надеюсь это не последнее видео )
Potryasayusheye video!! Ogromnoe spasibo!
Спасибо вам за видео, лучшие!
Пока что, лучшее обьяснение метода обратного распространения ошибки, которое встречал в интернете.
Отличное видео, не скажу что все объясненно досконально но разобраться очень помогло. Спасибо!
Спасибо большое, очень интересно!
Спасибо! Наконец-то понял про нейронные сети
Браво!
Отправил друзьям!
+Dmitry Tyurnin спасибо!
Спасибо парням за видео. Пожалуй , изложение материала понятней чем здесь , я нигде не видел. Возможно , в силу своей восприимчивости. Наконец-то бахнул свою первую нейронку для игрового бота, счастью нет предела))
Nice, с удовольствием смотрю!!!)
Спасибо большое, очень доходчиво рассказано)
Лайк, подписка)
+Батончик Сникрес спасибо:)!
Господа, сегодня знаменательный день. Стало понятно! Огромное спасибо за материал.
Спасибо! Просто супер
Благодарю за доходчивое изложение и реальный пример обучения нейросети.
Повторил всю методологию обучения нейросети из Вашего примера, но на Delphi 7.
Правда, писал более универсальный и "тяжелый" код, под свои собственные задачи.
Нейрон был описал отдельным классом, дабы потом можно было создавать произвольный массив из нейронов.
В результате программа на Delphi те же 4000 эпох из примера "отработала" за 15 секунд (в Вашем примере на Питоне около 6 секунд).
Оно может дело и в железе (у меня Celeron G1820 2.7GHz), но не думаю, что "причесывая" делфийский код, мне удастся сократить время выполнения в 2.5...3 раза.
Т.е. налицо имеет место быть факт "заточенности" Питона под нейросети.
Спасибо! Всё понятно!
Переписал эту нейронку (пришлось потратить немало времени на понятие синтаксиса Python) на С++. При тех же вводных (5000 поколений и 0.08 learning_rate) ошибка сети на выходе 0.003.
Спасибо огромное тебе за очень понятное объяснение. В ру сигменте найти человека, который так подробно может разжевать что и как делается - как иголку в стоге сена искать.
Объясняет очень сложную вещь как на духу!! Спасибо
Шикарная тема!
Мега круто . Хочу еще . Больше примеров . Тема зашла, было интересно.Спасибо большое.
Интересен был бы пример с определением того что находится на изображении.
P.S. Жаль в универе мне не так статы и кванты объясняли.
Спасибо большое. А в какомы вы универе?
Одесский национальный университет, физический факультет .
Уже окончил.
Решил расширить горизонты и изучить Java в чем ваши курсы несомненно помогают, а тут еще и тема интересная.
Спасибо огромное!!!
Было бы неплохо продолжить данную тему, очень хороший спрос.
Одно из лучших демо нейросети, еще есть несколько других уроков, которые вместе позволяют хорошо усвоить тему
Лучшее видео, чтобы понять что такое нейросеть, и как работает метод с нуля. Краем глазом просматриваю подобные видео давно, но именно понял как работает это метод только с этим виде.
Ребят, спасибо вам большое. Я около десяти видео просмотрел, что бы это найти. Обучение нигде не объясняют. Все или в магию готовых библиотек уходят или просто молча опускают. Очень понятно. Даже если не понимать что такое сигмоида и производная :)
спасибо вам большое, у вас самое понятное объяеснение, которое я нашел
Мне бы такого друга, который может слушать рассказ в течение получаса и более )
У меня тоже все получилось!!!! Как интересно. Я правда очень простую программку на Питоне написал (только неделю назад изучил как на нем программировать), но все получилось. . 5000 итераций и learning rate 0.05. Огромное спасибо авторам за такое простое и гениальное объяснение непростого материала!!!
Чего-то голова уже не работает. Видео супер!)
Отличные уроки, было бы вообще круто, если бы это вылилось в полноценный курс с разбором современных библиотек глубокого обучения и реальными кейсами! Пока самые понятные объяснения, которые я слышал, ну и Ng конечно тоже хорош, но у него Octave( , а тут сразу на актуальном языке было бы вообще отличной.
На это пока что времени нету, но когда то на базе Хекслета возможно появиться =)
ну хотя бы простенький примерчик, вроде шняги которую можно было бы обучить отличать круг от квадрата, например.
Спасибо большое. Очень подробно обьяснили... лайк+подписка
Если еще не трудно, можете запилить видео с предсказаниями в нейронных сетях?
А так спасибо тебе большое. Классное видео. Глеб умница тоже)
А зачем нужен чувак, которому всё понятно и всегда говорит да? =) Хотя бы поспрашивал мол веса что такое поподробнее можно?.
Лучшее на русском, что смог найти. Благодарю. Продолжайте!
Спасибо!
огромное вам спасибо
это лучшее что я видел по нсхоть и не люблю питон
но вам все равно огромное спасибо
респект за видео, отдельно за юмор ))) 8:45 - запихиваем незапихуемое )))
Вобщим зацепила меня эта тема сильно, так как я сам начал писать алгоритм обратного распространения ошибки для многослойной сети. Чтож, понятное дело, я увидел множество неоднозначных проблем для себя, решение которых к стате я вижу по своему. Поэтому я сам ухожу на некоторое время в глубокое обучение, начинаю подымать литературу по этому вопросу, дабы повысить свой интелект для решения этой задачи.
Очень хороший ход =)
перечитал кучу литературы и видео но только после вашего понял что к чему одним словом супер!
+Vadim Zaytsev спасибо :)!
Да ну и конечно видео полезное и интересное
Здравствуйте! Большое спасибо за очень интересный и понятный материал! Почти все усвоил с первого просмотра)) Но пожалуйста, подскажите каким образом считать ошибку если например в выходном слое несколько нейронов?
Как я понял выходной слой считается так-же как и у вас, а вот что делать со скрытыми/входным? Пока на уме крутится мысль в цикле считать ошибку для нейронов текущего слоя на основании каждого нейрона следующего, но интуиция подсказывает что из этого получится что-то некорректное. Подскажите пожалуйста, как будет правильно?
Грамотно!
Видео очень понравилось! Никогда не думал, что с помощью математических формул можно делать такие выкрутасы с обучением. Было бы идеально, если бы код был бы ещё и на других языках вроде С++, если это, конечно сильно не затруднит. Спасибо.
А смысл???
Тут суть есть, осталось только переписать через нужный язык.
Супер!
Спасибо огромное! Наконец, по теме, а то везде сплошная реклама облаков с черными ящиками.
Спасибо за подробный обзор работы сети и формул!
Но возникли вопросы:
- как проводить обучение нейросети,если ожидаемое значение неизвестно,например при прогнозировании погоды?
- где можно увидеть ваш код нейронки?
Тебе нужно рассмотреть все возможные варианты и добавить их на выход. Входные нейроны это условия/среда за которыми нейросеть наблюдает, что бы понять какой будет погода
Блин, по такому хорошему рассуждению можно даже нейронку в Scratch забацать! Классно)
want to record this and upload on this channel;)?
@@KovalevskyiAcademy When i will can - i will)
просто охренеть! Автора в рай!
Лайк поставлен. Пошел рекомендовать друзьям.)
ДА ТЫ ПРОСТО БОГ АЛО СТОЛЬКО САЙТО И ВСЁ НЕПОНЯТНО КАК ТЫ ДОЛЖЕН ЗАПИСАТЬ ЭТИ ФОРМУЛЫ, А ТЫ ПРЯМ ПО ПАЛЬЦЕМ НА ПАЛЬЦАХ В 100 СТЕПЕНИ РАСФОРМУЛИРОВАЛ СПАСИБО МОЛОДЕЦ АЛЛО ЛУЧШИЙ
наконец то нормальное видео по нейронным сетям
Фух-х-х... Спасибо. Пересмотрел это видео до "дыр". Уже несколько дне ничего не получалось. НС не хотела учится... Сделал так, чтоб можно было указывать количество слоёв и нейронов в них.
Только, что нарисовал все эти "пути" обучения... Ну, короче, Я морознул малость еще в самом начале. :) Но все получилось! Даже может предсказывать значения не из выборки. :)
Добрый день, дайте пожалуйста ссылку на материал по производным.
SUPER!!!!
Я себе так и представлял нейросеть, но вот обратный анализ это круто, можно сделать ещё интересней, но это на примере другом разбирать нужно, где больше трёх вариантов.
Определённо лучшие видео в русском ютуб, спасибо
11:15 sigmoid(x)dx = f'(x)dx, в такой записи сигмоида - уже производная при дифф. 1- форме. Правильно так - sigmoid'(x)dx=sigmoid(x)(1-sigmoid(x))dx
super!
Подскажите, а данный алгоритм подходит для обучения нейросети распознаванию цифр ? В случае если несколько выходных нейронов, схема таже самая ?
Я правильно понимаю, в массиве train должны быть только 0 и 1? На нем и тренируется сеть. А при использовании, другим массивом/обьектом вставляются уже искомые данные?
Запутался просто. У меня есть набор данных, на которых нужно натренировать сеть, правильно ли их вставлять в train?
Добрый день! Я только начала изучать нейросети. Программа на Jupyter Notebook обучила сеть , какой результат нужно выдавать в конце при определенных входных данных. Т.е. мы обучили сеть для того чтобы после введения новых данных предсказывать результаты с максимальной точностью. Правильно я поняла? Теперь у меня есть вопрос, как вводить данные для предсказания новых результатов?
А рекурентные сети так же подробно будут? :)
Да =)
классное видео! а скажите пожалуйста как расчитать ошибку если выходной слой более 1 -ого нейрона?
а какую дельту брать? ну например у нас несколько выходных нейронов
Боже мой, дня 3 не мог понять почему сеть не сходится, столько всего перечитал, а это видео вообще по секунде помню..
Один мать его символ!! При подсчете весов первого слоя в цикле проходил не по 3 элементам, а по 2вум, банальная опечатка... и самое забавное что сеть ошибалась примерно на 90%
Автору видео большое спасибо, из того что я видел, это пожалуй лучшее вводное видео для понимания "Как это работает"
Доброго времени суток! Подскажите, пожалуйста, по поводу нахождения ошибки. В видео говорится, что ошибка находится из разности текущего результата и ожидаемого. Покопавшись в интернете и прочитав книгу Создаем нейронную сеть - Рашид Тарик, пишут, что ошибка это разница между желаемым(тренировочным) результатом и текущим. Может, я что-то не так понимаю?
Сразу говорю спасибо авторам этого ролика, но у меня возник вопрос, что делать если кол-во нейронов на скрытом уровне тысячи? я имею ввиду как код писать? если я один хочу написать такую сеть, то я должен строчить день и ночь? или есть другой вариант?
Приветствую, Вячеслав! Отличные видео! Можете подсказать материалы, по которым можно разобраться основательнее и подробнее с темами нейронных сетей и машинного обучения? Я знаю про курсы на stepic, coursera, EdX, может ещё что-то? Что-то, что может сделать из меня джедая deep learning'a?)
www.deeplearningbook.org =)
Спасибо, с нетерпением жду новых видео!)
Так круто объясняешь, первое видео совсем улёт, то что я не мог понять за один семестр понял всего лишь за пол часа. А здесь у меня вопрос, откуда появился 0.5 и 0.52? Это тоже рандомно?
Yes
Здравствуйте. Я наверное что-то путаю но вопрос следующий, выражение типа sigmoid(x) dx означает производную функции sigmoid или её дифференциал? Если первое то что тогда d sigmoid / dx, так как выражение sigmoid(x) (1 - sigmoid(x)) это результат вычисления производной данной функции
а производная и дифференциал это не одно и то же?
@@MrAkvalar одно и то же
Респект тобі! Якби не ці відоси, я б не розібрався. Лайк!
Выложите, пожалуйста, исходный код сети с обучением. В видео предлагаете самим пройти по строчкам и все разобрать, чтобы было понятнее!
s3-us-west-1.amazonaws.com/youtube-channel/nn_training_2_layer_network.ipynb - готово =)
а куда это нужно "запихать" чтобы было в читабельном виде? а за видосы большие пальцы вверх. спасибо
Это формат jupiter notebook. Закидываешь сюды try.jupyter.org
я так понимаю это для линукса?
Вячеслав, а что если вместо Python использовать Scala? Это же не так больно, как Java, нет?
День добрый, коллеги. Прогнозирую временной ряд в котором ответы числа примерно от 600 до 1600. И есть десяток значений около нуля. Метод обратного распространения ошибки в предложенном виде не прогнозирует эти вывалы в ноль. А если веса менять в плюс или минус перебором, уменьшая шаг, то вывалы в ноль успешно прогнозируются. Однако это очень затратно по времени и результат не стабилен.
Вопрос. Как модифицировать алгоритм обратного распространения, чтобы он минимизировал не абсолютное отклонение от результата, а процент. То есть не error=actual-expected, а error=(actual-expected)/actual (в таком виде не работает)
отлично
сетка написана на 3 питоне? её можно где-то по заимствовать для своих тестов?
круто
А нельзя ли написат алгоритм чтобы подобрать самого "epochs" и "learning_rate" для того чтобы добится "training_loss" ближе к "0" чтобы программа сама решала какое "epochs" и "learning_rate" лучше подходит к етому задацу и при етом исклюцат ручного работу полностю?
Можно, например алгоритм iRprop+ хранит отдельно learning_rate для каждого веса. Сходится за 50 итераций, в то время как обычная сетка (с моментумом) сходилась бы за 10 000. Но увы, iRporp+ нельзя использовать для Стохастического Градиентного спуска, т.е разрешается корректировать только когда все примеры были прогнанны через forward_pass
Igor Aherne а что, если постепенно уменьшать learning_rate, тем самым экспоненциально настраивать нашу сеть? к примеру "грубо" настроить за небольшое количество итераций для начала, а уже после этого сохраненную сеть настраивать более "тонко" ?
Если я правильно помню, тот же Ng постоянно говорит, что корректировка весов должна производится одновременно. То есть скорректировать веса мы можем только после того, как посчитаем все ошибки. Иначе у нас на коррекцию предыдущего скрытого слоя появлияет коррекция текущего, хотя ошибка была получена при нескорректированном весе.
Добрый день. У меня вопрос по поводу формулы, по которой Вы рассчитываете дельту весов. Не могли бы Вы дать ссылку на источник, из которого была взята данная формула? Хотелось бы подробнее о ней почитать и узнать почему она имеет именно такой вид. Спасибо.
поищите мой комментарий под этим видео(по-поводу того "как распространять ошибку на болеее глубокие уровни"), он поможет разобраться.