Учимся обучать нейронные сети, за 30 минут от теории до практики.
HTML-код
- Опубликовано: 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!
Переписал эту нейронку (пришлось потратить немало времени на понятие синтаксиса Python) на С++. При тех же вводных (5000 поколений и 0.08 learning_rate) ошибка сети на выходе 0.003.
Спасибо огромное тебе за очень понятное объяснение. В ру сигменте найти человека, который так подробно может разжевать что и как делается - как иголку в стоге сена искать.
Спасибо огромное! Это поистине самое понятное объяснение
Круто!Нечасто можно найти такой полезный контент.Однозначно лайк
Спасибо!
Очень интересно, огромное спасибо ! , надеюсь это не последнее видео )
Мне бы такого друга, который может слушать рассказ в течение получаса и более )
Пока что, лучшее обьяснение метода обратного распространения ошибки, которое встречал в интернете.
Nice, с удовольствием смотрю!!!)
Спасибо вам за видео, лучшие!
Спасибо большое, очень интересно!
Спасибо! Наконец-то понял про нейронные сети
Отличное видео, не скажу что все объясненно досконально но разобраться очень помогло. Спасибо!
У меня тоже все получилось!!!! Как интересно. Я правда очень простую программку на Питоне написал (только неделю назад изучил как на нем программировать), но все получилось. . 5000 итераций и learning rate 0.05. Огромное спасибо авторам за такое простое и гениальное объяснение непростого материала!!!
Спасибо парням за видео. Пожалуй , изложение материала понятней чем здесь , я нигде не видел. Возможно , в силу своей восприимчивости. Наконец-то бахнул свою первую нейронку для игрового бота, счастью нет предела))
Одно из лучших демо нейросети, еще есть несколько других уроков, которые вместе позволяют хорошо усвоить тему
Господа, сегодня знаменательный день. Стало понятно! Огромное спасибо за материал.
Браво!
Отправил друзьям!
+Dmitry Tyurnin спасибо!
Было бы неплохо продолжить данную тему, очень хороший спрос.
Лучшее видео, чтобы понять что такое нейросеть, и как работает метод с нуля. Краем глазом просматриваю подобные видео давно, но именно понял как работает это метод только с этим виде.
Объясняет очень сложную вещь как на духу!! Спасибо
Спасибо большое, очень доходчиво рассказано)
Лайк, подписка)
+Батончик Сникрес спасибо:)!
Благодарю за доходчивое изложение и реальный пример обучения нейросети.
Повторил всю методологию обучения нейросети из Вашего примера, но на Delphi 7.
Правда, писал более универсальный и "тяжелый" код, под свои собственные задачи.
Нейрон был описал отдельным классом, дабы потом можно было создавать произвольный массив из нейронов.
В результате программа на Delphi те же 4000 эпох из примера "отработала" за 15 секунд (в Вашем примере на Питоне около 6 секунд).
Оно может дело и в железе (у меня Celeron G1820 2.7GHz), но не думаю, что "причесывая" делфийский код, мне удастся сократить время выполнения в 2.5...3 раза.
Т.е. налицо имеет место быть факт "заточенности" Питона под нейросети.
Спасибо! Всё понятно!
Чего-то голова уже не работает. Видео супер!)
Спасибо! Просто супер
спасибо вам большое, у вас самое понятное объяеснение, которое я нашел
Ребят, спасибо вам большое. Я около десяти видео просмотрел, что бы это найти. Обучение нигде не объясняют. Все или в магию готовых библиотек уходят или просто молча опускают. Очень понятно. Даже если не понимать что такое сигмоида и производная :)
Шикарная тема!
респект за видео, отдельно за юмор ))) 8:45 - запихиваем незапихуемое )))
Спасибо большое. Очень подробно обьяснили... лайк+подписка
Если еще не трудно, можете запилить видео с предсказаниями в нейронных сетях?
Спасибо огромное!!!
Определённо лучшие видео в русском ютуб, спасибо
Спасибо огромное! Наконец, по теме, а то везде сплошная реклама облаков с черными ящиками.
11:15 sigmoid(x)dx = f'(x)dx, в такой записи сигмоида - уже производная при дифф. 1- форме. Правильно так - sigmoid'(x)dx=sigmoid(x)(1-sigmoid(x))dx
Подскажите, а данный алгоритм подходит для обучения нейросети распознаванию цифр ? В случае если несколько выходных нейронов, схема таже самая ?
Добрый день, дайте пожалуйста ссылку на материал по производным.
Мега круто . Хочу еще . Больше примеров . Тема зашла, было интересно.Спасибо большое.
Интересен был бы пример с определением того что находится на изображении.
P.S. Жаль в универе мне не так статы и кванты объясняли.
Спасибо большое. А в какомы вы универе?
Одесский национальный университет, физический факультет .
Уже окончил.
Решил расширить горизонты и изучить Java в чем ваши курсы несомненно помогают, а тут еще и тема интересная.
Здравствуйте! Большое спасибо за очень интересный и понятный материал! Почти все усвоил с первого просмотра)) Но пожалуйста, подскажите каким образом считать ошибку если например в выходном слое несколько нейронов?
Как я понял выходной слой считается так-же как и у вас, а вот что делать со скрытыми/входным? Пока на уме крутится мысль в цикле считать ошибку для нейронов текущего слоя на основании каждого нейрона следующего, но интуиция подсказывает что из этого получится что-то некорректное. Подскажите пожалуйста, как будет правильно?
наконец то нормальное видео по нейронным сетям
Да ну и конечно видео полезное и интересное
Отличные уроки, было бы вообще круто, если бы это вылилось в полноценный курс с разбором современных библиотек глубокого обучения и реальными кейсами! Пока самые понятные объяснения, которые я слышал, ну и Ng конечно тоже хорош, но у него Octave( , а тут сразу на актуальном языке было бы вообще отличной.
На это пока что времени нету, но когда то на базе Хекслета возможно появиться =)
ну хотя бы простенький примерчик, вроде шняги которую можно было бы обучить отличать круг от квадрата, например.
Лучшее на русском, что смог найти. Благодарю. Продолжайте!
Спасибо!
А так спасибо тебе большое. Классное видео. Глеб умница тоже)
ДА ТЫ ПРОСТО БОГ АЛО СТОЛЬКО САЙТО И ВСЁ НЕПОНЯТНО КАК ТЫ ДОЛЖЕН ЗАПИСАТЬ ЭТИ ФОРМУЛЫ, А ТЫ ПРЯМ ПО ПАЛЬЦЕМ НА ПАЛЬЦАХ В 100 СТЕПЕНИ РАСФОРМУЛИРОВАЛ СПАСИБО МОЛОДЕЦ АЛЛО ЛУЧШИЙ
перечитал кучу литературы и видео но только после вашего понял что к чему одним словом супер!
+Vadim Zaytsev спасибо :)!
Супер!
Добрый день! Я только начала изучать нейросети. Программа на Jupyter Notebook обучила сеть , какой результат нужно выдавать в конце при определенных входных данных. Т.е. мы обучили сеть для того чтобы после введения новых данных предсказывать результаты с максимальной точностью. Правильно я поняла? Теперь у меня есть вопрос, как вводить данные для предсказания новых результатов?
Лайк поставлен. Пошел рекомендовать друзьям.)
Вобщим зацепила меня эта тема сильно, так как я сам начал писать алгоритм обратного распространения ошибки для многослойной сети. Чтож, понятное дело, я увидел множество неоднозначных проблем для себя, решение которых к стате я вижу по своему. Поэтому я сам ухожу на некоторое время в глубокое обучение, начинаю подымать литературу по этому вопросу, дабы повысить свой интелект для решения этой задачи.
Очень хороший ход =)
а какую дельту брать? ну например у нас несколько выходных нейронов
Доброго времени суток! Подскажите, пожалуйста, по поводу нахождения ошибки. В видео говорится, что ошибка находится из разности текущего результата и ожидаемого. Покопавшись в интернете и прочитав книгу Создаем нейронную сеть - Рашид Тарик, пишут, что ошибка это разница между желаемым(тренировочным) результатом и текущим. Может, я что-то не так понимаю?
просто охренеть! Автора в рай!
Грамотно!
Я правильно понимаю, в массиве train должны быть только 0 и 1? На нем и тренируется сеть. А при использовании, другим массивом/обьектом вставляются уже искомые данные?
Запутался просто. У меня есть набор данных, на которых нужно натренировать сеть, правильно ли их вставлять в train?
Блин, по такому хорошему рассуждению можно даже нейронку в Scratch забацать! Классно)
want to record this and upload on this channel;)?
@@KovalevskyiAcademy When i will can - i will)
SUPER!!!!
Вячеслав, а что если вместо Python использовать Scala? Это же не так больно, как Java, нет?
классное видео! а скажите пожалуйста как расчитать ошибку если выходной слой более 1 -ого нейрона?
сетка написана на 3 питоне? её можно где-то по заимствовать для своих тестов?
Сразу говорю спасибо авторам этого ролика, но у меня возник вопрос, что делать если кол-во нейронов на скрытом уровне тысячи? я имею ввиду как код писать? если я один хочу написать такую сеть, то я должен строчить день и ночь? или есть другой вариант?
Хотел спросить. Weight_delta это локальный минимум (градиент) функции?
Видео очень понравилось! Никогда не думал, что с помощью математических формул можно делать такие выкрутасы с обучением. Было бы идеально, если бы код был бы ещё и на других языках вроде С++, если это, конечно сильно не затруднит. Спасибо.
А смысл???
Тут суть есть, осталось только переписать через нужный язык.
огромное вам спасибо
это лучшее что я видел по нсхоть и не люблю питон
но вам все равно огромное спасибо
Добрый день! Играюсь с данным кодом, подскажите - как можно уже на этой обученной сети задать новый вход без известного исхода, чтоб она показала результат исходя из обучения?... :) Заранее спасибо!
если у меня полученный результат равен 0.8,а ожидаемый равен 1,получается error=0.8-1=-0.2.Меня очень смущает знак минус,следом в расчете дельта весов тоже будет отрицательное значение и т.д. Скажите,пожалуйста,что мы берем по модулю...
Есть подобные материалы по методу обучения генетическим алгоритмом?
for input_stat, correct_predict in train: SyntaxError: invalid syntax Указывает на двоеточие в конце. в чем проблема может быть?
А рекурентные сети так же подробно будут? :)
Да =)
Фух-х-х... Спасибо. Пересмотрел это видео до "дыр". Уже несколько дне ничего не получалось. НС не хотела учится... Сделал так, чтоб можно было указывать количество слоёв и нейронов в них.
Только, что нарисовал все эти "пути" обучения... Ну, короче, Я морознул малость еще в самом начале. :) Но все получилось! Даже может предсказывать значения не из выборки. :)
а у вас когда ошибку вычисляете надо наоборот error = expected-actual , во многих ресурсах видел именно обратное вычисление вашему ошибки.
Или я ошибаюсь?
День добрый, коллеги. Прогнозирую временной ряд в котором ответы числа примерно от 600 до 1600. И есть десяток значений около нуля. Метод обратного распространения ошибки в предложенном виде не прогнозирует эти вывалы в ноль. А если веса менять в плюс или минус перебором, уменьшая шаг, то вывалы в ноль успешно прогнозируются. Однако это очень затратно по времени и результат не стабилен.
Вопрос. Как модифицировать алгоритм обратного распространения, чтобы он минимизировал не абсолютное отклонение от результата, а процент. То есть не error=actual-expected, а error=(actual-expected)/actual (в таком виде не работает)
Спасибо за материал. Кто-нибудь, объясните что такое "дифференциал производная сигмоиды" в расчете дельты весов... В уравнении показано произведение функции сигмоиды на приращение её аргумента. Не понимаю.
Я тоже не понял сначала, по-моему это просто производная сигмоиды по х. Ошиблись при записи, видимо.
Запиши, пожалуйста, такое же понятное обьяснение про обучение без учителя!)
А как вычислять дельту с ошибкой если например 2 скрытых слоя и связи по весам от многих ко многим. Получается что нужно или среднюю дельту выводить или каждый раз переписывать что ли?
А что будет если поставить learning_rate 1? Формула сама за себя говорит, я немного не понимаю зачем замедлять обучение.
Добрый день. У меня вопрос по поводу формулы, по которой Вы рассчитываете дельту весов. Не могли бы Вы дать ссылку на источник, из которого была взята данная формула? Хотелось бы подробнее о ней почитать и узнать почему она имеет именно такой вид. Спасибо.
поищите мой комментарий под этим видео(по-поводу того "как распространять ошибку на болеее глубокие уровни"), он поможет разобраться.
Спасибо за подробный обзор работы сети и формул!
Но возникли вопросы:
- как проводить обучение нейросети,если ожидаемое значение неизвестно,например при прогнозировании погоды?
- где можно увидеть ваш код нейронки?
Тебе нужно рассмотреть все возможные варианты и добавить их на выход. Входные нейроны это условия/среда за которыми нейросеть наблюдает, что бы понять какой будет погода
Я себе так и представлял нейросеть, но вот обратный анализ это круто, можно сделать ещё интересней, но это на примере другом разбирать нужно, где больше трёх вариантов.
Выложите, пожалуйста, исходный код сети с обучением. В видео предлагаете самим пройти по строчкам и все разобрать, чтобы было понятнее!
s3-us-west-1.amazonaws.com/youtube-channel/nn_training_2_layer_network.ipynb - готово =)
а куда это нужно "запихать" чтобы было в читабельном виде? а за видосы большие пальцы вверх. спасибо
Это формат jupiter notebook. Закидываешь сюды try.jupyter.org
я так понимаю это для линукса?