Кажется я понял почему под вашими видео не так много лайков, как они того заслуживают - люди так хотят увидеть очередное прекрасное изложение материала, что спешат смотреть следующее видео! ))
В 8 уроке по распознаванию изображения цифр я не нормализовал данные. На выходе получалась точность около 20% и выскоий средний квадрат отклонений. Вставил batch-нормализацию через каждый слой (у меня было 3 слоя). Результаты выросли до 97% точности и 0.02 среднего квадрата. Потом нормализовал данные, делением массивов на 255 и особо ничего не поменялось. Заменяет ли батч-нормализация предварительную нормализацию данных? А там ещё есть послойная нормализация layers. Вопросов много, реальных ответов только три...
Да, batch-нормализация действительно нормализует данные, поэтому можно её использовать в качестве первого слоя, чтобы не заниматься нормализацией вручную, хотя тестовую и оценочные выборки всё равно придётся нормализовать самостоятельно)
Спасибо за урок! Я сделал некоторые выводы и интересно ваше мнение. Прежде всего хочу убедиться, правильно ли я понял урок. В начале урока вы сказали, что этот алгоритм был предложен для решения проблемы ускорения обучения. Кажется я понял в чем состоит это ускорение и интересно ваше мнение. Мы по сути для значений на выходах нейронов производим z-стандартизацию, и тем самым каждый выход на нейроне интерпретируем как то, на сколько стандартных отклонений от среднего это значение отстоит и это дает более-менее похожие значения выходных значений нейронов, даже если данные в батчах сильно отличаются (например, в одном батче только цветные машины, а в другом только черные) и было замечено, что таким образом ускоряется обучение. Интересно, за счет чего? Есть у меня мнение на этот счет, и хочу знать, что вы думаете мо этому поводу. Если мы стандартизируем наши данные, то в большинстве случаев они будут иметь значение в диапазоне от 1 до 3 (т.к большинство значений в нормальном распределении находятся на 1-3 стандартных отклонения от среднего), а производная такой функции активации как например sigmoid, в точках из диапазона [1;3] выглядят очень даже неплохо т.е значения производной в точках из этого диапазона такие что обучение вряд ли будет заторможено. Если же не выполнять стандартизацию, то входы функций активации могут быть значительно большими, в результате чего производные в этих точках будут очень малы и тем самым обучение может быть заторможено.
Комментарий того "читателя", про которых обычно во всяких учебниках пишут "внимательный читатель конечно отметит и спросит..." - а ты такой читаешь и думаешь "эээ...ну да, ну ладно, хорошо, идем дальше " :)
Спасибо за урок, более менее разобрался, но всеже, я правильно понимаю что данный алгоритм будет актуален в том случае если у нас в обучающей выборке будет преобладать количество обьектов одного вида на другим, например если по аналогии с машинами, если черных машин в выборке будет гораздо больше чем например красных??? Потому что в принцыпе, если мы БАТЧИ будем формировать на каждой эпохе случайным образом, то в среднем они будут содержать одинаковое колличество обьектов одного вида, и не понятно каким образом в таком случае нормализация поможет. Также мне кажется что BatchNormalization не подходит под функцию активации ReLu, так как при нормализации к математическому ожиданию = 0, мы некоторые данные которые изначально были равны положительному числу, сделаем равными отрицательному (так как мы будем вычитать из v_k значение мат ожидания), а функция ReLu зануляет отрицательные значения, и в результате у нас получится потеря информативности. но это только мое предположение.
Поехали уже кодить свою первую сеть! ) Теория , это конечно хорошо, но практика лучше, а теорией можно капельно промаслить саму практику. А еще лучше по новой сети на каждом уроке, тогда мы на множестве примеров быстрее вникнем в суть и начнем писать свои нейросети, делая ошибки и находя варианты решений. А то от теории уже голова пухнет, а сесть и начать свою первую сеть так и не получается ...))) Спасибо за разжевывание всех нюансов, если и практику будут также разжевывать, то это будет очень и очень здорово.
@@selfedu_rus Ура! Рассказываю почему я вроде как "тороплюсь". "Программирую" в свое удовольствие с 1998 года, еще с бейсика и ассемблера начинал на Синклере. Потом забросил, иногда писал на html и php сайты. Недавно нужно было для одного проекта изучить Питон, перечитал кучу книжек, сайтов, ну так поверхностно, вроде и с примерами, но дело почти не продвигалось. Потом надо стало написать парсер новостей, нашел видеоурок Мурренгана, в котором просто был пример работы с API Вконтакте, пример рабочего скрипта на питоне, без воды, но с объяснением каждой строчки кода зачем это надо. Я просто повторил, и потом с помощью гугла начал добавлять в код модули и буквально начал "кодить" на питоне за месяц, хотя до этого полгода не мог сдвинуться с места. Теперь стала нужда в ИИ, да и просто интересно было это освоить, потому как давно хотел сам подобное написать, а потом узнал что ИИ давно уже людьми написан и нефик изобретать велосипед. Полгода штудирую сайты, видосы, но както все, то тут непонятно с чего начать, то тут непонятно как все запихнуть и что выбрать. Попал недавно на ваш канал и офигел насколько тут все разжевано для нас "чайников". Спасибо вам огромное. Простоу меня уже "терпелка" заканчивается, хочется такого же примера для ИИ как было для АПИ Контакта, чтобы я уже от него оттолкнулся и поплыл дальше )
@@nebosyls212 да я для начала по полям, по полям ) а там видно будет ) А программирование постигает та же самая участь что и остальные отрасли - в них приходят обыватели. Посмотрите на музыку, юмор, СМИ. Сколько там сейчас бездарностей и это считается круто, но это есть развитие общества, человечество все меньше работает физически чтобы выжить и все больше уходит в область где нужно шевелить мозгами а не мускулами. Само собой все это заполонилось бездарностями и быдлом (я в том числе), но это есть обучение человечества, оно "умнеет" с каждым поколением, конечно с перекосами и порой деградацией, но у эволюции нет определенной цели, но цель есть у нас. Скорей всего из меня не выйдет выдающегося программиста, но я по крайней мере буду занят мозговой деятельностью и чем черт не шутит принесу пользу обществу, а не просто буду изо дня в день ходить на работу, получать зарплату, проедать и пропивать ее под шум телевизора и разговоров с соседями...
Непонятно, каждый одинаковый пиксел всех изображений минибатча подвергается нормализации независимо, или сначала рассчитываются плотности распределения яркостей каждого изображения, а потом производится нормализация между изображениями, уравнивая их плотности распределения в пределах минибатча? В первом случае изображения внутри минибатча могут существенно искажаться!
@@selfedu_rus в любом случае спасибо вам за ваши труды, обучаться по вашим видео - одно удовольствие, начал с основ пайтона, затем основы ооп, теория вероятностей, алгоритмы, нейронки
Вопрос: почему на 7:46 вы говорите что плохо, что теряется нелинейность, но при этом мы используем по сути линейную функцию активации ReLu? Получается, что ReLu плохо использовать?
А как мы выполняем batch normalization для нейрона перед ф-ией активации, если для этого нам нужно знать V - вектор, состоящий из входных значений всего батча для данного нейрона? Если я правильно понял, то V мы можем узнать, когда пропустим все входные вектора из батча через нейронную сеть
У меня вопрос. Батч-нормализация может применяться к любым слоям (как внутренних, так и выходных) или только к выходным? Update Посмотрел в статьях с кодом. Да, можно, на любых слоях, в т.ч. и выходом.
@@selfedu_rus Я вот подумал, а надо ли их вообще нормализовывать? Ведь нормализация необходима, чтоб данные не попадали в область насыщения функции активации. Но есть мы будем брать в качестве функции не сигмоиду, а линейную, то, получается, проблема решена? Как считаете? Да, и ещё хочу отдельно Вас поблагодарить, что Вы уделяете внимание вопросам подписчиков, помогаете разобраться с различными вопросами. Спасибо!
Спасибо! В целом, да, вы все верно понимаете (на мой взгляд). Только просто линейную брать нехорошо, т.к. смысл нейросети тогда теряется, т.к. композиция линейных нейронов = одному линейному нейрону )) Лучше взять ReLU или ELU, а на выходе да, можно линейную поставить. Успехов!
@@selfedu_rus акцент на слове "наравне", то что они обучаются это понятно. Я не пытаюсь вас поправить, мне самому интересно как это по факту реализовано в пакетах. Может быть поделитесь источниками?
@@andrusha1337 Вот название оригинальной статьи "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift" я опирался, в основном, на нее.
@@andrusha1337 pytorch.org/docs/stable/generated/torch.nn.BatchNorm2d.html#batchnorm2d в документации фреймворка PyTorch указано, что ""γ and β are learnable parameters". т.е. эти параметры обучаемы ) Так же есть хороший Вики Конспект на эту тему - neerc.ifmo.ru/wiki/index.php?title=Batch-normalization , в нем так же указывается, что параметры γ и β обучаемы )
Кажется я понял почему под вашими видео не так много лайков, как они того заслуживают - люди так хотят увидеть очередное прекрасное изложение материала, что спешат смотреть следующее видео! ))
Всё невероятно понятно и чётко!
Благодарю за прекрасные уроки!
🔥🔥🔥🔥🔥🔥🔥🔥🔥
Большое спасибо за ваше видео. Прочитал статью, плохо понял метод, но после видео, стало намного понятнее.
Балдеж, автору респект!
Огромное спасибо за материал
спасибо вам большое за ваши уроки
Лайк, очень доступно объясняете
Какой идиот поставил дизлайк. Это самое лучшие и подробное объяснение которое я слышал. Спасибо
4 Человека которые не смотрели видео судя по всему
Почему следующие видео закрыты? Как получить доступ? Еще не готовы?
Я их специально открываю с задержкой, чтобы основная масса успевала просмотреть предыдущий материал. Иначе число просмотров резко проседает )
В 8 уроке по распознаванию изображения цифр я не нормализовал данные. На выходе получалась точность около 20% и выскоий средний квадрат отклонений. Вставил batch-нормализацию через каждый слой (у меня было 3 слоя). Результаты выросли до 97% точности и 0.02 среднего квадрата. Потом нормализовал данные, делением массивов на 255 и особо ничего не поменялось. Заменяет ли батч-нормализация предварительную нормализацию данных? А там ещё есть послойная нормализация layers. Вопросов много, реальных ответов только три...
Да, batch-нормализация действительно нормализует данные, поэтому можно её использовать в качестве первого слоя, чтобы не заниматься нормализацией вручную, хотя тестовую и оценочные выборки всё равно придётся нормализовать самостоятельно)
not stopping man
Спасибо за урок! Я сделал некоторые выводы и интересно ваше мнение. Прежде всего хочу убедиться, правильно ли я понял урок. В начале урока вы сказали, что этот алгоритм был предложен для решения проблемы ускорения обучения. Кажется я понял в чем состоит это ускорение и интересно ваше мнение.
Мы по сути для значений на выходах нейронов производим z-стандартизацию, и тем самым каждый выход на нейроне интерпретируем как то, на сколько стандартных отклонений от среднего это значение отстоит и это дает более-менее похожие значения выходных значений нейронов, даже если данные в батчах сильно отличаются (например, в одном батче только цветные машины, а в другом только черные) и было замечено, что таким образом ускоряется обучение.
Интересно, за счет чего? Есть у меня мнение на этот счет, и хочу знать, что вы думаете мо этому поводу. Если мы стандартизируем наши данные, то в большинстве случаев они будут иметь значение в диапазоне от 1 до 3 (т.к большинство значений в нормальном распределении находятся на 1-3 стандартных отклонения от среднего), а производная такой функции активации как например sigmoid, в точках из диапазона [1;3] выглядят очень даже неплохо т.е значения производной в точках из этого диапазона такие что обучение вряд ли будет заторможено. Если же не выполнять стандартизацию, то входы функций активации могут быть значительно большими, в результате чего производные в этих точках будут очень малы и тем самым обучение может быть заторможено.
А ты харош, интересно было прочесть. Я даже и не задумался об этом
Комментарий того "читателя", про которых обычно во всяких учебниках пишут "внимательный читатель конечно отметит и спросит..." - а ты такой читаешь и думаешь "эээ...ну да, ну ладно, хорошо, идем дальше " :)
Спасибо за урок, более менее разобрался, но всеже, я правильно понимаю что данный алгоритм будет актуален в том случае если у нас в обучающей выборке будет преобладать количество обьектов одного вида на другим, например если по аналогии с машинами, если черных машин в выборке будет гораздо больше чем например красных??? Потому что в принцыпе, если мы БАТЧИ будем формировать на каждой эпохе случайным образом, то в среднем они будут содержать одинаковое колличество обьектов одного вида, и не понятно каким образом в таком случае нормализация поможет.
Также мне кажется что BatchNormalization не подходит под функцию активации ReLu, так как при нормализации к математическому ожиданию = 0, мы некоторые данные которые изначально были равны положительному числу, сделаем равными отрицательному (так как мы будем вычитать из v_k значение мат ожидания), а функция ReLu зануляет отрицательные значения, и в результате у нас получится потеря информативности. но это только мое предположение.
Поехали уже кодить свою первую сеть! ) Теория , это конечно хорошо, но практика лучше, а теорией можно капельно промаслить саму практику. А еще лучше по новой сети на каждом уроке, тогда мы на множестве примеров быстрее вникнем в суть и начнем писать свои нейросети, делая ошибки и находя варианты решений. А то от теории уже голова пухнет, а сесть и начать свою первую сеть так и не получается ...))) Спасибо за разжевывание всех нюансов, если и практику будут также разжевывать, то это будет очень и очень здорово.
Скоро будет и практика и много разной! Это обучающий курс, поэтому здесь нужны все базовые нюансы, далее они будут активно использоваться.
@@selfedu_rus Ура! Рассказываю почему я вроде как "тороплюсь". "Программирую" в свое удовольствие с 1998 года, еще с бейсика и ассемблера начинал на Синклере. Потом забросил, иногда писал на html и php сайты. Недавно нужно было для одного проекта изучить Питон, перечитал кучу книжек, сайтов, ну так поверхностно, вроде и с примерами, но дело почти не продвигалось. Потом надо стало написать парсер новостей, нашел видеоурок Мурренгана, в котором просто был пример работы с API Вконтакте, пример рабочего скрипта на питоне, без воды, но с объяснением каждой строчки кода зачем это надо. Я просто повторил, и потом с помощью гугла начал добавлять в код модули и буквально начал "кодить" на питоне за месяц, хотя до этого полгода не мог сдвинуться с места.
Теперь стала нужда в ИИ, да и просто интересно было это освоить, потому как давно хотел сам подобное написать, а потом узнал что ИИ давно уже людьми написан и нефик изобретать велосипед. Полгода штудирую сайты, видосы, но както все, то тут непонятно с чего начать, то тут непонятно как все запихнуть и что выбрать. Попал недавно на ваш канал и офигел насколько тут все разжевано для нас "чайников". Спасибо вам огромное. Простоу меня уже "терпелка" заканчивается, хочется такого же примера для ИИ как было для АПИ Контакта, чтобы я уже от него оттолкнулся и поплыл дальше )
Обучение без теории это что сесть за руль автомобиля не зная как он устроен и правил дорожнего движения.
@@nebosyls212 да я для начала по полям, по полям ) а там видно будет )
А программирование постигает та же самая участь что и остальные отрасли - в них приходят обыватели. Посмотрите на музыку, юмор, СМИ. Сколько там сейчас бездарностей и это считается круто, но это есть развитие общества, человечество все меньше работает физически чтобы выжить и все больше уходит в область где нужно шевелить мозгами а не мускулами. Само собой все это заполонилось бездарностями и быдлом (я в том числе), но это есть обучение человечества, оно "умнеет" с каждым поколением, конечно с перекосами и порой деградацией, но у эволюции нет определенной цели, но цель есть у нас.
Скорей всего из меня не выйдет выдающегося программиста, но я по крайней мере буду занят мозговой деятельностью и чем черт не шутит принесу пользу обществу, а не просто буду изо дня в день ходить на работу, получать зарплату, проедать и пропивать ее под шум телевизора и разговоров с соседями...
Непонятно, каждый одинаковый пиксел всех изображений минибатча подвергается нормализации независимо, или сначала рассчитываются плотности распределения яркостей каждого изображения, а потом производится нормализация между изображениями, уравнивая их плотности распределения в пределах минибатча? В первом случае изображения внутри минибатча могут существенно искажаться!
Боже, спасибо, что все понятно. А то читаешь эти статьи и тонешь в непонятном материале...
добрый день, а планируется ли такой же курс, как по питону, только про Go?
здравствуйте, пока незнаю...
@@selfedu_rus в любом случае спасибо вам за ваши труды, обучаться по вашим видео - одно удовольствие, начал с основ пайтона, затем основы ооп, теория вероятностей, алгоритмы, нейронки
Вопрос: почему на 7:46 вы говорите что плохо, что теряется нелинейность, но при этом мы используем по сути линейную функцию активации ReLu? Получается, что ReLu плохо использовать?
главная ошибка - считать ReLu линейной функцией активации, почитайте stackoverflow, там много дискурсов на эту тему.
А как мы выполняем batch normalization для нейрона перед ф-ией активации, если для этого нам нужно знать V - вектор, состоящий из входных значений всего батча для данного нейрона? Если я правильно понял, то V мы можем узнать, когда пропустим все входные вектора из батча через нейронную сеть
По идее да, здесь нужно почитать внимательно документацию по Keras и посмотреть, как это правильно сделать.
@@selfedu_rus Понял, посмотрю, какую они заумную реализацию придумали)
У меня вопрос. Батч-нормализация может применяться к любым слоям (как внутренних, так и выходных) или только к выходным?
Update
Посмотрел в статьях с кодом. Да, можно, на любых слоях, в т.ч. и выходом.
А чтобы использовать batchnormalization перед слоем, что нужно делать?
прописать его на выходе предыдущего слоя
@@selfedu_rus спасибо
Сергей, подскажите как можно нормализовать данные цены биткоина при построении RNN?
без понятия, тут нужно экспериментировать
@@selfedu_rus Я вот подумал, а надо ли их вообще нормализовывать? Ведь нормализация необходима, чтоб данные не попадали в область насыщения функции активации. Но есть мы будем брать в качестве функции не сигмоиду, а линейную, то, получается, проблема решена? Как считаете?
Да, и ещё хочу отдельно Вас поблагодарить, что Вы уделяете внимание вопросам подписчиков, помогаете разобраться с различными вопросами. Спасибо!
Спасибо! В целом, да, вы все верно понимаете (на мой взгляд). Только просто линейную брать нехорошо, т.к. смысл нейросети тогда теряется, т.к. композиция линейных нейронов = одному линейному нейрону )) Лучше взять ReLU или ELU, а на выходе да, можно линейную поставить. Успехов!
почему нельзя цветные авто преобразовать в черно-белые перед операцией?
Можно, только это потеря информации. Возможно, лучше распознавать именно цветные изображения, а не черно-белые.
@@selfedu_rus действительно, интересно
Спасибо за труд. Один вопрос : вы уверены, что можно утверждать, что гамма и бэта наравне с весами проходят процесс обучения?
Да, так написано в статьях и, к тому же, это логично. Как же еще их подобрать?
@@selfedu_rus акцент на слове "наравне", то что они обучаются это понятно. Я не пытаюсь вас поправить, мне самому интересно как это по факту реализовано в пакетах. Может быть поделитесь источниками?
@@andrusha1337 Вот название оригинальной статьи "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift" я опирался, в основном, на нее.
@@selfedu_rus Спасибо
@@andrusha1337 pytorch.org/docs/stable/generated/torch.nn.BatchNorm2d.html#batchnorm2d в документации фреймворка PyTorch указано, что ""γ and β are learnable parameters". т.е. эти параметры обучаемы )
Так же есть хороший Вики Конспект на эту тему - neerc.ifmo.ru/wiki/index.php?title=Batch-normalization , в нем так же указывается, что параметры γ и β обучаемы )
имеет ли смысл делать несколько таких слоев в одной модели?
да, у каждого слоя Dense (или другого) можно ставить один Batch Normalization
10102024
Лекции зачётные, спасибо, но микрофон убер дермище... дребезг адский
Посоветуйте микрофон. Уже третий сменил.
@@selfedu_rus не, тут я профан, не подскажу, но менять однозначно нужно )
@@selfedu_rus А вы через звуковую карту пишете? Может быть, дело в ней?
@@coolgood8893 все нормально, разобрался уже )