Учимся обучать нейронные сети, за 30 минут от теории до практики.

  Рет қаралды 183,802

Kovalevskyi Academy

Kovalevskyi Academy

Күн бұрын

Пікірлер: 522
@EXPBET
@EXPBET 6 жыл бұрын
смотрю второе видео по данной теме.... сложилось четкое нейронное убеждение, что друг который все время говорит что ему понятно... на самом деле нихуа не понимает))))
@elxanelxanov258
@elxanelxanov258 5 жыл бұрын
U MENA TAKOYE JE OSUSENIYE
@АрсенийКривецкий
@АрсенийКривецкий 5 жыл бұрын
@@elxanelxanov258 Alt + Shift и Caps Lock
@donrumata5299
@donrumata5299 4 жыл бұрын
@@АрсенийКривецкий Win+Space
@gleb_bro8710
@gleb_bro8710 4 жыл бұрын
@@donrumata5299 alt + f4 или ctrl + w
@danya151mail
@danya151mail 3 жыл бұрын
++, мог бы много хороших вопросов позадавать
@kotnetrezviy
@kotnetrezviy 7 жыл бұрын
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)))
@АндрейВойтеховский-р4и
@АндрейВойтеховский-р4и 5 жыл бұрын
Лучший. Спасибо.
@SuleimanVatrushkin
@SuleimanVatrushkin 6 ай бұрын
Спасибо большое!
@alyukovnet
@alyukovnet 7 жыл бұрын
Делаю проект, связанный с нейронными сетями. Этот ролик всё понятно поясняет. Пока не нашёл аналогов в русском Ютубе. Большое спасибо
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
Спасибо!
@amalyshok
@amalyshok 6 жыл бұрын
привет. как успехи с проектом? тоже заинтересовался этой идеей. сейчас собираю крупицы знаний в русскоязычных источниках. интересно было бы пообщаться с человеком, который уже через все это прошел)
@taraun5258
@taraun5258 8 жыл бұрын
Очень подробное и самое лучшее описание нейросетей что я смог найти. Немного непривычно читать питон, и не люблю видео, ибо когда пытаешься сам что то сделать проще работать с текстовой информацией. Огромное Вам спасибо за курс. Надеюсь он будет продолжаться.
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
+Александр Петров и Вам спасибо ! Будем признательны за помощь с распространением:)
@sergeykorshunov9508
@sergeykorshunov9508 8 жыл бұрын
Самые толковые примеры из того, что мне до сих пор доводилось видеть. Спасибо!
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
и вам спасибо, будем очень благодарны если поможете распространить =)
@danyalmugutdinov7283
@danyalmugutdinov7283 8 жыл бұрын
Отличная идея с математикой. Просто изучать математику довольно скучно и если вы будете делать уроки по ML , оставляя ссылки на видео с объяснением применных математических терминов , то это будет просто изумительно. В общем я считаю, что имеет место делать уроки по математике в контексте ML
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
Думаем начать с урока о чем то простом вроде операций над векторами и том как numpy это упрощает а то возможно код может показаться немного непонятным при первом изучении.
@silentnight.official4261
@silentnight.official4261 4 жыл бұрын
Хороший формат, формирует интуиции для дальнейшего углубления в тему. Детали лучше понимаешь на родном языке, как ни крути.
@LS-oh6po
@LS-oh6po Жыл бұрын
У меня тоже все получилось!!!! Как интересно. Я правда очень простую программку на Питоне написал (только неделю назад изучил как на нем программировать), но все получилось. . 5000 итераций и learning rate 0.05. Огромное спасибо авторам за такое простое и гениальное объяснение непростого материала!!!
@sticktogether2326
@sticktogether2326 5 жыл бұрын
Переписал эту нейронку (пришлось потратить немало времени на понятие синтаксиса Python) на С++. При тех же вводных (5000 поколений и 0.08 learning_rate) ошибка сети на выходе 0.003. Спасибо огромное тебе за очень понятное объяснение. В ру сигменте найти человека, который так подробно может разжевать что и как делается - как иголку в стоге сена искать.
@Поворотна180
@Поворотна180 3 жыл бұрын
Ну наконец-то я увидел и услышал про функцию активации в понятной форме, спасибо автору. Для новичков супер! 3 месяца искал нормальное толкование!
@ilyakiselev113
@ilyakiselev113 7 жыл бұрын
Впервые вижу такой качественный контент по нейронным сетям! Я пошел учить питон...
@sergeychaban3321
@sergeychaban3321 5 жыл бұрын
Благодарю за доходчивое изложение и реальный пример обучения нейросети. Повторил всю методологию обучения нейросети из Вашего примера, но на Delphi 7. Правда, писал более универсальный и "тяжелый" код, под свои собственные задачи. Нейрон был описал отдельным классом, дабы потом можно было создавать произвольный массив из нейронов. В результате программа на Delphi те же 4000 эпох из примера "отработала" за 15 секунд (в Вашем примере на Питоне около 6 секунд). Оно может дело и в железе (у меня Celeron G1820 2.7GHz), но не думаю, что "причесывая" делфийский код, мне удастся сократить время выполнения в 2.5...3 раза. Т.е. налицо имеет место быть факт "заточенности" Питона под нейросети.
@mirlaniusUMK
@mirlaniusUMK 7 жыл бұрын
Отличнейший урок про нейросеть! Спасибо большое
@tehhasrussian5714
@tehhasrussian5714 2 жыл бұрын
Спасибо за подробный обзор работы сети и формул! Но возникли вопросы: - как проводить обучение нейросети,если ожидаемое значение неизвестно,например при прогнозировании погоды? - где можно увидеть ваш код нейронки?
@ДмитрийМолчанов-р2б
@ДмитрийМолчанов-р2б Жыл бұрын
Тебе нужно рассмотреть все возможные варианты и добавить их на выход. Входные нейроны это условия/среда за которыми нейросеть наблюдает, что бы понять какой будет погода
@KlimKovalenko
@KlimKovalenko 8 жыл бұрын
Пожалуй это лучшее толкование на русском языке, спасибо большое)
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
И вам спасибо большое!
@MrGerser
@MrGerser 7 жыл бұрын
Пожалуй лучше было бы слышать монолог. Глеб тут явно лишний.
@MisterKoK22
@MisterKoK22 5 жыл бұрын
@@MrGerser ничуть не лишний. Он как индикатор. Раз головой кивает, значит и другие слушатели будут понимать.
@infinity_eror
@infinity_eror 4 жыл бұрын
Поддерживаю - самое толковое видео.
@KiraLis39
@KiraLis39 4 жыл бұрын
@@MisterKoK22 да ничерта не понятно никому, и ему самому, похоже. херовый индикатор либо просто бесит.
@1000milliwatt
@1000milliwatt 7 жыл бұрын
Лучшее видео, чтобы понять что такое нейросеть, и как работает метод с нуля. Краем глазом просматриваю подобные видео давно, но именно понял как работает это метод только с этим виде.
@alexk5636
@alexk5636 8 жыл бұрын
Мега круто . Хочу еще . Больше примеров . Тема зашла, было интересно.Спасибо большое. Интересен был бы пример с определением того что находится на изображении. P.S. Жаль в универе мне не так статы и кванты объясняли.
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
Спасибо большое. А в какомы вы универе?
@alexk5636
@alexk5636 7 жыл бұрын
Одесский национальный университет, физический факультет . Уже окончил. Решил расширить горизонты и изучить Java в чем ваши курсы несомненно помогают, а тут еще и тема интересная.
@vadimpervouralsk
@vadimpervouralsk 7 жыл бұрын
Спасибо чувак, первый раз нормальное объяснение нашёл
@sergeydemidov1112
@sergeydemidov1112 4 жыл бұрын
Ребят, спасибо вам большое. Я около десяти видео просмотрел, что бы это найти. Обучение нигде не объясняют. Все или в магию готовых библиотек уходят или просто молча опускают. Очень понятно. Даже если не понимать что такое сигмоида и производная :)
@1stface
@1stface 4 жыл бұрын
Спасибо парням за видео. Пожалуй , изложение материала понятней чем здесь , я нигде не видел. Возможно , в силу своей восприимчивости. Наконец-то бахнул свою первую нейронку для игрового бота, счастью нет предела))
@NoodLez0000
@NoodLez0000 6 жыл бұрын
Пока что, лучшее обьяснение метода обратного распространения ошибки, которое встречал в интернете.
@ИльяГайдуков-ш1ц
@ИльяГайдуков-ш1ц 3 жыл бұрын
Спасибо за материал. Кто-нибудь, объясните что такое "дифференциал производная сигмоиды" в расчете дельты весов... В уравнении показано произведение функции сигмоиды на приращение её аргумента. Не понимаю.
@АндрейИванцивский
@АндрейИванцивский 7 жыл бұрын
Круто!Нечасто можно найти такой полезный контент.Однозначно лайк
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
Спасибо!
@theos1489
@theos1489 6 жыл бұрын
11:15 sigmoid(x)dx = f'(x)dx, в такой записи сигмоида - уже производная при дифф. 1- форме. Правильно так - sigmoid'(x)dx=sigmoid(x)(1-sigmoid(x))dx
@vladimirleonenko6284
@vladimirleonenko6284 4 жыл бұрын
Одно из лучших демо нейросети, еще есть несколько других уроков, которые вместе позволяют хорошо усвоить тему
@ashwhwhdh
@ashwhwhdh 2 жыл бұрын
Подскажите, а данный алгоритм подходит для обучения нейросети распознаванию цифр ? В случае если несколько выходных нейронов, схема таже самая ?
@drimeF0
@drimeF0 4 жыл бұрын
Лучший курс в мире, все понятно и ясно. Спасибо за курс
@danyalmugutdinov7283
@danyalmugutdinov7283 8 жыл бұрын
Поделюсь, расскажу друзьям, покажу девушкею. Что угодно, только продолжай , прошу тебя =)
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
Спасибо большое, чем больше просмотров тем больше у нас стимула продолжать делать видео на эту тему =)
@ГенаКрок-з9д
@ГенаКрок-з9д 7 жыл бұрын
Видео очень понравилось! Никогда не думал, что с помощью математических формул можно делать такие выкрутасы с обучением. Было бы идеально, если бы код был бы ещё и на других языках вроде С++, если это, конечно сильно не затруднит. Спасибо.
@Roman_Gennadevich
@Roman_Gennadevich 3 жыл бұрын
А смысл??? Тут суть есть, осталось только переписать через нужный язык.
@Iknowwhoateallthedonutsfromthe
@Iknowwhoateallthedonutsfromthe 4 жыл бұрын
Блин, по такому хорошему рассуждению можно даже нейронку в Scratch забацать! Классно)
@KovalevskyiAcademy
@KovalevskyiAcademy 4 жыл бұрын
want to record this and upload on this channel;)?
@Iknowwhoateallthedonutsfromthe
@Iknowwhoateallthedonutsfromthe 4 жыл бұрын
@@KovalevskyiAcademy When i will can - i will)
@N1nemaN
@N1nemaN 7 жыл бұрын
Лучшее на русском, что смог найти. Благодарю. Продолжайте!
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
Спасибо!
@ЕвгенийЛопаткин-ю9с
@ЕвгенийЛопаткин-ю9с 7 жыл бұрын
Большое спасибо. Очень помогает разобраться с основными принципами.
@syntes5681
@syntes5681 5 жыл бұрын
Мне бы такого друга, который может слушать рассказ в течение получаса и более )
@vitalikvitalik9765
@vitalikvitalik9765 7 жыл бұрын
Вот это я понимаю, понятно и с примерами!!! пойду смотреть дальше и показывать всем =)
@orthodox_channel
@orthodox_channel 2 жыл бұрын
Добрый день, дайте пожалуйста ссылку на материал по производным.
@retret4538
@retret4538 7 жыл бұрын
ДА ТЫ ПРОСТО БОГ АЛО СТОЛЬКО САЙТО И ВСЁ НЕПОНЯТНО КАК ТЫ ДОЛЖЕН ЗАПИСАТЬ ЭТИ ФОРМУЛЫ, А ТЫ ПРЯМ ПО ПАЛЬЦЕМ НА ПАЛЬЦАХ В 100 СТЕПЕНИ РАСФОРМУЛИРОВАЛ СПАСИБО МОЛОДЕЦ АЛЛО ЛУЧШИЙ
@filinsstudio7530
@filinsstudio7530 7 жыл бұрын
Вобщим зацепила меня эта тема сильно, так как я сам начал писать алгоритм обратного распространения ошибки для многослойной сети. Чтож, понятное дело, я увидел множество неоднозначных проблем для себя, решение которых к стате я вижу по своему. Поэтому я сам ухожу на некоторое время в глубокое обучение, начинаю подымать литературу по этому вопросу, дабы повысить свой интелект для решения этой задачи.
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
Очень хороший ход =)
@hikkarion
@hikkarion 8 жыл бұрын
Отличные уроки, было бы вообще круто, если бы это вылилось в полноценный курс с разбором современных библиотек глубокого обучения и реальными кейсами! Пока самые понятные объяснения, которые я слышал, ну и Ng конечно тоже хорош, но у него Octave( , а тут сразу на актуальном языке было бы вообще отличной.
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
На это пока что времени нету, но когда то на базе Хекслета возможно появиться =)
@easyelectronicsru
@easyelectronicsru 7 жыл бұрын
ну хотя бы простенький примерчик, вроде шняги которую можно было бы обучить отличать круг от квадрата, например.
@СтасСавинкин
@СтасСавинкин 3 жыл бұрын
Отличное видео, не скажу что все объясненно досконально но разобраться очень помогло. Спасибо!
@Mar_chella
@Mar_chella Жыл бұрын
Супер! Очень понятный и полезный контент . Благодарю автора
@HellbringerOnline
@HellbringerOnline 7 жыл бұрын
А зачем нужен чувак, которому всё понятно и всегда говорит да? =) Хотя бы поспрашивал мол веса что такое поподробнее можно?.
@IgorAherne
@IgorAherne 7 жыл бұрын
ребята, много вопросов в коментариях по-поводу того "как распространять ошибку на болеее глубокие уровни" Вот на простом языке: Будет проще если абстрагировать механизм; Финальная ошибка всей сети это огромная функция, которая зависит от множества параметров (всех весов и всех активаций наших нейронов) Чтобы минимизировать ее, нам нужно понять куда подкрутить ее параметры, найдя специально значение для каждого такого параметра. Допустим у нас 3 слоя в которых 2,2,1 нейронов соответственно. То есть (2 + 2*2 + 2)весов и (2+2+1)активаций самих нейронов = 8 весов и 5 нейронов Легко предположить что Финальная Ошибка зависит от 8 + 5 параметров. Однако это неверно. Вместо этого, нам лучше представить Финальную ошибку как функцию зависящую только от 1го параметра. Она зависит от активации последнего нейрона и не от чего более. После этого важно понимать, что этот финальный нейрон - это тоже функция. Она зависит от 4х параметров. От активации нейрона1 с предыдущего слоя и его веса, а также активации нейрона2 и его веса. *"как распространять ошибку на болеее глубокие уровни"* На этом история не заканчивается, нейрон1 это функция зависящая от субНейрона1 и субНейрона2, которые со слоя ниже. тоесть нейрон1 зависит от 4 параметров (из 2 весов и 2х активаций) нейрон2 (собрат нейрона 1) это функция зависящая от субНейрона1 и субНейрона2, которые со слоя ниже. тоесть нейрон2 зависит от 4 параметров (из 2 весов и 2х активаций) заметь, что нейрон1 и нейрон2 вроде-бы зависят от одинаковых параметров (из 2 весов и 2х активаций субНейрона1 и субнейрона2), однако это обманчиво. вес и активация субНейрона1 изначально влияла отдельно на нейрон1 и отдельно на нейрон2. Та же ситуация и с субНейроном2, который тоже влиял отдельно на нейрон1 и отдельно на нейрон2. *Поэтому, мы их расцениваем как 8 отдельных параметров, а не как 4 shared. Иными словами, нейрон1 зависит от 4х параметров, и нейрон2 зависит от своих 4х параметров)* Вобще, со всеми этими вложенными функциями, лучше всего нарисовать диаграмму-дерево, где каждый параметр (даже если это функция) это веточка *ответ: советую нарисовать диаграмму* Внимание на цифры, тут никакой опечатки нет: ошибка для активации к субнейрону1 = (ошибка пропихнутая через производную сигмоида нейрона1)*весНейрон1Субнейрон1 + (ошибка ошибка пропихнутая через производную сигмоида нейрона2)*весНейрон2Субнейрон1 После этого пропихиваем ее через производную сигмоида СубНейрона1 (как показанно в видео) и пихаем до весов под субНейроном1 (как показано в видео) *ключевая фраза* Это так потому что активация субНейрона1 (будучи одним и тем же значением) отдельно повлияла на исход (на результат Финальной Ошибки в стадии предугадывания), через нейрон1 и через нейрон2 (став параметром для каждого из них)
@максимн-о8м
@максимн-о8м 5 жыл бұрын
никогда больше не берись ничего объяснять, не твое это. Тебя поймут только те, кто и так уже без тебя разобрался, а те кто не в теме, тебя не поймут. Не учитель ты
@vadimzaytsev7176
@vadimzaytsev7176 7 жыл бұрын
перечитал кучу литературы и видео но только после вашего понял что к чему одним словом супер!
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
+Vadim Zaytsev спасибо :)!
@АндрейВойтеховский-р4и
@АндрейВойтеховский-р4и 4 жыл бұрын
Было бы неплохо продолжить данную тему, очень хороший спрос.
@gentleNES
@gentleNES 8 жыл бұрын
Выложите, пожалуйста, исходный код сети с обучением. В видео предлагаете самим пройти по строчкам и все разобрать, чтобы было понятнее!
@KovalevskyiAcademy
@KovalevskyiAcademy 8 жыл бұрын
s3-us-west-1.amazonaws.com/youtube-channel/nn_training_2_layer_network.ipynb - готово =)
@murikoz5399
@murikoz5399 7 жыл бұрын
а куда это нужно "запихать" чтобы было в читабельном виде? а за видосы большие пальцы вверх. спасибо
@alyukovnet
@alyukovnet 7 жыл бұрын
Это формат jupiter notebook. Закидываешь сюды try.jupyter.org
@MrAkvalar
@MrAkvalar 7 жыл бұрын
я так понимаю это для линукса?
@slysuslik
@slysuslik 6 жыл бұрын
Просто супер и все понятно! Спасибо за такие интересные и понятные видео!
@torbokovsanat
@torbokovsanat 4 жыл бұрын
респект за видео, отдельно за юмор ))) 8:45 - запихиваем незапихуемое )))
@Hunter6745
@Hunter6745 6 жыл бұрын
а какую дельту брать? ну например у нас несколько выходных нейронов
@nurlannurmash4155
@nurlannurmash4155 2 жыл бұрын
Спасибо вам за видео, лучшие!
@ukratitelkisok9726
@ukratitelkisok9726 2 жыл бұрын
Определённо лучшие видео в русском ютуб, спасибо
@dimalektor
@dimalektor Жыл бұрын
Доброго времени суток! Подскажите, пожалуйста, по поводу нахождения ошибки. В видео говорится, что ошибка находится из разности текущего результата и ожидаемого. Покопавшись в интернете и прочитав книгу Создаем нейронную сеть - Рашид Тарик, пишут, что ошибка это разница между желаемым(тренировочным) результатом и текущим. Может, я что-то не так понимаю?
@fedorchernolutsky146
@fedorchernolutsky146 6 жыл бұрын
Чего-то голова уже не работает. Видео супер!)
@МихаилБурмистров-е3б
@МихаилБурмистров-е3б 7 жыл бұрын
Если я правильно помню, тот же Ng постоянно говорит, что корректировка весов должна производится одновременно. То есть скорректировать веса мы можем только после того, как посчитаем все ошибки. Иначе у нас на коррекцию предыдущего скрытого слоя появлияет коррекция текущего, хотя ошибка была получена при нескорректированном весе.
@Xpect1337
@Xpect1337 7 жыл бұрын
Potryasayusheye video!! Ogromnoe spasibo!
@egormarkin858
@egormarkin858 4 жыл бұрын
Объясняет очень сложную вещь как на духу!! Спасибо
@kirylkudrautsau896
@kirylkudrautsau896 7 жыл бұрын
Господа, сегодня знаменательный день. Стало понятно! Огромное спасибо за материал.
@Riderwin
@Riderwin 7 жыл бұрын
Очень интересно, огромное спасибо ! , надеюсь это не последнее видео )
@gerda-morozova
@gerda-morozova 3 жыл бұрын
Хотел спросить. Weight_delta это локальный минимум (градиент) функции?
@musicits_fun
@musicits_fun 8 жыл бұрын
А рекурентные сети так же подробно будут? :)
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
Да =)
@alexanderten9540
@alexanderten9540 Жыл бұрын
Трайт состоит из двух элементов по три проверочные линии каждый. То есть не перебор единиц и нулей, а проверочная линия, т.е. только одно значение равно единице, остальные две линии соответственно обнуляютя.
@dmitriytyurnin4605
@dmitriytyurnin4605 7 жыл бұрын
Браво! Отправил друзьям!
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
+Dmitry Tyurnin спасибо!
@Herclia
@Herclia 7 жыл бұрын
Продолжаю смотреть Ваши уроки. Рассказал всем кому мог !!! По ходу, возник вопрос. Получается, что под каждую проблему надо строить свою нейронную сеть?! Например, продаем обувь - кому и что показывать, поисковый запрос, самоуправляемый автомобиль, возможные недомогания по ДНК. Т.е. верно ли высказывание, что в основе нейронных сетей лежат стандартные алгоритмы, но 'сетки', которые необходимо считать абсолютно разные и искусство заключается в том, чтобы создать нейронную сеть максимально близко описывающую проблему и подобрать( рассчитать ) веса. Спасибо.
@DrLugaro
@DrLugaro 7 жыл бұрын
Боже мой, дня 3 не мог понять почему сеть не сходится, столько всего перечитал, а это видео вообще по секунде помню.. Один мать его символ!! При подсчете весов первого слоя в цикле проходил не по 3 элементам, а по 2вум, банальная опечатка... и самое забавное что сеть ошибалась примерно на 90% Автору видео большое спасибо, из того что я видел, это пожалуй лучшее вводное видео для понимания "Как это работает"
@ThA891
@ThA891 4 жыл бұрын
просто охренеть! Автора в рай!
@arsenthompson
@arsenthompson 4 жыл бұрын
а у вас когда ошибку вычисляете надо наоборот error = expected-actual , во многих ресурсах видел именно обратное вычисление вашему ошибки. Или я ошибаюсь?
@VirtualSUN
@VirtualSUN 7 жыл бұрын
Фух-х-х... Спасибо. Пересмотрел это видео до "дыр". Уже несколько дне ничего не получалось. НС не хотела учится... Сделал так, чтоб можно было указывать количество слоёв и нейронов в них. Только, что нарисовал все эти "пути" обучения... Ну, короче, Я морознул малость еще в самом начале. :) Но все получилось! Даже может предсказывать значения не из выборки. :)
@alexpaskal8345
@alexpaskal8345 5 жыл бұрын
Спасибо огромное! Это поистине самое понятное объяснение
@ПавелШаламов-ж3д
@ПавелШаламов-ж3д 4 жыл бұрын
17:00 почему Вы сначала вводите поправку в веса (правите веса) между скрытым слоем и выходным, а потом с помощью обратного распространения находите ошибку скрытого слоя используя уже отрегулированные веса между скрытым и выходным? Разве неправильно сделать наоборот? Т.е. сначала определить ошибки всех слоёв нейросети (выходной, скрытый, входной), а потом править веса каждого из слоёв методом градиентного спуска? Например у Тарик Рашида в книге про нейронки обучение происходит по второму способу (находим ошибки во всех слоях нейронов, а затем вводим поправки весов во всех слоях) Я не понимаю кто прав...
@alexeykonyagin9916
@alexeykonyagin9916 7 жыл бұрын
Отличный урок, спасибо!
@slavas9200
@slavas9200 5 жыл бұрын
Спасибо огромное! Наконец, по теме, а то везде сплошная реклама облаков с черными ящиками.
@mr.goldenman2403
@mr.goldenman2403 2 жыл бұрын
спасибо вам большое, у вас самое понятное объяеснение, которое я нашел
@RovshanMusayev
@RovshanMusayev 7 жыл бұрын
А нельзя ли написат алгоритм чтобы подобрать самого "epochs" и "learning_rate" для того чтобы добится "training_loss" ближе к "0" чтобы программа сама решала какое "epochs" и "learning_rate" лучше подходит к етому задацу и при етом исклюцат ручного работу полностю?
@IgorAherne
@IgorAherne 7 жыл бұрын
Можно, например алгоритм iRprop+ хранит отдельно learning_rate для каждого веса. Сходится за 50 итераций, в то время как обычная сетка (с моментумом) сходилась бы за 10 000. Но увы, iRporp+ нельзя использовать для Стохастического Градиентного спуска, т.е разрешается корректировать только когда все примеры были прогнанны через forward_pass
@amalyshok
@amalyshok 6 жыл бұрын
Igor Aherne а что, если постепенно уменьшать learning_rate, тем самым экспоненциально настраивать нашу сеть? к примеру "грубо" настроить за небольшое количество итераций для начала, а уже после этого сохраненную сеть настраивать более "тонко" ?
@ЛеонидМальцев-с3п
@ЛеонидМальцев-с3п Жыл бұрын
Привет, Глеб и Вячеслав! Как можно вставить в мягкую игрушку нейронную сеть и начать её обучать человеку, который не умеет пользоваться компьютером? Предполагается что обучение будет проходить только через диалог, и если нужно подтвердить правильность выбора, то тоже через диалог или на крайний вариант две кнопки на мягкой игрушке "Да" или "Нет". Может такая игрушка уже создана и недорого состоит? Сколько будут стоить недорогие компоненты что бы мягкую игрушку снабдить всем необходимым?
@rrraaa9854
@rrraaa9854 3 жыл бұрын
Скажите нормально где вы берёте для этих обучающихся память??просто честно скажите
@Волчара-п3о
@Волчара-п3о 6 жыл бұрын
Я себе так и представлял нейросеть, но вот обратный анализ это круто, можно сделать ещё интересней, но это на примере другом разбирать нужно, где больше трёх вариантов.
@simplex1233
@simplex1233 7 жыл бұрын
Почему при вычислении output1 вы указываете 0.77? Тогда что под этим параметром для вычисления весов первого слоя необходимо брать ? Остаются только нули и единицы (входные сигналы)
@simplex1233
@simplex1233 7 жыл бұрын
Надо было бы пояснить этот момент в конце
@ddrdeveloper
@ddrdeveloper 7 жыл бұрын
Наверное так и есть, просто брать входные сигналы. Нужно, конечно было бы объяснить на рисунке все до конца, так как лично я на PHP все это реализовываю и Питон для меня просто абракадабра..)))
@darkfrei2
@darkfrei2 4 жыл бұрын
17:00 - а если у четвёртого нейрона было бы несколько синапсов, например к двум выходным нейронам, ошибка бы этого нейрона была бы просто суммой ошибок?
@МаркНоркин-г9т
@МаркНоркин-г9т 4 жыл бұрын
добрый день, вы нашли ответ на этот вопрос?
@darkfrei2
@darkfrei2 4 жыл бұрын
@@МаркНоркин-г9т вроде бы да E_total= E_o1 + Eo2 - суммарная ошибка E_o1 = (1/n)(value - taкget_value)² - ошибка первого выходного нода n=2, так как два выхода сети
@6556
@6556 Жыл бұрын
А как вычислять дельту с ошибкой если например 2 скрытых слоя и связи по весам от многих ко многим. Получается что нужно или среднюю дельту выводить или каждый раз переписывать что ли?
@ФотихХакимов
@ФотихХакимов 3 жыл бұрын
Я наверное прослушал и не могу найти объяснение в ролике к одному мою вопросу: почему активационной функцией используется сигмоидная функция? Объясните, пожалуйста
@OOOJohnJ
@OOOJohnJ Жыл бұрын
10:09 В этом моменте не понятно, почему при умножении ошибки на производную по dx в качестве x взяли снова величину ошибки при расчёте? Тогда в формуле должно быть error * sigmoid(error)dx
@nighthunter28
@nighthunter28 Жыл бұрын
все там верно
@IT_business_in_Russia
@IT_business_in_Russia 6 жыл бұрын
Спасибо за Ваш труд, все очень подробно и понятно
@integer222
@integer222 8 жыл бұрын
Добрый вечер. А если предположим что из скрытого слоя от нейрона 1 идут несколько связей к двум другим нейронам. Тогда получатся, что мы будем править веса нейрона 1 два раза ?
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
два раза, но каждый раз только один вес, если от первого нейрона иет два соединения то сначала нужно поправить евса соединения №1 а затем соединения №2.
@integer222
@integer222 7 жыл бұрын
спасибо
@Destrovi4
@Destrovi4 7 жыл бұрын
Как будет проходить обучение если скрытых уровней больше чем 1? В этом случае получается что у нейрона несколько ошибок.
@Kavicon
@Kavicon 7 жыл бұрын
Да, действительно, Вячеслав не упомянул о дальнейшем распространение ошибки, но тут описан этот момент самым понятным способом. Математики вообще нету что делает это понятным сразу, для даже не разбирающемся в этом человека. robocraft.ru/blog/algorithm/560.html
@IgorAherne
@IgorAherne 7 жыл бұрын
Финальная ошибка это механизм зависящий от выхлопа нейрона в последнем уровне; нейрон в последнем уровне (-1) это тоже механизм (попроще), который зависит от двух нейронов в предыдущем уровне (-2) Каждый такой нейрон на предыдущем уровне (-2) это тоже механизм, результат которого зависит от того что дали нейроны из еще более старого уровня (-3) Таким образом, получаеться что финальная ошибка зависит от всех вложенных друг в друга механизмов; Ошибка у нейрона остается такой же, но если мы спускаемся на более глубокие уровни, для тех нейронов она "обрастает" дополнительными ошибками
@zhannashangitova
@zhannashangitova 5 жыл бұрын
Добрый день! Я только начала изучать нейросети. Программа на Jupyter Notebook обучила сеть , какой результат нужно выдавать в конце при определенных входных данных. Т.е. мы обучили сеть для того чтобы после введения новых данных предсказывать результаты с максимальной точностью. Правильно я поняла? Теперь у меня есть вопрос, как вводить данные для предсказания новых результатов?
@БатончикСникрес
@БатончикСникрес 7 жыл бұрын
Спасибо большое, очень доходчиво рассказано) Лайк, подписка)
@KovalevskyiAcademy
@KovalevskyiAcademy 7 жыл бұрын
+Батончик Сникрес спасибо:)!
@АрсенийКривецкий
@АрсенийКривецкий 5 жыл бұрын
Вопрос: когда мы распространяем ошибку, в вашем примере, когда мы переходим на скрытый слой, надо заново дельту считать?
@ЮрийЛогунов-ь8б
@ЮрийЛогунов-ь8б 5 жыл бұрын
да, дельта1 = err1*sigmoid(x1)*(1-sigmoid(x1)) = 0.07*0.77*(1-0.77)=0.01 дельта 2 = err2*sigmoid(x2)*(1-sigmoid(x2)) = 0.07*0.78(1-0.78)=0.01
@АртурИдрисов-р8л
@АртурИдрисов-р8л 2 жыл бұрын
Если мы знаем все возможные комбинации и исходы для каждой комбинации (массив train) мы можем создать булеву функцию, которая будет точно выдавать нужный нам результат при всех возможных входных параметров. Соответственно спрашивается для чего нужна нейронка в данном случае?
@dimadovg2824
@dimadovg2824 5 жыл бұрын
Спасибо большое. Очень наглядно. Единственный минус - в видео показано обратное распространение ошибки только для выходного слоя. Для скрытых слоев пришлось искать информацию ещё где-то
@РоманМышко-ж2г
@РоманМышко-ж2г 7 жыл бұрын
Спасибо! Наконец-то понял про нейронные сети
@victorbasanets2939
@victorbasanets2939 7 жыл бұрын
Здравствуйте. Я наверное что-то путаю но вопрос следующий, выражение типа sigmoid(x) dx означает производную функции sigmoid или её дифференциал? Если первое то что тогда d sigmoid / dx, так как выражение sigmoid(x) (1 - sigmoid(x)) это результат вычисления производной данной функции
@MrAkvalar
@MrAkvalar 7 жыл бұрын
а производная и дифференциал это не одно и то же?
@user-xl2tf4gq1g
@user-xl2tf4gq1g 5 жыл бұрын
@@MrAkvalar одно и то же
@Эндоскоп
@Эндоскоп 7 жыл бұрын
А при инициализации сети с равными весами пробовали? вроде бы логично дать каждому нейрону равный вес = 1/ЧислоНейроновСлоя, чтоб обучение меньше тужилось и быстрой веса встали на места
@pie4928
@pie4928 Жыл бұрын
А это идея ! А то у меня какой-то абсурд с весами.
@dosxanzada
@dosxanzada 6 жыл бұрын
Так круто объясняешь, первое видео совсем улёт, то что я не мог понять за один семестр понял всего лишь за пол часа. А здесь у меня вопрос, откуда появился 0.5 и 0.52? Это тоже рандомно?
@eduardsukhavenka9750
@eduardsukhavenka9750 5 жыл бұрын
Yes
@andreybudnikov5920
@andreybudnikov5920 5 жыл бұрын
Я правильно понимаю, в массиве train должны быть только 0 и 1? На нем и тренируется сеть. А при использовании, другим массивом/обьектом вставляются уже искомые данные? Запутался просто. У меня есть набор данных, на которых нужно натренировать сеть, правильно ли их вставлять в train?
@vsevolodpletnev1184
@vsevolodpletnev1184 7 жыл бұрын
Вот вы посчитали ошибки для нейронов на выходном слое, это просто. Пересчитали их веса, это тоже просто. Далее, вы считаете ошибки для нейронов скрытого слоя, их 2 и т.к. на выходном слое всего один нейрон, на каждый из этих двух нейронов скрытого слоя - придет всего по одной ошибке. А вот и сам вопрос: а что, если мне на один из нескольких нейронов скрытого слоя, придет сразу две ошибке (от каждого из двух нейронов выходного слоя, к примеру) - как с ними быть? Использовать последовательно каждую ошибку или взять их среднее арифметическое? Буду очень рад, если вы поведаете как быть с пред идущими слоями, ведь там на один нейрон может придти сразу несколько ошибок от нейронов следующего слоя. Заранее вас благодарю.
@IgorAherne
@IgorAherne 7 жыл бұрын
Будет проще если абстрагировать механизм; Финальная ошибка всей сети это огромная функция, которая зависит от множества параметров (всех весов и всех активаций внутри наших нейронов) Чтобы минимизировать ее, нам нужно понять куда подкрутить ее параметры, найдя специально значение для каждого такого параметра. Допустим у нас 3 слоя в которых 2,2,1 нейронов соответственно. То есть (2 + 2*2 + 2)весов и (2+2+1)активаций самих нейронов = 8 весов и 5 нейронов Легко предположить что Финальная Ошибка зависит от 8 + 5 параметров. Однако это неверно. Вместо этого, нам лучше представить Финальную ошибку как функцию зависящую только от 1го параметра. Она зависит от активации последнего нейрона и не от чего более. После этого важно понимать, что этот финальный нейрон - это тоже функция. Она зависит от 4х параметров. От активации нейрона1 с предыдущего слоя и его веса, а также активации нейрона2 и его веса. *:твой вопрос:* На этом история не заканчивается, нейрон1 это функция зависящая от субНейрона1 и субНейрона2, которые со слоя ниже. тоесть нейрон1 зависит от 4 параметров (из 2 весов и 2х активаций) нейрон2 (собрат нейрона 1) это функция зависящая от субНейрона1 и субНейрона2, которые со слоя ниже. тоесть нейрон2 зависит от 4 параметров (из 2 весов и 2х активаций) заметь, что нейрон1 и нейрон2 вроде-бы зависят от одинаковых параметров (из 2 весов и 2х активаций субНейрона1 и субнейрона2), однако это обманчиво. вес и активация субНейрона1 изначально влияла отдельно на нейрон1 и отдельно на нейрон2. Та же ситуация и с субНейроном2, который тоже влиял отдельно на нейрон1 и отдельно на нейрон2. *Поэтому, мы их расцениваем как 8 отдельных параметров, а не как 4 shared. Иными словами, нейрон1 зависит от 4х параметров, и нейрон2 зависит от своих 4х параметров)* Вобще, со всеми этими вложенными функциями, лучше всего нарисовать диаграмму-дерево, где каждый параметр (даже если это функция) это веточка *ответ: советую нарисовать диаграмму* Внимание на цифры, тут никакой опечатки нет: ошибка для активации к субнейрону1 = (ошибка пропихнутая через производную сигмоида нейрона1)*весНейрон1Субнейрон1 + (ошибка ошибка пропихнутая через производную сигмоида нейрона2)*весНейрон2Субнейрон1 После этого пропихиваем ее через производную сигмоида СубНейрона1 (как показанно в видео) и пихаем до весов под субНейроном1 (как показано в видео) *ключевая фраза* Это так потому что активация субНейрона1 (будучи одним и тем же значением) отдельно повлияла на исход (на результат Финальной Ошибки в стадии предугадывания), через нейрон1 и через нейрон2 (став параметром для каждого из них)
@MrAkvalar
@MrAkvalar 7 жыл бұрын
Напишите пожалуйста формулу для исправления конкретных весов. Уточняю: К примеру на Нейрон N1 поступили ошибки с верхнего слоя от 3 нейронов Err1, Err2, Err3 проходя при этом через связи с весами W1, W2, W3 как этому нейрону рассчитать свою дельта весов? Выходное значение нейрона - N1.output Входящие в него веса: N1.W1 ; N1.W2 ; N1.W3 ; N1.W4...... ; И соответственно как будут корректироваться веса входящих в него связей?
@IgorAherne
@IgorAherne 7 жыл бұрын
если Err1 и тд уже прошли сквозь свои уникальные веса, то остается сделать следующее: delta_n1 = sigmoid_derivative() * (Err1 + Err2 + Err3) Не забудьте что sigmoid_derivative() вычисляется с тем же значением которое было вставлено в sigmoid() при forward-pass
@yehornaumenko2183
@yehornaumenko2183 6 жыл бұрын
А почему именно так это считается? Я вижу, что результат потихоньку лучше и лучше, но есть ли математическое(или хоть какое-то)объяснение?
@KOKERzeroZEROseven
@KOKERzeroZEROseven 6 жыл бұрын
Егор Науменко Напишите пожалуйста, как у вас весы корректируются?
@irinaira7127
@irinaira7127 7 жыл бұрын
Добрый день. У меня вопрос по поводу формулы, по которой Вы рассчитываете дельту весов. Не могли бы Вы дать ссылку на источник, из которого была взята данная формула? Хотелось бы подробнее о ней почитать и узнать почему она имеет именно такой вид. Спасибо.
@IgorAherne
@IgorAherne 7 жыл бұрын
поищите мой комментарий под этим видео(по-поводу того "как распространять ошибку на болеее глубокие уровни"), он поможет разобраться.
@wowonder3639
@wowonder3639 2 жыл бұрын
А что будет если поставить learning_rate 1? Формула сама за себя говорит, я немного не понимаю зачем замедлять обучение.
@АртемВіннік
@АртемВіннік 4 жыл бұрын
Как у вас получилось вывести весса которые подобрала нейронка?
@vvv228
@vvv228 5 жыл бұрын
Респект тобі! Якби не ці відоси, я б не розібрався. Лайк!
@СтрельцовНикита-р8э
@СтрельцовНикита-р8э 2 жыл бұрын
Здравствуйте, понимаю, что видео записано давным-давно, но может быть кто-то знает, почему именно такой способ определения ошибки выбрали авторы? Просто я во многих источниках вижу способ через частные производные, поэтому хочу уточнить.
@sergeyn310
@sergeyn310 3 жыл бұрын
А дайте ссылочку на предыдущее виде по теме пожалуйста
Нейросеть. Самый детальный гайд.
32:23
Уже Наступило
Рет қаралды 246 М.
БАБУШКА ШАРИТ #shorts
0:16
Паша Осадчий
Рет қаралды 4,1 МЛН
24 Часа в БОУЛИНГЕ !
27:03
A4
Рет қаралды 7 МЛН
[DeepLearning | видео 1] Что же такое нейронная сеть?
19:00
3Blue1Brown translated by Sciberia
Рет қаралды 818 М.
Нейронная сеть. Пытаюсь познакомиться. Часть 1.
20:05
foo52ru ТехноШаман
Рет қаралды 250 М.
Deep learning на пальцах 3 - Нейронные сети
1:32:25
Лекция. Сверточные нейронные сети
50:11
Deep Learning School
Рет қаралды 57 М.
Обучение нейронной сети на Python
21:34
Дмитрий Коробченко
Рет қаралды 63 М.
БАБУШКА ШАРИТ #shorts
0:16
Паша Осадчий
Рет қаралды 4,1 МЛН