Batch Normalization (батч-нормализация) что это такое? | #12 нейросети на Python

Поделиться
HTML-код
  • Опубликовано: 26 окт 2024

Комментарии • 80

  • @gobals8925
    @gobals8925 2 года назад +23

    Кажется я понял почему под вашими видео не так много лайков, как они того заслуживают - люди так хотят увидеть очередное прекрасное изложение материала, что спешат смотреть следующее видео! ))

  • @antonevdokimov8218
    @antonevdokimov8218 3 года назад +8

    Всё невероятно понятно и чётко!
    Благодарю за прекрасные уроки!
    🔥🔥🔥🔥🔥🔥🔥🔥🔥

  • @Тима-щ2ю
    @Тима-щ2ю 6 месяцев назад +1

    Большое спасибо за ваше видео. Прочитал статью, плохо понял метод, но после видео, стало намного понятнее.

  • @cantwaitforit
    @cantwaitforit Год назад +2

    Балдеж, автору респект!

  • @rustemalimtay3052
    @rustemalimtay3052 3 года назад +4

    Огромное спасибо за материал

  • @malygin_anton
    @malygin_anton 3 года назад +2

    спасибо вам большое за ваши уроки

  • @andreyprometey
    @andreyprometey 4 года назад +6

    Лайк, очень доступно объясняете

  • @86Blind
    @86Blind 3 года назад +8

    Какой идиот поставил дизлайк. Это самое лучшие и подробное объяснение которое я слышал. Спасибо

    • @VenatoresnamIgnotis
      @VenatoresnamIgnotis 3 года назад

      4 Человека которые не смотрели видео судя по всему

  • @ДмитрийВасильев-ж1е4ь

    Почему следующие видео закрыты? Как получить доступ? Еще не готовы?

    • @selfedu_rus
      @selfedu_rus  4 года назад

      Я их специально открываю с задержкой, чтобы основная масса успевала просмотреть предыдущий материал. Иначе число просмотров резко проседает )

  • @paulkarkarin466
    @paulkarkarin466 2 года назад +3

    В 8 уроке по распознаванию изображения цифр я не нормализовал данные. На выходе получалась точность около 20% и выскоий средний квадрат отклонений. Вставил batch-нормализацию через каждый слой (у меня было 3 слоя). Результаты выросли до 97% точности и 0.02 среднего квадрата. Потом нормализовал данные, делением массивов на 255 и особо ничего не поменялось. Заменяет ли батч-нормализация предварительную нормализацию данных? А там ещё есть послойная нормализация layers. Вопросов много, реальных ответов только три...

    • @DeadManntrolling
      @DeadManntrolling 2 года назад

      Да, batch-нормализация действительно нормализует данные, поэтому можно её использовать в качестве первого слоя, чтобы не заниматься нормализацией вручную, хотя тестовую и оценочные выборки всё равно придётся нормализовать самостоятельно)

  • @dmitrymitrofanov3920
    @dmitrymitrofanov3920 4 года назад +2

    not stopping man

  • @КоляВасильев-о5и
    @КоляВасильев-о5и 3 года назад +10

    Спасибо за урок! Я сделал некоторые выводы и интересно ваше мнение. Прежде всего хочу убедиться, правильно ли я понял урок. В начале урока вы сказали, что этот алгоритм был предложен для решения проблемы ускорения обучения. Кажется я понял в чем состоит это ускорение и интересно ваше мнение.
    Мы по сути для значений на выходах нейронов производим z-стандартизацию, и тем самым каждый выход на нейроне интерпретируем как то, на сколько стандартных отклонений от среднего это значение отстоит и это дает более-менее похожие значения выходных значений нейронов, даже если данные в батчах сильно отличаются (например, в одном батче только цветные машины, а в другом только черные) и было замечено, что таким образом ускоряется обучение.
    Интересно, за счет чего? Есть у меня мнение на этот счет, и хочу знать, что вы думаете мо этому поводу. Если мы стандартизируем наши данные, то в большинстве случаев они будут иметь значение в диапазоне от 1 до 3 (т.к большинство значений в нормальном распределении находятся на 1-3 стандартных отклонения от среднего), а производная такой функции активации как например sigmoid, в точках из диапазона [1;3] выглядят очень даже неплохо т.е значения производной в точках из этого диапазона такие что обучение вряд ли будет заторможено. Если же не выполнять стандартизацию, то входы функций активации могут быть значительно большими, в результате чего производные в этих точках будут очень малы и тем самым обучение может быть заторможено.

    • @AxwelHD
      @AxwelHD 3 года назад

      А ты харош, интересно было прочесть. Я даже и не задумался об этом

    • @aleximtb
      @aleximtb 2 года назад +1

      Комментарий того "читателя", про которых обычно во всяких учебниках пишут "внимательный читатель конечно отметит и спросит..." - а ты такой читаешь и думаешь "эээ...ну да, ну ладно, хорошо, идем дальше " :)

  • @СарматПересветов
    @СарматПересветов 16 дней назад

    Спасибо за урок, более менее разобрался, но всеже, я правильно понимаю что данный алгоритм будет актуален в том случае если у нас в обучающей выборке будет преобладать количество обьектов одного вида на другим, например если по аналогии с машинами, если черных машин в выборке будет гораздо больше чем например красных??? Потому что в принцыпе, если мы БАТЧИ будем формировать на каждой эпохе случайным образом, то в среднем они будут содержать одинаковое колличество обьектов одного вида, и не понятно каким образом в таком случае нормализация поможет.
    Также мне кажется что BatchNormalization не подходит под функцию активации ReLu, так как при нормализации к математическому ожиданию = 0, мы некоторые данные которые изначально были равны положительному числу, сделаем равными отрицательному (так как мы будем вычитать из v_k значение мат ожидания), а функция ReLu зануляет отрицательные значения, и в результате у нас получится потеря информативности. но это только мое предположение.

  • @ValstanSav
    @ValstanSav 4 года назад +7

    Поехали уже кодить свою первую сеть! ) Теория , это конечно хорошо, но практика лучше, а теорией можно капельно промаслить саму практику. А еще лучше по новой сети на каждом уроке, тогда мы на множестве примеров быстрее вникнем в суть и начнем писать свои нейросети, делая ошибки и находя варианты решений. А то от теории уже голова пухнет, а сесть и начать свою первую сеть так и не получается ...))) Спасибо за разжевывание всех нюансов, если и практику будут также разжевывать, то это будет очень и очень здорово.

    • @selfedu_rus
      @selfedu_rus  4 года назад +2

      Скоро будет и практика и много разной! Это обучающий курс, поэтому здесь нужны все базовые нюансы, далее они будут активно использоваться.

    • @ValstanSav
      @ValstanSav 4 года назад +6

      @@selfedu_rus Ура! Рассказываю почему я вроде как "тороплюсь". "Программирую" в свое удовольствие с 1998 года, еще с бейсика и ассемблера начинал на Синклере. Потом забросил, иногда писал на html и php сайты. Недавно нужно было для одного проекта изучить Питон, перечитал кучу книжек, сайтов, ну так поверхностно, вроде и с примерами, но дело почти не продвигалось. Потом надо стало написать парсер новостей, нашел видеоурок Мурренгана, в котором просто был пример работы с API Вконтакте, пример рабочего скрипта на питоне, без воды, но с объяснением каждой строчки кода зачем это надо. Я просто повторил, и потом с помощью гугла начал добавлять в код модули и буквально начал "кодить" на питоне за месяц, хотя до этого полгода не мог сдвинуться с места.
      Теперь стала нужда в ИИ, да и просто интересно было это освоить, потому как давно хотел сам подобное написать, а потом узнал что ИИ давно уже людьми написан и нефик изобретать велосипед. Полгода штудирую сайты, видосы, но както все, то тут непонятно с чего начать, то тут непонятно как все запихнуть и что выбрать. Попал недавно на ваш канал и офигел насколько тут все разжевано для нас "чайников". Спасибо вам огромное. Простоу меня уже "терпелка" заканчивается, хочется такого же примера для ИИ как было для АПИ Контакта, чтобы я уже от него оттолкнулся и поплыл дальше )

    • @nebosyls212
      @nebosyls212 4 года назад +2

      Обучение без теории это что сесть за руль автомобиля не зная как он устроен и правил дорожнего движения.

    • @ValstanSav
      @ValstanSav 4 года назад +3

      @@nebosyls212 да я для начала по полям, по полям ) а там видно будет )
      А программирование постигает та же самая участь что и остальные отрасли - в них приходят обыватели. Посмотрите на музыку, юмор, СМИ. Сколько там сейчас бездарностей и это считается круто, но это есть развитие общества, человечество все меньше работает физически чтобы выжить и все больше уходит в область где нужно шевелить мозгами а не мускулами. Само собой все это заполонилось бездарностями и быдлом (я в том числе), но это есть обучение человечества, оно "умнеет" с каждым поколением, конечно с перекосами и порой деградацией, но у эволюции нет определенной цели, но цель есть у нас.
      Скорей всего из меня не выйдет выдающегося программиста, но я по крайней мере буду занят мозговой деятельностью и чем черт не шутит принесу пользу обществу, а не просто буду изо дня в день ходить на работу, получать зарплату, проедать и пропивать ее под шум телевизора и разговоров с соседями...

  • @АлександрПетровский-я7б

    Непонятно, каждый одинаковый пиксел всех изображений минибатча подвергается нормализации независимо, или сначала рассчитываются плотности распределения яркостей каждого изображения, а потом производится нормализация между изображениями, уравнивая их плотности распределения в пределах минибатча? В первом случае изображения внутри минибатча могут существенно искажаться!

  • @bysedova
    @bysedova Год назад +1

    Боже, спасибо, что все понятно. А то читаешь эти статьи и тонешь в непонятном материале...

  • @Aleksandr___
    @Aleksandr___ 4 года назад +2

    добрый день, а планируется ли такой же курс, как по питону, только про Go?

    • @selfedu_rus
      @selfedu_rus  4 года назад

      здравствуйте, пока незнаю...

    • @Aleksandr___
      @Aleksandr___ 4 года назад +6

      @@selfedu_rus в любом случае спасибо вам за ваши труды, обучаться по вашим видео - одно удовольствие, начал с основ пайтона, затем основы ооп, теория вероятностей, алгоритмы, нейронки

  • @alexandercherkashin3512
    @alexandercherkashin3512 Год назад +1

    Вопрос: почему на 7:46 вы говорите что плохо, что теряется нелинейность, но при этом мы используем по сути линейную функцию активации ReLu? Получается, что ReLu плохо использовать?

    • @Тима-щ2ю
      @Тима-щ2ю 6 месяцев назад

      главная ошибка - считать ReLu линейной функцией активации, почитайте stackoverflow, там много дискурсов на эту тему.

  • @ДенисАгапитов-э6у
    @ДенисАгапитов-э6у 3 года назад +2

    А как мы выполняем batch normalization для нейрона перед ф-ией активации, если для этого нам нужно знать V - вектор, состоящий из входных значений всего батча для данного нейрона? Если я правильно понял, то V мы можем узнать, когда пропустим все входные вектора из батча через нейронную сеть

    • @selfedu_rus
      @selfedu_rus  3 года назад

      По идее да, здесь нужно почитать внимательно документацию по Keras и посмотреть, как это правильно сделать.

    • @ДенисАгапитов-э6у
      @ДенисАгапитов-э6у 3 года назад +1

      @@selfedu_rus Понял, посмотрю, какую они заумную реализацию придумали)

  • @madmarshal7708
    @madmarshal7708 Год назад +1

    У меня вопрос. Батч-нормализация может применяться к любым слоям (как внутренних, так и выходных) или только к выходным?
    Update
    Посмотрел в статьях с кодом. Да, можно, на любых слоях, в т.ч. и выходом.

  • @dryadliker
    @dryadliker 24 дня назад +1

    А чтобы использовать batchnormalization перед слоем, что нужно делать?

    • @selfedu_rus
      @selfedu_rus  21 день назад +1

      прописать его на выходе предыдущего слоя

    • @dryadliker
      @dryadliker 20 дней назад

      @@selfedu_rus спасибо

  • @frolomaskor
    @frolomaskor 2 года назад

    Сергей, подскажите как можно нормализовать данные цены биткоина при построении RNN?

    • @selfedu_rus
      @selfedu_rus  2 года назад

      без понятия, тут нужно экспериментировать

    • @frolomaskor
      @frolomaskor 2 года назад +3

      @@selfedu_rus Я вот подумал, а надо ли их вообще нормализовывать? Ведь нормализация необходима, чтоб данные не попадали в область насыщения функции активации. Но есть мы будем брать в качестве функции не сигмоиду, а линейную, то, получается, проблема решена? Как считаете?
      Да, и ещё хочу отдельно Вас поблагодарить, что Вы уделяете внимание вопросам подписчиков, помогаете разобраться с различными вопросами. Спасибо!

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

      Спасибо! В целом, да, вы все верно понимаете (на мой взгляд). Только просто линейную брать нехорошо, т.к. смысл нейросети тогда теряется, т.к. композиция линейных нейронов = одному линейному нейрону )) Лучше взять ReLU или ELU, а на выходе да, можно линейную поставить. Успехов!

  • @Inteonmteca
    @Inteonmteca 3 года назад +1

    почему нельзя цветные авто преобразовать в черно-белые перед операцией?

    • @selfedu_rus
      @selfedu_rus  3 года назад

      Можно, только это потеря информации. Возможно, лучше распознавать именно цветные изображения, а не черно-белые.

    • @Inteonmteca
      @Inteonmteca 3 года назад +1

      @@selfedu_rus действительно, интересно

  • @andrusha1337
    @andrusha1337 3 года назад

    Спасибо за труд. Один вопрос : вы уверены, что можно утверждать, что гамма и бэта наравне с весами проходят процесс обучения?

    • @selfedu_rus
      @selfedu_rus  3 года назад +2

      Да, так написано в статьях и, к тому же, это логично. Как же еще их подобрать?

    • @andrusha1337
      @andrusha1337 3 года назад

      @@selfedu_rus акцент на слове "наравне", то что они обучаются это понятно. Я не пытаюсь вас поправить, мне самому интересно как это по факту реализовано в пакетах. Может быть поделитесь источниками?

    • @selfedu_rus
      @selfedu_rus  3 года назад

      @@andrusha1337 Вот название оригинальной статьи "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift" я опирался, в основном, на нее.

    • @andrusha1337
      @andrusha1337 3 года назад

      @@selfedu_rus Спасибо

    • @АнтонШиряев-ш2ю
      @АнтонШиряев-ш2ю 3 года назад +1

      @@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 , в нем так же указывается, что параметры γ и β обучаемы )

  • @sergeiku2839
    @sergeiku2839 4 года назад

    имеет ли смысл делать несколько таких слоев в одной модели?

    • @selfedu_rus
      @selfedu_rus  4 года назад +1

      да, у каждого слоя Dense (или другого) можно ставить один Batch Normalization

  • @pages777
    @pages777 17 дней назад

    10102024

  • @svs7930
    @svs7930 4 года назад +1

    Лекции зачётные, спасибо, но микрофон убер дермище... дребезг адский

    • @selfedu_rus
      @selfedu_rus  4 года назад

      Посоветуйте микрофон. Уже третий сменил.

    • @svs7930
      @svs7930 4 года назад

      @@selfedu_rus не, тут я профан, не подскажу, но менять однозначно нужно )

    • @coolgood8893
      @coolgood8893 3 года назад

      @@selfedu_rus А вы через звуковую карту пишете? Может быть, дело в ней?

    • @selfedu_rus
      @selfedu_rus  3 года назад

      @@coolgood8893 все нормально, разобрался уже )